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