![]() |
#2
阿贝2009-10-23 23:16
|

;功能:按f10置顶 f11隐藏界面
;by onepc 153785587
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;include macro.asm ;这个是CTXT("") 宏
IDR_MAINFRAME equ 128
IDD_TOP_DIALOG equ 102
IDC_ETIME equ 100
ID_F10 equ 10
ID_F11 equ 11
.data
.data?
hInstance dd ?
hMain dd ?
hTop dd ?
dwCheck dd ?
dwYesNo dd ?
stMsg MSG <>
.code
DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG
push hDlg
pop hMain
;;;;;;;;;;;;;;;;;;;;;
invoke LoadIcon,hInstance,IDR_MAINFRAME
invoke SendMessage,hDlg,WM_SETICON,ICON_BIG,eax
;;;;;;;;;;;;;;;;;;;;
invoke RegisterHotKey,hDlg,ID_F10,NULL,VK_F10 ;注册热键
invoke RegisterHotKey,hDlg,ID_F11,NULL,VK_F11
;变非模态
;invoke GetWindowLong,hDlg,GWL_STYLE
;or eax,WS_THICKFRAME
;invoke SetWindowLong,hDlg,GWL_STYLE,eax
;invoke ShowWindow,hDlg,SW_HIDE
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDOK
;invoke EndDialog,hDlg,TRUE
.endif
.elseif uMsg==WM_HOTKEY ;热键消息
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.if wParam==ID_F10 ;置顶窗口
invoke GetForegroundWindow
mov hTop,eax
invoke GetWindowLong,hTop,GWL_EXSTYLE
mov dwCheck,eax ;getwindowlong返回的窗口风格 传给 dwcheck
mov dwYesNo,eax
or dwCheck,WS_EX_TOPMOST ;若是本身是置顶的则or了之后是相等的,若是不是置顶的则不相等,即or了之后会大
mov eax,dwCheck
.if eax>dwYesNo
invoke SetWindowPos,hTop,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.else
invoke SetWindowPos,hTop,HWND_NOTOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.endif
.endif
.if wParam==ID_F11
invoke IsWindowVisible,hDlg
.if eax
invoke ShowWindow,hDlg,SW_HIDE
.else
invoke ShowWindow,hDlg,SW_NORMAL
.endif
.endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.elseif uMsg==WM_CLOSE
invoke UnregisterHotKey,hDlg,ID_F10 ;注消热键
invoke UnregisterHotKey,hDlg,ID_F11
;invoke MessageBox,NULL,CTXT("a"),CTXT("a"),0
;invoke EndDialog,hDlg,FALSE ;模态
invoke DestroyWindow,hDlg ;非模态
invoke PostQuitMessage,NULL;非模态
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
;invoke DialogBoxParam,hInstance,IDD_TOP_DIALOG,NULL,addr DlgProc,NULL ;模态
invoke CreateDialogParam,hInstance,IDD_TOP_DIALOG,NULL,addr DlgProc,NULL ;非模态
;;;;消息循环
.while TRUE
invoke GetMessage,addr stMsg,NULL,0,0
.break .if eax==0
invoke TranslateMessage,addr stMsg
invoke DispatchMessage,addr stMsg
.endw
invoke ExitProcess,NULL
end start
;by onepc 153785587
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;include macro.asm ;这个是CTXT("") 宏
IDR_MAINFRAME equ 128
IDD_TOP_DIALOG equ 102
IDC_ETIME equ 100
ID_F10 equ 10
ID_F11 equ 11
.data
.data?
hInstance dd ?
hMain dd ?
hTop dd ?
dwCheck dd ?
dwYesNo dd ?
stMsg MSG <>
.code
DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG
push hDlg
pop hMain
;;;;;;;;;;;;;;;;;;;;;
invoke LoadIcon,hInstance,IDR_MAINFRAME
invoke SendMessage,hDlg,WM_SETICON,ICON_BIG,eax
;;;;;;;;;;;;;;;;;;;;
invoke RegisterHotKey,hDlg,ID_F10,NULL,VK_F10 ;注册热键
invoke RegisterHotKey,hDlg,ID_F11,NULL,VK_F11
;变非模态
;invoke GetWindowLong,hDlg,GWL_STYLE
;or eax,WS_THICKFRAME
;invoke SetWindowLong,hDlg,GWL_STYLE,eax
;invoke ShowWindow,hDlg,SW_HIDE
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDOK
;invoke EndDialog,hDlg,TRUE
.endif
.elseif uMsg==WM_HOTKEY ;热键消息
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.if wParam==ID_F10 ;置顶窗口
invoke GetForegroundWindow
mov hTop,eax
invoke GetWindowLong,hTop,GWL_EXSTYLE
mov dwCheck,eax ;getwindowlong返回的窗口风格 传给 dwcheck
mov dwYesNo,eax
or dwCheck,WS_EX_TOPMOST ;若是本身是置顶的则or了之后是相等的,若是不是置顶的则不相等,即or了之后会大
mov eax,dwCheck
.if eax>dwYesNo
invoke SetWindowPos,hTop,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.else
invoke SetWindowPos,hTop,HWND_NOTOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.endif
.endif
.if wParam==ID_F11
invoke IsWindowVisible,hDlg
.if eax
invoke ShowWindow,hDlg,SW_HIDE
.else
invoke ShowWindow,hDlg,SW_NORMAL
.endif
.endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.elseif uMsg==WM_CLOSE
invoke UnregisterHotKey,hDlg,ID_F10 ;注消热键
invoke UnregisterHotKey,hDlg,ID_F11
;invoke MessageBox,NULL,CTXT("a"),CTXT("a"),0
;invoke EndDialog,hDlg,FALSE ;模态
invoke DestroyWindow,hDlg ;非模态
invoke PostQuitMessage,NULL;非模态
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
;invoke DialogBoxParam,hInstance,IDD_TOP_DIALOG,NULL,addr DlgProc,NULL ;模态
invoke CreateDialogParam,hInstance,IDD_TOP_DIALOG,NULL,addr DlgProc,NULL ;非模态
;;;;消息循环
.while TRUE
invoke GetMessage,addr stMsg,NULL,0,0
.break .if eax==0
invoke TranslateMessage,addr stMsg
invoke DispatchMessage,addr stMsg
.endw
invoke ExitProcess,NULL
end start