全面講解實(shí)現(xiàn)VB.NET全局熱鍵
今天在玩游戲的時(shí)候突然有個(gè)想法,想想可以用VB.NET全局熱鍵可以實(shí)現(xiàn),現(xiàn)在就看看文章吧。想要一個(gè)熱鍵功能~習(xí)慣了使用熱鍵...我想想也是...于是就上網(wǎng)找了找VB全局熱鍵的寫法... 一看才知道VB.NET全局熱鍵都很占資源大都用DO~LOOP來監(jiān)視.不喜歡.于是在查閱一些關(guān)于GetWindowLong與HotKey的資料后半抄半寫的情況下寫了以下程序.全局鍵盤熱鍵。
#T#有統(tǒng)計(jì)表明,很大一部分程序缺陷和內(nèi)存的錯(cuò)誤訪問有關(guān)。正是因?yàn)橹羔樦苯雍蛢?nèi)存打交道,所以指針一直以來被看成一個(gè)危險(xiǎn)的東西。以至于不少語言,如著名的 JAVA,都不提供對(duì)指針操作的支持,所有的內(nèi)存訪問方面的處理都由編譯器來完成。而象C和C++,指針的使用則是基本功,指針給了程序員極大的自由去隨心所欲地處理內(nèi)存訪問,很多非常巧妙的東西都要依靠指針技術(shù)來完成。
新建立一個(gè)FORM~
- Private Sub Form_Load()
- Dim ret As Long
- preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
- ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)
- idHotKey = 1
- Modifiers = MOD_ALT + MOD_CONTROL
- uVirtKey = vbKeyA
- ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
- End Sub
- Private Sub Form_Unload(Cancel As Integer)
- Dim ret As Long
- ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
- Call UnregisterHotKey(Me.hwnd, uVirtKey)
- End Sub
新建立一個(gè)模塊
- Option Explicit
- Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
- Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
- Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
- Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As Long
- Public Const WM_HOTKEY = &H312
- Public Const MOD_ALT = &H1
- Public Const MOD_CONTROL = &H2
- Public Const MOD_SHIFT = &H4
- Public Const GWL_WNDPROC = (-4)
- Public preWinProc As Long
- Public Modifiers As Long, uVirtKey As Long, idHotKey As Long
- Private Type taLong
- ll As Long
- End Type
- Private Type t2Int
- lWord As Integer
- hWord As Integer
- End Type
- Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- If Msg = WM_HOTKEY Then
- If wParam = idHotKey Then
- Dim lp As taLong, i2 As t2Int
- lp.ll = lParam
- LSet i2 = lp
- If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then
- msgbox "你按下了熱鍵哦~"
- End If
- End If
- End If
- Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
- End Function