?? 注冊系統熱鍵.txt
字號:
注冊系統熱鍵
相關的例子:下載>>> 作者:MaxMax 于2008-3-16上傳
--------------------------------------------------------------------------------
By MaxMax
在我們常用的QQ中,有一個系統熱鍵,就是當有人和你說話時,使用 Ctrl+Alt+Z即可彈出對話框。
要實現這個功能主要使用2個API函數:RegisterHotKey 和 UnregisterHotKey。
前者的原型是:
RegisterHotKey Function
功能:定義系統熱鍵
BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);
Parameters
hWnd
[輸入]制定接收WM_HOTKEY消息的窗口。
id
[輸入]定義熱鍵的標識,不能與其他的標識相同哦~ 定義很多熱鍵的情況下,我們就可以區分到底按下的是哪個熱鍵。應用程序可以使用的范圍從0x0000 到0xBFFF. DLL定義范圍從 0xC000 到h 0xFFFF 。為了避免共享DLL的熱鍵沖突,DLL中應該使用 GlobalAddAtom 函數來指定熱鍵。
fsModifiers
[輸入]指定同uVirtKey一起按下的鍵。 fsModifiers 可以是下面這些值的組合:
MOD_ALT
ALT鍵被按下
MOD_CONTROL
CTRL鍵被按下
MOD_SHIFT
SHIFT鍵被按下
MOD_WIN
WINDOWS 鍵被按下. 鍵盤上這個鍵是有一個Windows logo的
vk
[輸入]指定熱鍵的虛擬鍵碼
它將會在系統中注冊一個你定義的控件,觸發后會向你的程序發送 WM_HOTKEY 消息。
UnregisterHotKey Function
功能:取消定義的熱鍵
BOOL UnregisterHotKey(
HWND hWnd,
int id
);
這個看起來就簡單多了,不做過多的描述。
下面是一個簡單的例子,定義了一個 Ctrl+Shift+A 的熱鍵,當按下后,會將程序變為前臺程序。
;MASMPlus 代碼模板 - 普通的 Windows 程序代碼
.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
idMyHotKey equ 2008 ;隨便給一個就好了
.DATA
szClassName db "MASMPlus_Class",0
.DATA?
hInstance dd ?
.CODE
START:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
invoke ExitProcess,0
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
local hWnd :HWND
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,offset szClassName
invoke LoadIcon,hInst,100
mov wc.hIcon,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
mov wc.hIconSm,0
invoke RegisterClassEx, ADDR wc
invoke CreateWindowEx,NULL,ADDR szClassName,CTXT("http://www.aogosoft.com"),WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hInst,NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
.if uMsg==WM_CREATE
invoke RegisterHotKey,hWin,idMyHotKey,MOD_CONTROL or MOD_SHIFT,'A' ;定義熱鍵
.elseif uMsg == WM_HOTKEY ;處理熱鍵消息
invoke SetForegroundWindow,hWin
invoke SetFocus,hWin
.elseif uMsg == WM_DESTROY
invoke UnregisterHotKey,hWin,idMyHotKey ;取消定義的熱鍵
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
.endif
ret
WndProc endp
END START
參考:
1.http://msdn2.microsoft.com/en-us/library/ms646309.aspx
--------------------------------------------------------------------------------
歡迎訪問AoGo匯編小站:http://www.aogosoft.com/ 下一篇>>>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -