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

怎么用VB检测键盘的状态?急!在线等待!!!

楼主zhangthree(天龙)2002-05-30 16:30:02 在 VB / 基础类 提问

我作了一个VB程序,里面有一个timer控件,到时间运行,我想在里面加上一个检测键盘的语句,如果某个键按下,则运行,否则,不运行,应该怎么做?请高手指点,谢谢!!! 问题点数:60、回复次数:8Top

1 楼light_swing(轻寒)回复于 2002-05-30 16:52:32 得分 5

这个办法试试:  
  在key_onclick里置一个标志变量  
  在timer程序里检查这一变量即可Top

2 楼light_swing(轻寒)回复于 2002-05-30 16:54:10 得分 5

哦,该key_down里吧Top

3 楼uv2000()回复于 2002-05-30 18:15:45 得分 10

dim   a   as   long  
   
  ...   XXX   XXX   ...  
   
  time1.enable=true  
   
  ...   key_down   ...  
     
  if   a=1   then  
        your   do  
   
  ...   time1_timer   ...  
   
  a=1    
   
  Top

4 楼uv2000()回复于 2002-05-30 18:16:13 得分 0

dim   a   as   long  
   
  ...   XXX   XXX   ...  
   
  time1.enable=true  
   
  ...   key_down   ...  
     
  if   a=1   then  
        your   do  
   
  ...   time1_timer   ...  
   
  a=1    
   
  Top

5 楼coffee_cn(coffee)回复于 2002-05-30 18:23:28 得分 20

按下某组键(HotKey)便执行某程序  
  来源:cww  
  在Dos的年代,我们常会以拦截中断向量的方式,做到按下某个hotkey而自动执行某个程  
  式,在Window呢,也可以,不过它是用RegisterHotkey   API来完成。  
   
  使用RegisterHotkey的概念是,它会定义一组按键的组合,当使用者不管在哪个程序之中  
  ,按下Window有注册的HotKey时,OS会传送WM_HOTKEY   的讯息给待接收该讯息的Window,  
  而该Window收到WM_HOTKEY时,便可知道有本身Thread所定义的HotKey被按下,於是可以  
  从wParam,   lParam来得知是哪一组HotKey被按下。  
   
    RegisterHotKey(  
          ByVal   hwnd   As   Long   ,                 //接收Hotkey的Window  
          ByVal   idHotKey   as   Long,           //   identifier   of   hot   key,range   0x0000   through   0xBFFF  
          ByVal   Modifiers   As   Long,         //   定义alt   shift   control等的组合  
          ByVal   uVirtKey   As   Long             //   virtual-key   code  
        )  
   
    WM_HOTKEY   叁数的定义  
    idHotKey   =     wParam;                                   //   identifier   of   hot   key    
    Modifiers   =   (UINT)   LOWORD(lParam);     //   key-modifier   flags    
    uVirtKey   =   (UINT)   HIWORD(lParam);       //   virtual-key   code  
   
  所以了,除了设定RegisterHotkey外,另要使用SubClassing的技巧才会得知HotKey被按  
  下;最後,程序结束前要使用UnRegisterHotkey将HotKey的定义取消掉。  
   
  以下程序功能是:不管在哪个程序中,只要按下ALT-SHIFT-G   便执行NotePad。  
  '以下在.Bas  
  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  
                      Debug.Print   "HotKey   Shift-Alt-G   Pressed   "  
                      Shell   "notepad",   vbNormalFocus  
                End   If  
        End   If  
    End   If  
    '将之送往原来的Window   Procedure  
    wndproc   =   CallWindowProc(preWinProc,   hwnd,   Msg,   wParam,   lParam)  
    End   Function  
     
  '以下在   Form  
  Sub   Form_Load()  
    Dim   ret   As   Long  
    preWinProc   =   GetWindowLong(Me.hwnd,   GWL_WNDPROC)  
    ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   AddressOf   wndproc)  
    idHotKey   =   1   'in   the   range   &h0000   through   &hBFFF  
    Modifiers   =   MOD_ALT   +   MOD_SHIFT  
    uVirtKey   =   vbKeyG  
    ret   =   RegisterHotKey(Me.hwnd,   idHotKey,   Modifiers,   uVirtKey)  
    End   Sub  
   
    Private   Sub   Form_Unload(Cancel   As   Integer)  
    Dim   ret   As   Long  
    '取消Message的截取,而使之又只送往原来的Window   Procedure  
    ret   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   preWinProc)  
    Call   UnregisterHotKey(Me.hwnd,   uVirtKey)  
    End   Sub  
     
   
  Top

6 楼atree_zhang(木依)回复于 2002-05-30 22:10:07 得分 10

不知道说的是不是你说的问题  
  声明一个变量   KeyStr   为布尔型的  
  在窗口的keydown     事件中添加以下代码  
  select   case   Keycode  
          case   你所需要的键的码值  
                          keystr=true  
          case   你不需要的键的码值    
                          keystr=false  
              .....  
  end   select  
   
  在timer中的事件中则判断KeyStr的值来确定是否执行该操作Top

7 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-05-30 22:16:43 得分 10

名称:0003.zip  
  URL:http://202.98.116.66/amtd/aijun/document/0003.zip  
  大小:   54KB    
  完成时间:Sun   Apr   21   16:48:07   2002  
  引用页:http://wind.prohosting.com/stock236/tongs/tscctvgssh.zip  
  注释:2000.09.18   [软件报]   -   利用热键操作实现一键通   下载    
  Top

8 楼hack008(邱少华)回复于 2002-05-30 22:19:10 得分 0

zyl910(910:分儿,我来了!)   多给他点分!!!你太热心了!!!Top

9 楼zry168(暴风雪)回复于 2002-05-30 22:23:18 得分 0

upTop

相关问题

  • 检测键盘????????????????
  • 怎样检测按下键盘、鼠标单击的消息?VB
  • unix键盘检测
  • 请问有没有检测键盘NumLock键的开关状态的Api呢
  • 键盘状态的获取
  • 如何读键盘状态?
  • 打印机状态检测
  • 如何在VB中检测是否按下键盘或鼠标,如果超过1分钟没有按键则执行某操作?
  • vb 键盘事件求教
  • 如何获取键盘的状态?

关键词

  • 执行
  • hotkey
  • byval
  • registerhotkey
  • 程序
  • 定义
  • as long
  • hwnd
  • timer
  • lparam

得分解答快速导航

  • 帖主:zhangthree
  • light_swing
  • light_swing
  • uv2000
  • coffee_cn
  • atree_zhang
  • zyl910

相关链接

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

广告也精彩

反馈

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