CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

100分求助:VB.NET中如何注册系统热键?

楼主fbzerg1()2006-06-03 12:16:59 在 .NET技术 / VB.NET 提问

VB.NET中如何注册系统级热键呢?需要代码。忘高手指点。 问题点数:100、回复次数:7Top

1 楼stone_soup(夜不打拾)回复于 2006-06-03 12:44:38 得分 0

http://www.codeproject.com/csharp/globalhook.asp  
  我正在用這個..  
  Top

2 楼kssys()回复于 2006-06-03 12:56:33 得分 0

楼主参看:http://www.manbu.net/Lib/Class2/Sub9/7/6.aspTop

3 楼caoqinghua(生活就是互相折磨着)回复于 2006-06-03 18:22:36 得分 0

一个vb6的例子。希望对你有用  
   
  (1)启动VB6,建立一个标准exe工程,添加一个窗体CHINAHIDE,添加四个Command控件hideOK对应“开始隐藏”、unhide对应“恢复一个”、uNhideall对应“全部恢复”;添加listbox控件list1(用来纪录句柄);两个标签控件用来显示有关提示信息。调整上述控件到适当位置和合适大小,双击窗体,写入以下代码:    
   
  Dim   LasthWnd   As   Integer   注释:被隐藏项目句柄  
   
  Private   Sub   Form_Load()  
   注释:程序启动时注册功能热键F12  
   preWinProc   =   GetWindowLong(Me.hwnd,   GWL_WNDPROC)  
   SetWindowLong   Me.hwnd,   GWL_WNDPROC,   AddressOf   Wndproc  
   uVirtKey   =   vbKeyF12  
   RegisterHotKey   Me.hwnd,   1,   Modifiers,   uVirtKey  
  End   Sub  
   
  Private   Sub   uNhideall_Click()  
   注释:恢复所有被隐藏项目  
   For   res   =   0   To   List1.ListCount   -   1  
    LasthWnd   =   List1.List(res)  
    ShowWindow   LasthWnd,   SW_SHOW  
   Next   res  
   List1.Clear  
   注释:清空句柄列表框  
  End   Sub  
   
  Public   Sub   hideOK_Click()  
   注释:当"开始隐藏"按钮被点击时,将窗口最小化  
   Me.WindowState   =   1  
  End   Sub  
   
  Private   Sub   UNHIDE_Click()  
   注释:恢复一个选定的被隐藏项目  
   If   List1.ListIndex   <   0   Then  
    MsgBox   "请首先选择一个被恢复的隐藏项目!",   vbExclamation  
    Exit   Sub  
   End   If注释:验证句柄列表栏目是否已经被选中  
   hideINDEX   =   List1.ListIndex  
   LasthWnd   =   List1.List(hideINDEX)  
   X   =   ShowWindow(LasthWnd,   SW_SHOW)  
   注释:恢复选定的被隐藏项目  
   List1.RemoveItem   (hideINDEX)  
   注释:移除该项目有关信息  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
   注释:当程序被关闭时,取消已经注册的热键  
   SetWindowLong   Me.hwnd,   GWL_WNDPROC,   preWinProc  
   UnregisterHotKey   Me.hwnd,   uVirtKey  
   注释:取消系统级热键,释放资源  
   End注释:终止程序运行  
  End   Sub  
   注释:主窗体代码结束  
   
   
    (2)添加一个标准模块,命名为MOULDLE1,写入以下代码:  
   
  Public   Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
  注释:在窗口结构中为指定的窗口设置信息  
   
  Public   Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
  注释:从指定窗口的结构中取得信息  
   
  Public   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  
  注释:运行指定的进程  
   
  Public   Declare   Function   RegisterHotKey   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   ID   As   Long,   ByVal   fsModifiers   As   Long,   ByVal   vk   As   Long)   As   Long  
  注释:向系统注册一个指定的热键  
   
  Public   Declare   Function   UnregisterHotKey   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   ID   As   Long)   As   Long  
  注释:取消热键并释放占用的资源  
  注释:上述五个API函数是注册系统级热键所必需的,具体实现过程如后文所示  
   
  Public   Declare   Function   ShowWindow   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   nCmdShow   As   Long)   As   Long  
  注释:本函数是实现隐藏的核心,参数HWND既是需要隐藏项目的句柄  
  注释:nCmdShow参数可以决定使隐藏还是显示  
   
  Public   Declare   Function   GetCursorPos   Lib   "user32"   (lpPoint   As   POINTAPI)   As   Long  
  注释:本函数得到当前鼠标所在位置的屏幕坐标  
   
  Public   Declare   Function   WindowFromPointXY   Lib   "user32"   Alias   "WindowFromPoint"   (ByVal   xPoint   As   Long,   ByVal   yPoint   As   Long)   As   Long  
  注释:本函数根据屏幕坐标返回被隐藏项目的句柄  
   
  Public   Type   POINTAPI  
   X   As   Long  
   Y   As   Long  
  End   Type注释:鼠标坐标类型定义  
   
  Public   Const   SW_HIDE   =   0 注释:隐藏常数  
  Public   Const   SW_SHOW   =   5 注释:显示常数  
   
  Public   Const   WM_HOTKEY   =   &H312  
   注释:热键标志常数,用来判断当键盘按键被按下时是否命中了我们设定的热键  
  Public   Const   GWL_WNDPROC   =   (-4)  
   
  Public   preWinProc   As   Long,   MyhWnd   As   Long,uVirtKey   As   Long  
   注释:定义系统的热键,原中断标示,被隐藏的项目句柄  
   注释:请紧记下面的热键拦截函数,它将对你将来编写WINDOWS32高级控制程序大有帮助!  
  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   =   1   Then  
     注释:如果是我们的定义的热键F12...  
     注释:为了节省篇幅,我对热键拦截处理不是非常严密...  
     hideDONE  
     注释:执行隐藏鼠标所指项目  
    End   If  
   End   If  
    注释:如果不是热键,或者不是我们设置的热键,交还控制权给  
    注释:系统,继续监测热键  
   Wndproc   =   CallWindowProc(preWinProc,   hwnd,   Msg,   wParam,   lParam)  
  End   Function  
   
  Public   Sub   hideDONE()注释:最关键的项目隐藏过程  
  Public   Sub   hideDONE()  
  Dim   pt32   As   POINTAPI  
  GetCursorPos   pt32   注释:注释:得到鼠标屏幕坐标  
  MyhWnd   =   WindowFromPointXY(pt32.X,   pt32.Y)  
  注释:注释:得到所在位置窗体项目句柄  
  If   MyhWnd   =   Chinahide.hwnd   Then   Exit   Sub  
   注释:拒绝隐藏程序自身  
   Chinahide.List1.AddItem   (MyhWnd)  
   注释:注释:添加相关信息  
   ShowWindow   MyhWnd,   SW_HIDE  
   注释:执行隐藏功能  
  End   Sub  
  ‘模块结束    
     
    本文代码它适用于windows95/98/nt4/me/2000,vb5/6开发平台。Top

4 楼copico(北北)回复于 2006-06-03 19:21:34 得分 0

全局钩子.  
  截获键盘消息Top

5 楼liujiayu10(活着就好)回复于 2006-06-04 09:54:35 得分 0

顶上去!Top

6 楼fbzerg1()回复于 2006-06-04 19:50:57 得分 0

我要的是VB.NET的代码~  
  VB6下很多类我不知道在.NET下是什么了~~Top

7 楼sx_lxh(路漫漫)回复于 2006-06-04 21:27:35 得分 0

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=45159Top

相关问题

关键词

得分解答快速导航

  • 帖主:fbzerg1

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo