CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

触发事件问题?

楼主onln()2006-07-01 20:27:50 在 VB / 基础类 提问

在程序运行时   按下   Ctrl+F10   就执行一个msgbox    
  这该怎么写才能实现这种效果啊!  
  问题点数:20、回复次数:8Top

1 楼onln()回复于 2006-07-01 21:07:58 得分 0

有没有人知道啊  
  Top

2 楼YaDa()回复于 2006-07-01 22:27:18 得分 0

KeyDown事件,Ctrl用shift参数来判断,F10用KeyCode参数来判断  
  if   shift   =   VbCtrlMask   and   KeyCode   =   vbKeyF10   then   msgbox   "ok"Top

3 楼verywzm(寒江雪)回复于 2006-07-01 22:32:41 得分 0

'===================窗体代码===============  
  Option   Explicit  
   
  Private   Sub   Form_Load()  
  Dim   ret   As   Long  
   
  '记录原来的window程序地址  
  preWinProc   =   GetWindowLong(Me.hwnd,   GWL_WNDPROC)  
  '用自定义程序代替原来的window程序  
  ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   AddressOf   Wndproc)  
   
  idHotKey   =   1  
  Modifiers   =   MOD_CONTROL   'Alt+Ctrl   键  
  uVirtKey   =   vbKeyF10     'F10键  
  ret   =   RegisterHotKey(Me.hwnd,   idHotKey,   Modifiers,   uVirtKey)  
   
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
  Dim   ret   As   Long  
  '取消Message的截取,使之送往原来的windows程序  
  ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   preWinProc)  
  Call   UnregisterHotKey(Me.hwnd,   uVirtKey)  
   
  End   SubOption   Explicit  
   
  Private   Sub   Form_Load()  
  Dim   ret   As   Long  
   
  '记录原来的window程序地址  
  preWinProc   =   GetWindowLong(Me.hwnd,   GWL_WNDPROC)  
  '用自定义程序代替原来的window程序  
  ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   AddressOf   Wndproc)  
   
  idHotKey   =   1  
  Modifiers   =   MOD_CONTROL   'Alt+Ctrl   键  
  uVirtKey   =   vbKeyF10     'F10键  
  ret   =   RegisterHotKey(Me.hwnd,   idHotKey,   Modifiers,   uVirtKey)  
   
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
  Dim   ret   As   Long  
  '取消Message的截取,使之送往原来的windows程序  
  ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   preWinProc)  
  Call   UnregisterHotKey(Me.hwnd,   uVirtKey)  
   
  End   Sub  
   
  '=====================模块代码========================  
  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   "Ctrl+F10"  
                          End   If  
                  End   If  
          End   If  
          '如果不是热键信息则调用原来的程序  
          Wndproc   =   CallWindowProc(preWinProc,   hwnd,   Msg,   wParam,   lParam)  
           
  End   Function  
  Top

4 楼onln()回复于 2006-07-01 22:59:49 得分 0

YaDa()   (   )   信誉:100    
  你给我的代码都用不了!Top

5 楼YaDa()回复于 2006-07-01 23:19:46 得分 0

'我刚试了一下,很好啊  
  Private   Sub   Form_KeyDown(KeyCode   As   Integer,   Shift   As   Integer)  
          If   Shift   =   vbCtrlMask   And   KeyCode   =   vbKeyF10   Then   MsgBox   "ok"  
  End   SubTop

6 楼YaDa()回复于 2006-07-01 23:40:16 得分 0

罗嗦几句:  
  1、本代码是在窗体获得焦点的情况下有效。  
  2、要将Form的Preview属性设置为True.  
  3、如果要在后台运行的情况下也要弹出对话框,就要进行消息拦截,可以试试“寒江雪”的代码,也可以用搜索引擎查找一下“键盘钩子”或“热键”。Top

7 楼onln()回复于 2006-07-02 09:32:57 得分 0

YaDa()   (   )   信誉:100    
  可以了!昨天我自己没看清楚谢谢!Top

8 楼YaDa()回复于 2006-07-02 21:55:08 得分 0

既然可以了,就别忘了给分。Top

相关问题

关键词

得分解答快速导航

  • 帖主:onln

相关链接

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

广告也精彩

反馈

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