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

VB能建立热键吗?就像ASP那样

楼主zhaoshuangly()2004-04-04 19:37:47 在 VB / 基础类 提问

请详细回答谢谢 问题点数:30、回复次数:5Top

1 楼MSTOP(陈建华)回复于 2004-04-04 19:46:17 得分 15

可以...  
  不过,单纯用VB做不了.要用C开发一个类库.  
   
  '这是它的源代码.参考一下  
  'KEYBKOOK.C  
  #include   <windows.h>  
  #include   <windowsx.h>  
  #include   <tchar.h>  
   
  HINSTANCE   g_hinstDll   =   NULL;  
   
  #pragma   data_seg(".drectve")  
          static   char   szLinkDirectiveShared[]   =   "-section:Shared,rws";  
  #pragma   data_seg()  
  #pragma   data_seg("Shared")  
   
  HHOOK   g_hhook             =   NULL;  
  HWND     g_hwndPost       =   NULL;  
  UINT     g_uMsgNotify   =   WM_USER;  
   
  #pragma   data_seg()  
   
  static   LRESULT   WINAPI   KeyboardHook_HookProc   (  
        int   nCode,  
        WPARAM   wParam,    
        LPARAM   lParam)    
  {  
   
        LRESULT   lResult   =   CallNextHookEx(g_hhook,   nCode,   wParam,   lParam);  
   
        if   (nCode   ==   HC_ACTION)    
        {  
              PostMessage(g_hwndPost,   g_uMsgNotify,   wParam,   lParam);  
        }  
        return(lResult);  
  }  
   
  BOOL   WINAPI   SetKeyboardHook   (HWND   hWndPost,   UINT   Msg)    
  {  
        HHOOK   hhook;  
   
        if   (g_hhook   !=   NULL)   return(FALSE);  
   
        g_hwndPost       =   hWndPost;  
        g_uMsgNotify   =   Msg;  
        Sleep(0);  
   
        hhook   =   SetWindowsHookEx(WH_KEYBOARD,   KeyboardHook_HookProc,   g_hinstDll,   0);  
        InterlockedExchange((PLONG)   &g_hhook,   (LONG)   hhook);  
        return(g_hhook   !=   NULL);  
  }  
   
  BOOL   WINAPI   ReleaseKeyboardHook()    
  {  
        BOOL   fOK   =   TRUE;  
   
        if   (g_hhook   !=   NULL)    
        {  
              fOK   =   UnhookWindowsHookEx(g_hhook);  
              g_hhook   =   NULL;  
        }  
        return(fOK);  
  }  
   
  BOOL   WINAPI   DllMain   (HINSTANCE   hinstDll,   DWORD   fdwReason,   LPVOID   lpvReserved)    
  {  
        switch   (fdwReason)    
        {  
              case   DLL_PROCESS_ATTACH:  
                    g_hinstDll   =   hinstDll;  
                    break;  
        }  
        return(TRUE);  
  }  
   
  'KEYBHOOT.DEF*********************  
  EXPORTS  
        SetKeyboardHook  
        ReleaseKeyboardHookTop

2 楼zhaoshuangly()回复于 2004-04-04 20:05:02 得分 0

用VB可以调用这个类吗?怎么调用啊?谢谢Top

3 楼sakurako(看晨雾散开,你就是我一生的最爱...)回复于 2004-04-04 20:40:58 得分 15

给你写了个程序:)  
  '====Form1中========  
  Private   Sub   Form_Load()  
    preWinProc   =   GetWindowLong(Me.hwnd,   GWL_WNDPROC)  
    ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   AddressOf   WndProc)  
    idHotKey   =   1  
    uVirtKey   =   vbKeyN    
    Modifiers   =   MOD_CONTROL   '=====热键是Ctrl+N,你可以自己改  
    ret   =   RegisterHotKey(Me.hwnd,   idHotKey,   Modifiers,   uVirtKey)  
  End   Sub  
   
  Private   Sub   Form_QueryUnload(Cancel   As   Integer,   UnloadMode   As   Integer)  
    SetWindowLong   Me.hwnd,   GWL_WNDPROC,   preWinProc  
    Call   UnregisterHotKey(Me.hwnd,   uVirtKey)  
  End   Sub  
   
  '======Module1中===============  
   
  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   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
  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   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  
   
  Public   Const   GWL_WNDPROC   =   (-4)  
  Public   Const   MOD_CONTROL   =   &H2  
  Public   Const   WM_HOTKEY   =   &H312  
   
  Public   Type   Stru1  
          p   As   Long  
  End   Type  
   
  Public   Type   Stru2  
          lWord   As   Integer  
          hWord   As   Integer  
  End   Type  
   
  Public   preWinProc   As   Long  
  Public   Modifiers   As   Long,   uVirtKey   As   Long,   idHotKey   As   Long  
   
   
  Public   Function   WndProc(ByVal   hwnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
  Dim   ret   As   Long  
      If   Msg   =   WM_HOTKEY   Then  
            If   wParam   =   idHotKey   Then  
                Dim   lp   As   Stru1,   s   As   Stru2  
                    lp.p   =   lParam  
                    LSet   s   =   lp  
                    If   (s.lWord   =   Modifiers)   And   s.hWord   =   uVirtKey   Then  
                        '执行操作  
                            msgbox   "热键程序"  
                    End   If  
            End   If  
      End   If  
  WndProc   =   CallWindowProc(preWinProc,   hwnd,   Msg,   wParam,   lParam)  
  End   Function  
   
  Top

4 楼sakurako(看晨雾散开,你就是我一生的最爱...)回复于 2004-04-04 20:41:55 得分 0

机器上没有VB无法帮你调试,你自己试试看吧Top

5 楼zhaoshuangly()回复于 2004-04-04 20:47:06 得分 0

好的   谢谢你啊:)我试试Top

相关问题

  • 如何用VB建立系统热键? (问题解决马上给分)
  • asp and vb
  • 如何给VB的按钮做个热键(不是&A的形式)
  • 请教高手:如何用VB编写系统热键?
  • 热键
  • 热键
  • 请问用vb能不能定义系统热键?如果能怎么定义?
  • vb adn asp
  • VB+XML+ASP
  • 关于ASP调用VB建立的组件的问题,请斑竹actvb和高手帮忙

关键词

  • null
  • hhook
  • hwndpost
  • umsgnotify
  • seg
  • lresult
  • ncode
  • wparam
  • winapi
  • lparam

得分解答快速导航

  • 帖主:zhaoshuangly
  • MSTOP
  • sakurako

相关链接

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

广告也精彩

反馈

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