| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / ASM/ASM32 / Win32汇编编程 /
 

[资料 from asm.yeah.net] Win32ASM一些问答集锦

来源(Iczelion 的 Win32asm 教程)

[资料 from asm.yeah.net] Win32ASM一些问答集锦

Win32汇编编程

作者:Orochi翻译·发布日期:2000-12-27·阅读次数:19276


作者:'Ates(ates@anet.net.tr)

--------------------------------------------------------------------------------
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


--------------------------------------------------------------------------------

Designed By Atilla Yurtseven

Chinese Translation By Orochi,2000.12.16

Link: http://www.asm32.net/article_details.aspx?id=2623


浏览次数 308 发布时间 2007/2/22 23:52:28 从属分类 Win32汇编编程 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1