CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

如何屏障WINDOWS的所有热键?

楼主letian_now(乐天)2006-03-18 16:09:52 在 VB / 基础类 提问

比如:CTRL+ALT+DEL、WIN键、SHIFT+TAB、SHIFT+ESC、ALT+ESC、ALT+TAB、CTRL+ESC等等 问题点数:20、回复次数:11Top

1 楼vansoft(Vansoft Workroom)回复于 2006-03-18 18:35:08 得分 1

最简单的方法是创建一个桌面就行了。  
   
  其次是用键盘的HOOK。Top

2 楼letian_now(乐天)回复于 2006-03-18 18:46:11 得分 0

怎么创建桌面呢?  
  Top

3 楼letian_now(乐天)回复于 2006-03-18 18:48:16 得分 0

键盘的HOOK具体怎么用啊?Top

4 楼luosidao(螺丝刀)回复于 2006-03-18 20:31:41 得分 1

markTop

5 楼BookSirSwordsMan(书生剑客)回复于 2006-03-19 09:29:16 得分 1

LZ怎么和我碰到的问题一样呀,呵呵,关注中……Top

6 楼letian_now(乐天)回复于 2006-03-21 13:38:49 得分 0

顶哈Top

7 楼of123()回复于 2006-03-21 13:48:08 得分 1

利用键盘钩子在Windows平台下捕获键盘动作  
   
  信息产业部电子第二十二研究所青岛分所   郎锐      
  01-5-24   下午   02:50:39  
   
  --------------------------------------------------------------------------------  
     
   
  一、引言    
  我们可以在应用程序中毫不费力的捕获在本程序窗口上所进行的键盘操作,但如果我们想要将此程序作成一个监控程序,捕获在Windows平台下任意窗口上的键盘操作,就需要借助于全局钩子来实现了。    
  二、系统钩子和DLL    
  钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。    
  在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全局钩子函数必须以DLL(动态连接库)为载体进行封装,VC6中有三种形式的MFC   DLL可供选择,即Regular   statically   linked   to   MFC   DLL(标准静态链接MFC   DLL)、Regular   using   the   shared   MFC   DLL(标准动态链接MFC   DLL)以及Extension   MFC   DLL(扩展MFC   DLL)。   在本程序中为方便起见采用了标准静态连接MFC   DLL。    
  三、键盘钩子程序示例    
  本示例程序用到全局钩子函数,程序分两部分:可执行程序KeyHook和动态连接库LaunchDLL。    
  1、首先编制MFC扩展动态连接库LaunchDLL.dll:    
  (1)选择MFC   AppWizard(DLL)创建项目LaunchDLL;在接下来的选项中选择Regular   statically   linked   to   MFC   DLL(标准静态链接MFC   DLL)。    
  (2)在LaunchDLL.h中添加宏定义和待导出函数的声明:      
  #define   DllExport   __declspec(dllexport)    
  ……    
  DllExport   void   WINAPI   InstallLaunchEv();    
  ……    
  class   CLaunchDLLApp   :   public   CWinApp    
  {    
  public:    
  CLaunchDLLApp();    
        
  //{{AFX_VIRTUAL(CLaunchDLLApp)    
  //}}AFX_VIRTUAL    
        
  //{{AFX_MSG(CLaunchDLLApp)    
  //   NOTE   -   the   ClassWizard   will   add   and   remove   member   functions   here.    
  //   DO   NOT   EDIT   what   you   see   in   these   blocks   of   generated   code   !    
  //}}AFX_MSG    
  DECLARE_MESSAGE_MAP()    
  };    
  (3)在LaunchDLL.cpp中添加全局变量Hook和全局函数LauncherHook、SaveLog:    
  HHOOK   Hook;    
  LRESULT   CALLBACK   LauncherHook(int   nCode,WPARAM   wParam,LPARAM   lParam);    
  void   SaveLog(char*   c);    
  (4)完成以上提到的这几个函数的实现部分:    
  ……    
  CLaunchDLLApp   theApp;    
  ……    
  DllExport   void   WINAPI   InstallLaunchEv()    
  {    
  Hook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,    
  (HOOKPROC)LauncherHook,    
  theApp.m_hInstance,    
  0);    
  }    
  在此我们实现了Windows的系统钩子的安装,首先要调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,其原型是:    
   
  HHOOK   SetWindowsHookEx(int   idHook,    
  HOOKPROC   lpfn,    
  HINSTANCE   hMod,    
  DWORD   dwThreadId);    
   
  其中,第一个参数指定钩子的类型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,在此我们只关心键盘操作所以设定为WH_KEYBOARD;  
  第二个参数标识钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数,即当不管系统的哪个窗口有键盘输入马上会引起LauncherHook的动作;  
  第三个参数是钩子函数所在模块的句柄,我们可以很简单的设定其为本应用程序的实例句柄;  
  最后一个参数是钩子相关函数的ID用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息,在本程序中钩子需要为全局钩子,故设定为0。    
  ……    
  LRESULT   CALLBACK   LauncherHook(int   nCode,WPARAM   wParam,LPARAM   lParam)    
  {    
  LRESULT   Result=CallNextHookEx(Hook,nCode,wParam,lParam);    
  if(nCode==HC_ACTION)    
  {    
  if(lParam   &   0x80000000)    
  {    
  char   c[1];    
  c[0]=wParam;    
  SaveLog(c);    
  }    
  }    
  return   Result;    
  }    
  虽然调用CallNextHookEx()是可选的,但调用此函数的习惯是很值得推荐的;否则的话,其他安装了钩子的应用程序将不会接收到钩子的通知而且还有可能产生不正确的结果,所以我们应尽量调用该函数除非绝对需要阻止其他程序获取通知。    
  ……    
  void   SaveLog(char*   c)    
  {    
  CTime   tm=CTime::GetCurrentTime();    
  CString   name;    
  name.Format("c:\\Key_%d_%d.log",tm.GetMonth(),tm.GetDay());    
  CFile   file;    
  if(!file.Open(name,CFile::modeReadWrite))    
  {    
  file.Open(name,CFile::modeCreate|CFile::modeReadWrite);    
  }    
  file.SeekToEnd();    
  file.Write(c,1);    
  file.Close();    
  }    
  当有键弹起的时候就通过此函数将刚弹起的键保存到记录文件中从而实现对键盘进行监控记录的目的。    
  编译完成便可得到运行时所需的键盘钩子的动态连接库LaunchDLL.dll和进行静态链接时用到的LaunchDLL.lib。    
  2、下面开始编写调用此动态连接库的主程序,并实现最后的集成:    
  (1)用MFC的AppWizard(EXE)创建项目KeyHook;    
  (2)选择单文档,其余几步可均为确省;      
  (3)把LaunchDLL.h和LaunchDLL.lib复制到KeyHook工程目录中,LaunchDLL.dll复制到Debug目录下。    
  (4)链接DLL库,即在"Project","Settings…"的"Link"属性页内,在"Object/librarymodules:"中填入"LaunchDLL.lib"。再通过"Project","Add   To   Project","Files…"将LaunchDLL.h添加到工程中来,最后在视类的源文件KeyHook.cpp中加入对其的引用:    
  #include   "LaunchDLL.h"    
  这样我们就可以象使用本工程内的   函数一样使用动态连接库LaunchDLL.dll中的所有导出函数了。    
  (5)在视类中添加虚函数OnInitialUpdate(),并添加代码完成对键盘钩子的安装:    
  ……    
  InstallLaunchEv();    
  ……    
  (6)到此为止其实已经完成了所有的功能,但作为一个后台监控软件,运行时并不希望有界面,可以在应用程序类CkeyHookApp的InitInstance()函数中将m_pMainWnd->ShowWindow(SW_SHOW);改为m_pMainWnd->ShowWindow(SW_HIDE);即可。    
  四、运行与检测    
  编译运行程序,运行起来之后并无什么现象,但通过Alt+Ctrl+Del在关闭程序对话框内可以找到我们刚编写完毕的程序"KeyHook",随便在什么程序中通过键盘输入字符,然后打开记录文件,我们会发现:通过键盘钩子,我们刚才输入的字符都被记录到记录文件中了。    
  小结:系统钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows系统消息进行拦截、监视、处理。这种技术广泛应用于各种自动监控系统中。    
   
  -----------------------------------------------------------------------  
  全局的底层键盘钩子,实现屏蔽一对win键,一对ctrl键,一对shift键,一对alt键。  
   
  下面是.dll的源代码,是用VC做的。  
   
  //.cpp  
   
  #include   "windows.h"  
   
  #define   WH_KEYBOARD_LL           13  
   
  typedef   struct   tagKBDLLHOOKSTRUCT   {  
          DWORD       vkCode;  
          DWORD       scanCode;  
          DWORD       flags;  
          DWORD       time;  
          DWORD       dwExtraInfo;  
  }   KBDLLHOOKSTRUCT,   FAR   *LPKBDLLHOOKSTRUCT,   *PKBDLLHOOKSTRUCT;  
   
  HHOOK   hHook   =   NULL;  
  HINSTANCE   hInstance   =   NULL;  
   
  Top

8 楼of123()回复于 2006-03-21 13:48:20 得分 1

void   WINAPI   StartHook();  
  void   WINAPI   StopHook();  
  LRESULT   CALLBACK   LowLevelKeyboardProc(int   nCode,   WPARAM   wParam,   LPARAM   lParam);  
   
  BOOL   APIENTRY   DllMain(HANDLE   hModule,   DWORD     ul_reason_for_call,   LPVOID   lpReserved)  
  {  
  hInstance   =   (HINSTANCE)hModule;  
          return   TRUE;  
  }  
   
  LRESULT   CALLBACK   LowLevelKeyboardProc(int   nCode,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  if   (nCode   >=   0)  
  {  
  KBDLLHOOKSTRUCT*   kb   =   (KBDLLHOOKSTRUCT*)lParam;  
  bool   exp   =   kb->vkCode   ==   91   ||   kb->vkCode   ==   92   ||   kb->vkCode   >=   160   &&   kb->vkCode   <=   165;  
  if   (exp)   return   TRUE;  
  }  
  return   CallNextHookEx(hHook,   nCode,   wParam,   lParam);  
  }  
   
  void   WINAPI   StartHook()  
  {  
  hHook   =   SetWindowsHookEx(WH_KEYBOARD_LL,   LowLevelKeyboardProc,   hInstance,   0);  
   
  }  
   
  void   WINAPI   StopHook()  
  {  
  UnhookWindowsHookEx(hHook);  
  }  
   
  //.def  
   
  EXPORTS  
  StartHook @1  
  StopHook @2  
   
   
  编译后与VB的工程文件放在同一目录中。  
  下面是VB的调用部分,非常简单,像用普通的API一样。  
   
  '   加两个CommandButton。  
  Option   Explicit  
  Private   Declare   Sub   StartHook   Lib   "MaskKey.dll"   ()  
  Private   Declare   Sub   StopHook   Lib   "MaskKey.dll"   ()  
   
  Private   Sub   Command1_Click()  
          StartHook  
  End   Sub  
   
  Private   Sub   Command2_Click()  
          StopHook  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          StopHook  
  End   Sub  
   
  --------------------------------------------------------------------  
  Win2K/NT/XP环境下  
  add   a   checkbox   named   chkDisable.caption="&Disable   ALT-TAB,   ALT-ESC,   CTRL-ESC,LWin,RWin,Win+Any"  
  to   a   new   from   named   frmMain.frm   in   new   project   hook_kb_LL.vbp  
  add   code   below:  
   
  Option   Explicit  
   
  Dim   hhkLowLevelKybd   As   Long  
   
  Private   Sub   chkDisable_Click()  
  If   chkDisable   =   vbChecked   Then  
          hhkLowLevelKybd   =   SetWindowsHookEx(WH_KEYBOARD_LL,   AddressOf   LowLevelKeyboardProc,   App.hInstance,   0)  
  Else  
          UnhookWindowsHookEx   hhkLowLevelKybd  
          hhkLowLevelKybd   =   0  
  End   If  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
  If   hhkLowLevelKybd   <>   0   Then   UnhookWindowsHookEx   hhkLowLevelKybd  
  End   Sub  
   
  in   new   module   named   modDisableLowLevelKeys.bas  
  code   below:  
  Option   Explicit  
   
  Public   Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   (Destination   As   Any,   Source   As   Any,   ByVal   Length   As   Long)  
   
  Public   Declare   Function   GetKeyState   Lib   "user32"   (ByVal   nVirtKey   As   Long)   As   Integer  
   
  Public   Declare   Function   SetWindowsHookEx   Lib   "user32"   Alias   "SetWindowsHookExA"   (ByVal   idHook   As   Long,   ByVal   lpfn   As   Long,   ByVal   hmod   As   Long,   ByVal   dwThreadId   As   Long)   As   Long  
   
  Public   Declare   Function   CallNextHookEx   Lib   "user32"   (ByVal   hHook   As   Long,   ByVal   nCode   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long  
  Public   Declare   Function   UnhookWindowsHookEx   Lib   "user32"   (ByVal   hHook   As   Long)   As   Long  
   
  Public   Const   HC_ACTION   =   0  
  Public   Const   WM_KEYDOWN   =   &H100  
  Public   Const   WM_KEYUP   =   &H101  
  Public   Const   WM_SYSKEYDOWN   =   &H104  
  Public   Const   WM_SYSKEYUP   =   &H105  
  Public   Const   VK_TAB   =   &H9  
  Public   Const   VK_CONTROL   =   &H11  
  Public   Const   VK_ESCAPE   =   &H1B  
   
  Public   Const   WH_KEYBOARD_LL   =   13  
  Public   Const   LLKHF_ALTDOWN   =   &H20  
   
  Public   Type   KBDLLHOOKSTRUCT  
          vkCode   As   Long  
          scanCode   As   Long  
          flags   As   Long  
          time   As   Long  
          dwExtraInfo   As   Long  
  End   Type  
   
  Dim   p   As   KBDLLHOOKSTRUCT  
   
  Public   Function   LowLevelKeyboardProc(ByVal   nCode   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
        Dim   fEatKeystroke   As   Boolean  
         
        If   (nCode   =   HC_ACTION)   Then  
              If   wParam   =   WM_KEYDOWN   Or   wParam   =   WM_SYSKEYDOWN   Or   wParam   =   WM_KEYUP   Or   wParam   =   WM_SYSKEYUP   Then  
                    CopyMemory   p,   ByVal   lParam,   Len(p)  
                    fEatKeystroke   =   _  
                          ((p.vkCode   =   VK_TAB)   And   ((p.flags   And   LLKHF_ALTDOWN)   <>   0))   Or   _  
                          ((p.vkCode   =   VK_ESCAPE)   And   ((p.flags   And   LLKHF_ALTDOWN)   <>   0))   Or   _  
                          ((p.vkCode   =   VK_ESCAPE)   And   ((GetKeyState(VK_CONTROL)   And   &H8000)   <>   0))   Or   _  
                          ((p.vkCode   =   91)   Or   (p.vkCode   =   92)   Or   (p.vkCode   =   93))   '左右Win   和徽标键  
                End   If  
          End   If  
           
          If   fEatKeystroke   Then  
                  LowLevelKeyboardProc   =   -1  
          Else  
                  LowLevelKeyboardProc   =   CallNextHookEx(0,   nCode,   wParam,   ByVal   lParam)  
          End   If  
  End   Function  
  Top

9 楼letian_now(乐天)回复于 2006-03-21 13:53:44 得分 0

谢谢拉.  
   
  不过,我不会vc++,你有哪个dll吗?Top

10 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-21 14:28:19 得分 15

《〈〈〈〈〈〈〈〈〈〈〈〈〈〈我认为下面的文章对你有帮助》》》》》》》》》》》》》》》》》》  
  HOOKS   说明书  
   
     
   
  hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。  
   
  下面将介绍WINNDOWS   HOOKS并且说明如何在WINDOWS   程序中使用它。  
   
     
   
  关于HOOKS  
   
  使用HOOK   将会降低系统效率,因为它增加了系统处量消息的工作量。建议在必要时才使用HOOK,并在消息处理完成后立即移去该HOOK。  
   
  HOOK链  
   
  WINDOWS提供了几种不同类型的HOOKS;不同的HOOK可以处理不同的消息。例如,WH_MOUSE   HOOK用来监视鼠标消息。  
   
  WINDOWS为这几种HOOKS维护着各自的HOOK链。HOOK链是一个由应用程序定义的回调函数队列,当某种类型的消息发生时,WINDOWS向此种类型的HOOK链的第一个函数发送该消息,在第一函数处理完该消息后由该函数向链表中的下一个函数传递消息,依次向下。如果链中某个函数没有向下传送该消息,那么链表中后面的函数将得不到此消息。(对于某些类型的HOOK,不管HOOK链中的函数是否向下传递消息,与此类型HOOK联系的所有HOOK函数都会收到系统发送的消息)  
   
  HOOK过程  
   
  为了拦截特定的消息,你可以使用SetWindowsHookEx函数在该类型的HOOK链中安装你自己的HOOK函数。该函数语法如下:  
   
  public   function   MyHook(nCode,wParam,iParam)   as   long  
   
  ‘加入代码  
   
  end   function  
   
  其中MyHook可以随便命名,其它不能变。该函数必须放在模块段。nCode指定HOOK类型。wParam,iParam的取值随nCode不同而不同,它代表了某种类型的HOOK的某个特定的动作。  
   
  SetWindowsHookEx总是将你的HOOK函数放置在HOOK链的顶端。你可以使用CallNextHookEx函数将系统消息传递给HOOK链中的下一个函数。  
   
  [注释]对于某些类型的HOOK,系统将向该类的所有HOOK函数发送消息,这时,HOOK函数中的CallNextHookEx语句将被忽略。    
   
  全局HOOK函数可以拦截系统中所有线程的某个特定的消息(此时该HOOK函数必须放置在DLL中),局部HOOK函数可以拦截指定线程的某特定消息(此时该HOOK函数可以放置在DLL中,也可以放置在应用程序的模块段)。  
   
  [注释]   建议只在调试时使用全局HOOK函数。全局HOOK函数将降低系统效率,并且会同其它使用该类HOOK的应用程序产生冲突。  
   
     
   
  HOOK类型  
   
  WH_CALLWNDPROC   和   WH_CALLWNDPROCRET   HOOK  
   
  WH_C   ALLWNDPROC   和WH_CALLWNDPROCRET   HOOK可以监视SendMessage发送的消息。系统在向窗体过程发送消息前,将调用WH_CALLWNDPROC;在窗体过程处理完该消息后系统将调用WH_CALLWNDPROCRET。  
   
  WH_CALLWNDPROCRET   HOOK会向HOOK过程传送一个CWPRETSTRUCT结构的地址。该结构包含了窗体过程处理系统消息后的一些信息。  
   
  WH_CBT   Hook  
   
  系统在激活,创建,消毁,最小化,最大化,移动,改变窗体前;在完成一条系统命令前;在从系统消息队列中移去鼠标或键盘事件前;在设置输入焦点前,或同步系统消息队列前,将调用WH_CBT   HOOK。你可以在你的HOOK   过程拦截该类HOOK,并返回一个值,告诉系统,是否继续执行上面的操作。  
   
  WH_DEBUG   HOOK  
   
  系统在调用与某种HOOK类型联系的HOOK过程前,将调用WH_DEBUG   ,应用程序可以使用该HOOK决定是否让系统执行某种类型的HOOK。  
   
  WH_FOREGROUNDIDLE   Hook  
   
  系统在空闲时调用该HOOK,在后台执行优先权较低的应用程序。  
   
  WH_GETMESSAGE   Hook  
   
  WH_GETMESSAGE   Hook使应用程序可以拦截GetMessage   或   PeekMessage的消息。应用程序使用WH_GETMESSAGE   HOOK监视鼠标、键盘输入和发送到队列中的其它消息。  
   
  WH_JOURNALRECORD   Hook  
   
  WH_JOURNALRECORD   Hook使应用程序可以监视输入事件。典型地,应用程序使用该HOOK记录鼠标、键盘输入事件以供以后回放。该HOOK是全局HOOK,并且不能在指定线程中使用。  
   
  WH_JOURNALPLAYBACK   Hook  
   
  `   WH_JOURNALPLAYBACK   Hook使应用程序可以向系统消息队列中插入消息。该HOOK可以回放以前由WH_JOURNALRECORD   HOOK录制的鼠标、键盘输入事件。在WH_JOURNALPLAYBACK   Hook安装到系统时,鼠标、键盘输入事件将被屏蔽。该HOOK同样是一个全局HOOK,不能在指定线程中使用。  
   
  WH_JOURNALPLAYBACK   Hook返回一个时间暂停值,它告诉系统,在处理当前回放的消息时,系统等待百分之几秒。这使得此HOOK可以控制在回放时的时间事件。  
   
  WH_KEYBOARD   Hook  
   
  WH_KEYBOARD   Hook使应用程序可以监视由GetMessage和PeekMessage返回的WM_KEYDOWN   及WM_KEYUP消息。应用程序使用该HOOK监视发送到消息队列中的键盘输入。  
   
  WH_MOUSE   Hook  
   
  WH_MOUSE   Hook   使应用程序可以监视由GetMessage和PeekMessage返回的消息。应用程序使用该HOOK监视发送到消息队列中的鼠标输入。  
   
  WH_MSGFILTER   and   WH_SYSMSGFILTER   Hooks  
   
  WH_MSGFILTER   和WH_SYSMSGFILTER   Hooks使应用程序可以监视菜单、滚动条、消息框、对话框,当用户使用ALT+TAB或ALT+ESC来切换窗体时,该HOOK也可以拦截到消息。WH_MSGFILTER仅在应用程序内部监视菜单、滚动条、消息框、对话框,而WH_SYSMSGFILTER则可以在系统内监视所有应用程序的这些事件。  
   
  WH_SHELL   Hook  
   
  一个SHELL程序可以使用WH_SHELL   Hook来接收重要的信息。当一个SHELL程序被激活前或当前窗体被创建、消毁时,系统会调用WH_SHELL   Hook过程。  
   
  使用HOOK  
   
  安装、消毁HOOK过程  
   
  监视系统事件  
   
     
   
  安装、消毁HOOK过程  
   
  使用SetWindowsHookEx函数,指定一个HOOK类型,自己的HOOK过程是全局还是局部HOOK,同时给出HOOK过程的进入点,就可以轻松的安装你自己的HOOK过程。  
   
  为了安装一个全局HOOK过程,必须在应用程序外建立一个DLL,并将该HOOK函数封装到其中,应用程序在安装全局HOOK过程时必须先得到该DLL模块的句柄。将DLL名传递给LoadLibrary   函数,就会得到该DLL模块的句柄;得到该句柄   后,使用GetProcAddress函数可以得到HOOK过程的地址。最后,使用SetWindowsHookEx将HOOK过程的首址嵌入相应的HOOK链中,SetWindowsHookEx传递一个模块句柄,它为HOOK过程的进入点,线程标识符置为0,指出:该HOOK过程同系统中的所有线程关联。  
   
  以下是C写的例程,大家可以方便的转换为VB程序。  
   
  HOOKPROC   hkprcSysMsg;    
   
  static   HINSTANCE   hinstDLL;    
   
  static   HHOOK   hhookSysMsg;    
   
  .    
   
  .    
   
  .    
   
     
   
  hinstDLL   =   LoadLibrary((LPCTSTR)   "c:\\windows\\sysmsg.dll");    
   
  hkprcSysMsg   =   (HOOKPROC)GetProcAddress(hinstDLL,   "SysMessageProc");    
   
  hhookSysMsg   =   SetWindowsHookEx(WH_SYSMSGFILTER,    
   
  hkprcSysMsg,   hinstDLL,   0);    
  Top

11 楼letian_now(乐天)回复于 2006-03-21 14:59:45 得分 0

谢谢Top

相关问题

  • 请教大家,如何在程序中屏蔽所有的WINDOWS的热键??
  • 屏蔽系统所有的热键.
  • 如何封杀WINDOWS热键:ALT + TAB?
  • 怎样在窗口中使用热键ctrl+alt+del调用另一个窗体,屏蔽所有系统热键
  • 热键
  • 热键
  • ☆★☆在Windows NT 4.0 SP3或 Windows 2000下屏蔽系统热键的编译错误☆★☆
  • 热键问题
  • 热键问题
  • 热键控制!

关键词

  • 函数
  • 应用程序
  • 消息
  • 键盘
  • 系统
  • 监视
  • 线程
  • 钩子
  • hook
  • wh

得分解答快速导航

  • 帖主:letian_now
  • vansoft
  • luosidao
  • BookSirSwordsMan
  • of123
  • of123
  • ZOU_SEAFARER

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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