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
.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
.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 允许
.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
INCLUDE \MASM32\INCLUDE\MPR.INC INCLUDELIB \MASM32\LIB\MPR.LIB INVOKE WNETCONNECTIONDIALOG,HWND,RESOURCETYPE_DISK