全面讲解实现VB.NET全局热键

开发 后端
VB.NET是一门又方便、有快捷、又灵活的语言,文章就实现VB.NET全局热键案例做出详细的代码分析,希望对大家有帮助。

今天在玩游戏的时候突然有个想法,想想可以用VB.NET全局热键可以实现,现在就看看文章吧。想要一个热键功能~习惯了使用热键...我想想也是...于是就上网找了找VB全局热键的写法... 一看才知道VB.NET全局热键都很占资源大都用DO~LOOP来监视.不喜欢.于是在查阅一些关于GetWindowLong与HotKey的资料后半抄半写的情况下写了以下程序.全局键盘热键。

#T#有统计表明,很大一部分程序缺陷和内存的错误访问有关。正是因为指针直接和内存打交道,所以指针一直以来被看成一个危险的东西。以至于不少语言,如著名的 JAVA,都不提供对指针操作的支持,所有的内存访问方面的处理都由编译器来完成。而象C和C++,指针的使用则是基本功,指针给了程序员极大的自由去随心所欲地处理内存访问,很多非常巧妙的东西都要依靠指针技术来完成。

新建立一个FORM~

  1. Private Sub Form_Load()  
  2. Dim ret As Long  
  3. preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)  
  4. ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)  
  5. idHotKey = 1 
  6. Modifiers = MOD_ALT + MOD_CONTROL  
  7. uVirtKey = vbKeyA 
  8. ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)  
  9. End Sub  
  10.  
  11. Private Sub Form_Unload(Cancel As Integer)  
  12. Dim ret As Long  
  13. ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)  
  14. Call UnregisterHotKey(Me.hwnd, uVirtKey)  
  15.  
  16. End Sub  

新建立一个模块

  1. Option Explicit  
  2.  
  3. Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long  
  4. Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long  
  5. 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  
  6. Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long  
  7. Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As Long  
  8.  
  9. Public Const WM_HOTKEY = &H312  
  10. Public Const MOD_ALT = &H1  
  11. Public Const MOD_CONTROL = &H2  
  12. Public Const MOD_SHIFT = &H4  
  13. Public Const GWL_WNDPROC = (-4)  
  14.  
  15. Public preWinProc As Long  
  16. Public Modifiers As Long, uVirtKey As Long, idHotKey As Long  
  17.  
  18. Private Type taLong  
  19. ll As Long  
  20. End Type  
  21.  
  22. Private Type t2Int  
  23. lWord As Integer  
  24. hWord As Integer  
  25. End Type  
  26.  
  27. Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long  
  28. If Msg = WM_HOTKEY Then  
  29. If wParam = idHotKey Then  
  30. Dim lp As taLong, i2 As t2Int  
  31. lp.ll = lParam 
  32. LSet i2 = lp 
  33. If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then  
  34. msgbox "你按下了热键哦~"  
  35. End If  
  36. End If  
  37. End If  
  38. Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)  
  39. End Function   
责任编辑:田树 来源: 博客
相关推荐

2009-10-15 11:42:05

VB.Net赋值语句

2009-10-29 11:26:28

VB.NET调用Web

2010-01-13 10:46:42

VB.NET Dock

2009-10-27 12:20:06

VB.NET多线程应用

2009-10-28 17:44:31

VB.NET语言

2009-10-20 10:16:24

VB.NET COMB

2010-01-11 16:04:10

VB.NET使用wit

2009-10-28 10:04:53

VB.NET XmlW

2010-01-08 18:37:08

VB.NET显示图片

2009-10-23 15:35:42

VB.NET实用教程

2009-11-02 15:57:36

VB.NET WEB

2009-11-02 14:48:45

VB.NET HOOK

2009-11-10 16:46:52

VB.NET指针应用

2009-10-23 13:10:14

VB.NET List

2009-10-12 13:54:22

VB.NET Data

2009-10-14 15:20:21

VB.NET窗体指针

2009-10-15 10:57:16

VB.NET Text

2009-11-04 10:54:53

VB.NET MOVE

2009-10-29 15:16:02

VB.NET文件传送

2009-10-14 17:21:47

VB.NET定制Win
点赞
收藏

51CTO技术栈公众号