news 2026/10/5 19:06:03

汇编语言全接触-77.Win32ASM经验点滴#1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
汇编语言全接触-77.Win32ASM经验点滴#1

Q1. 如何隐藏/显示任务栏?

Q2. 如何禁止/允许/显示/隐藏开始按钮?

Q3. 如何创建一个真正的"总在最上面"窗口?

Q4. 如何创建热键?比如CTRL + ALT + A

Q5. 如何获得Windows目录和系统目录?

Q6. 如何从我的程序打开开始菜单?

Q7. 如何关闭被正激活的程序?

Q8. 如何去掉窗口标题?

Q9. 如何知道窗口是否在任务栏中(或可见) ?

Q10. 如何隐藏一个窗口?

Q11. 如何将窗口置于前台?

Q12. 如何屏蔽CTRL+ALT+DEL,ALT+TAB+CTRL+ESC这些键?

Q13. 如何确定Windows任务栏的自动隐藏特性是否被激活?

Q14. 如何使用默认的浏览器或邮件程序?

Q15. 如何用Win32 API显示网络连接对话框?

- 如何隐藏/显示任务栏?

shell db "Shell_TrayWnd",0 ; 任务栏的类名

invoke FindWindow,addr shell,NULL ; 先获得句柄,之后隐藏.

.if eax != 0

invoke ShowWindow,eax,SW_HIDE ; 用SW_SHOW显示

.endif

- 如何禁止/允许/显示/隐藏开始按钮?

.data?

buffer db 127 dup(?)

.data

shell db "Shell_TrayWnd",0

sbar db "BUTTON",0

child dd ?

slen dd ?

.code

invoke FindWindow,addr shell,NULL ; 获得状态栏句柄

mov tray, eax

invoke GetWindow,tray, GW_CHILD ; 获得状态栏的子窗口(如果有的话)

mov child, eax

.if child != 0

invoke GetClassName,child,offset buffer, sizeof buffer ;获得子窗口类名

.if eax > 0

invoke lstrlen, offset buffer ;获得类名长度

mov slen,eax

invoke CharUpperBuff,offset buffer,slen ;转为大写

invoke lstrcmp,addr buffer, addr sbar ;将类名与'BUTTON'比较

.if eax == 0

invoke ShowWindow,child,SW_HIDE ; 隐藏开始按钮

; invoke ShowWindow,child,SW_SHOW ; 显示开始按钮

; invoke EnableWindow,child,FALSE ; 禁止开始按钮

; invoke EnableWindow,child,TRUE ; 允许开始按钮

.endif

.endif

.endif

- 如何创建一个真正的"总在最上面"窗口?

invoke SetWindowPos,hWin, HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE

- 如何创建热键?比如CTRL + ALT + A

.data

hmsg db "HotKey CTRL + ALT + A Works good!",0

hcap db "Hotkey Example",0

.code

.if uMsg == WM_CREATE

invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL + ALT + A (041h is 65 - 065h is 101)

.elseif uMsg == WM_HOTKEY

invoke MessageBox,hWin,addr hmsg,addr hcap, MB_OK or MB_ICONINFORMATION

.elseif uMsg == WM_DESTROY

invoke UnregisterHotKey,hWin,065h

invoke PostQuitMessage,NULL

return 0

.endif

-如何获得Windows目录和系统目录

.data

buffer db 50 dup(?)

hCap db "WindowsDirectory",0

.code

invoke GetWindowsDirectory, addr buffer, sizeof buffer ; 置Windows目录于缓冲区中

; invoke GetSystemDirectory, addr buffer, sizeof buffer ;置系统目录于缓冲区中

invoke MessageBox,hWnd, addr buffer, addr hCap, MB_OK or MB_ICONINFORMATION

- 如何从我的程序打开开始菜单?

invoke SendMessage,hWnd,WM_SYSCOMMAND,SC_TASKLIST,NULL

- 如何关闭正被激活的程序 ?

.data

fwin dd ?

.code

invoke GetForegroundWindow

mov fwin,eax

invoke SendMessage, fwin, WM_CLOSE,NULL

- 如何去掉窗口标题 ?

invoke GetWindowLong,hWnd,GWL_STYLE ; 获得当前窗口类

and eax,not WS_CAPTION ; 去掉WS_CAPTION

invoke SetWindowLong,hWnd,GWL_STYLE,eax ; 设置窗口类

- 如何知道窗口是否在任务栏中(或可见)?

invoke IsWindowVisible,hWin

.if eax == TRUE

; 窗口可见

.else

; 窗口不可见

.endif

- 如何隐藏一个窗口?

.data

mirc db "mIRC32",0

mhand dd ?

.code

invoke FindWindow,addr mirc, NULL ; 寻找mIRC32

mov mhand,eax

.if mhand != 0 ; 找到?

invoke ShowWindow,mhand,SW_SHOW ; 显示窗口

; invoke ShowWindow,mhand,SW_HIDE ; 隐藏窗口

.else

; mIRC32未运行...

.endif

- 如何将窗口置于前台?

invoke SetForegroundWindow, mhand

- 如何屏蔽CTRL+ALT+DEL,ALT+TAB+CTRL+ESC这些键?

invoke SystemParametersInfo,SPI_SCREENSAVERRUNNING,1,NULL,NULL

; Windows98 only 1 关闭 0 允许

- 如何确定Windows任务栏的自动隐藏特性是否被激活?

.data

AppBar APPBARDATA {} ; {} 指使用默认值... Thanks to TTom

.code

mov AppBar.cbSize, sizeof AppBar

invoke SHAppBarMessage, ABM_GETSTATE, addr AppBar ; ShellApi命令

and eax, ABS_AUTOHIDE

.if eax == TRUE

; 任务栏被隐藏

.else

; 任务栏未被隐藏

.endif

- 如何使用默认的浏览器或邮件程序?

.data

lpPage db "http://win32asm.cjb.net",0

lpMail db "ates@anet.net.tr",0

lpOperation db "open",0

.code

invoke ShellExecute,hWin,addr lpOperation, addr lpPage, NULL, NULL, SW_SHOWNORMAL

invoke ShellExecute,hWin,addr lpOperation, addr lpMail, NULL, NULL, SW_SHOWNORMAL

- 如何用Win32 API显示网络连接对话框?

include \MASM32\INCLUDE\mpr.inc

includelib \MASM32\LIB\mpr.lib

invoke WNetConnectionDialog,hWnd,RESOURCETYPE_DISK

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 0:50:32

如何用labelCloud实现高效3D点云标注?完整实战指南

如何用labelCloud实现高效3D点云标注?完整实战指南 【免费下载链接】labelCloud 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 面对海量3D点云数据,如何快速准确地标注出目标物体的3D边界框?labelCloud作为一款轻量级3D点…

作者头像 李华
网站建设 2026/10/6 6:39:49

成本对比分析:不同云平台运行Z-Image-Turbo的经济性评估

成本对比分析:不同云平台运行Z-Image-Turbo的经济性评估 为什么初创公司需要关注Z-Image-Turbo的运行成本 Z-Image-Turbo作为阿里通义实验室开源的6B参数图像生成模型,凭借仅需8步推理即可实现亚秒级生成的能力,正在成为AI绘图领域的新宠。对…

作者头像 李华
网站建设 2026/10/4 6:58:21

计算机毕设java大学生党员信息管理系统 基于Java的高校党员信息综合管理系统设计与实现 Java技术驱动的大学生党员信息管理平台开发

计算机毕设java大学生党员信息管理系统bt7s99 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,高校学生管理工作正逐步向信息化、智能化方向迈…

作者头像 李华
网站建设 2026/10/6 2:09:18

HTML lang属性对OCR多语言支持的影响探讨

HTML lang属性对OCR多语言支持的影响探讨 📖 项目简介:高精度通用 OCR 文字识别服务(CRNN版) 在现代信息处理系统中,光学字符识别(OCR) 技术已成为连接物理文档与数字世界的关键桥梁。尤其在多语…

作者头像 李华
网站建设 2026/10/6 6:35:47

跨学科研究:快速搭建阿里通义Z-Image-Turbo科学可视化环境

跨学科研究:快速搭建阿里通义Z-Image-Turbo科学可视化环境 作为一名经常需要处理复杂数据的科研人员,你是否曾为如何将枯燥的数字转化为直观的图像而头疼?阿里通义Z-Image-Turbo正是一款专为科学可视化设计的强大工具,它能帮助你将…

作者头像 李华
网站建设 2026/10/6 6:36:03

Flowframes视频插帧工具:从零开始完整安装配置指南

Flowframes视频插帧工具:从零开始完整安装配置指南 【免费下载链接】flowframes Flowframes Windows GUI for video interpolation using DAIN (NCNN) or RIFE (CUDA/NCNN) 项目地址: https://gitcode.com/gh_mirrors/fl/flowframes 想要将普通视频变成流畅丝…

作者头像 李华