Win32ASM经验点滴

原创 2001年08月31日 15:01:00
 

Win32ASM经验点滴#1
作者:'Ates(ates@anet.net.tr)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

 

调试点滴经验

CodeBlocks 遭遇:  Can't  open outFile  debug    permission denied      解决办法:   在任务管理器中 , 关闭 **.exe  进...
  • u012336460
  • u012336460
  • 2017年12月25日 14:15
  • 36

编程经验点滴积累

1. 估算解决问题所需要的时间。不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧,1小时、30分钟或甚至15分钟。如果在这期间你不能解决问题,那就去...
  • JUNTAM
  • JUNTAM
  • 2013年08月17日 00:16
  • 348

关于本博客:Delphi 的点滴经验

用 Delphi 很多年,平时有些经验,随便写写。之前没有发在 csdn。 现在发现 csdn 的博客,比较适合贴代码,版面比较干净,方便阅读。经常网上搜关于 Delphi 的技术问题时,搜...
  • pcplayer
  • pcplayer
  • 2017年04月06日 11:19
  • 170

jsp编程经验点滴

http://blog.sina.com.cn/s/blog_4ad7c2540100ag8e.html
  • finethere
  • finethere
  • 2014年07月12日 20:30
  • 189

QT学习点滴记录(二)

示例名称:QtCreator添加菜单图标 1. x
  • wtf19900910
  • wtf19900910
  • 2014年09月19日 10:53
  • 294

印制电路板设计点滴

印制电路板设计点滴 印刷导线宽度选择依据:    印刷导线的最小宽度与流过导线的电流大小有关:1: 线宽太小,刚印刷导线电阻大,线上的电压降也就大,影响电路的性能,   线宽太宽,则布线密度不高,板面...
  • Augusdi
  • Augusdi
  • 2013年12月28日 22:16
  • 800

记录学习的点滴(Spring注解学习过程中问题总结)

1,通过@PathVariable接收数据的乱码问题 设置服务器的编码可以解决,对于Tomcat,只需要修改conf/server.xml文件,添加URIEncoding="UTF-8"即可...
  • u012156769
  • u012156769
  • 2016年09月19日 16:08
  • 161

Win32Asm 教程(一)

前一章 目录 后一章 1.0-介绍汇编语言 汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的。很久以前,尚没 有任何高级语言,程序都是用汇编写的。汇编代码直接描述处理器可以执行的...
  • gemgin
  • gemgin
  • 2013年06月13日 14:32
  • 403

Win32Asm 教程(二)

前一章 目录 后一章 1.0-介绍汇编语言 汇编语言是创造出来代替原始的只能由处理器理解的二进制代码的。很久以前,尚没 有任何高级语言,程序都是用汇编写的。汇编代码直接描述处理器可以执行的...
  • gemgin
  • gemgin
  • 2013年06月13日 14:32
  • 463

Win32Asm教程(基础篇)

来源: http://www.dav1d.org  原作者:taowen  发布者:Sunlion [E.S.T] http://evilsun.126.com  一篇很不错的教程,本来是放在我...
  • s98
  • s98
  • 2013年05月06日 19:02
  • 726
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Win32ASM经验点滴
举报原因:
原因补充:

(最多只允许输入30个字)