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

在VB。NET中如何使用热键

楼主gdutmo(莫一冰)2004-08-03 07:42:08 在 .NET技术 / VB.NET 提问

请问各位在VB。NET中如何使用热键,如按下*号就就调用BUTTION的CLICK的事件,请贴出例子 问题点数:0、回复次数:16Top

1 楼LongBow007(明朝散发弄扁舟)回复于 2004-08-03 08:16:08 得分 0

upTop

2 楼LongBow007(明朝散发弄扁舟)回复于 2004-08-03 08:16:35 得分 0

看看能不能不用API实现Top

3 楼gdutmo(莫一冰)回复于 2004-08-03 08:30:17 得分 0

各位有例子贴来吗?我是初学,但工程在手啊,急死了,希望各位帮忙!先谢!Top

4 楼zihu928(笨狐狸)回复于 2004-08-03 08:42:53 得分 0

可以这样做:  
  定义全局的按键响应事件,检测到e.keychar   =   "*"时就调用button.performclick()方法。Top

5 楼dai2003(天剑)回复于 2004-08-03 08:51:47 得分 0

同意樓上的做法Top

6 楼walkinhill(reaway)回复于 2004-08-03 09:13:35 得分 0

如果你只是想在窗体激活的时候响应按键事件的话,你可以设置Form   的KeyPreview属性为true,然后在Form的Keydown事件里面调用button的单击事件处理函数:  
   
          Private   Sub   frmMain_KeyDown(ByVal   sender   As   Object,   ByVal   e   As   System.Windows.Forms.KeyEventArgs)   Handles   MyBase.KeyDown  
                  Button2_Click(sender,   Nothing)  
          End   Sub  
   
  如果你要定义全局热键,就是说要在应用程序没有激活的时候也起作用,你要使用API注册全局键盘钩子函数了。Top

7 楼gdutmo(莫一冰)回复于 2004-08-03 11:05:32 得分 0

我也试过楼上的方法,但我一开始时就设了一个TEXTBOX.SELECT   的。那么当我按下键时是TEXTBOX就会填上*(我设了*为热键)有什么好办法。那个API注册有好例子吗?我是为按钮加热键。Top

8 楼gdutmo(莫一冰)回复于 2004-08-03 11:46:47 得分 0

upTop

9 楼gdutmo(莫一冰)回复于 2004-08-03 11:47:41 得分 0

upTop

10 楼gxlwl(小龙)回复于 2004-08-03 11:48:55 得分 0

给个前人的例子:  
  '按F10激活窗体  
  Public   Class   Form1  
          Inherits   System.Windows.Forms.Form  
   
          Private   Sub   SetF_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
                  AddHotKey(Me.Handle,   1,   0,   Keys.F10)  
          End   Sub  
          Private   Sub   SetF_Disposed(ByVal   sender   As   Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Disposed  
                  DelHotKey(Me.Handle,   1)  
          End   Sub  
   
  End   Class  
   
  Module   Module1  
   
          '声名委托类型  
          Delegate   Function   SubClassProcDelegate(ByVal   hwnd   As   IntPtr,   ByVal   msg   As   Integer,   ByVal   wParam   As   Integer,   ByVal   lParam   As   Integer)   As   Integer  
          '引用API  
          Private   Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hwnd   As   IntPtr,   ByVal   nIndex   As   Integer,   ByVal   dwNewinteger   As   SubClassProcDelegate)   As   Integer  
          Private   Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   (ByVal   lpPrevWndFunc   As   Integer,   ByVal   hwnd   As   IntPtr,   ByVal   Msg   As   Integer,   ByVal   wParam   As   Integer,   ByVal   lParam   As   Integer)   As   Integer  
          Private   Declare   Function   RegisterHotKey   Lib   "user32"   (ByVal   hwnd   As   IntPtr,   ByVal   id   As   Integer,   ByVal   fskey_Modifiers   As   Integer,   ByVal   vk   As   Integer)   As   Integer  
          Private   Declare   Function   UnregisterHotKey   Lib   "user32"   (ByVal   hwnd   As   IntPtr,   ByVal   id   As   Integer)   As   Integer  
          Private   Declare   Function   SetForegroundWindow   Lib   "user32.dll"   (ByVal   hwnd   As   IntPtr)   As   Integer  
   
          '常量系统热键消息  
          Const   WM_HOTKEY   =   &H312  
          '常量窗口函数的地址  
          Const   GWL_WNDPROC   =   (-4)  
          Dim   preWinProc   As   Integer  
          Dim   IsWinAddress   As   Boolean  
          '下面的function在本进程面始终执行  
          '并检测窗体是否获得系统热键消息  
          '获得热键消息就执行SetForegroundWindow(hwnd)  
          Function   keyWndproc(ByVal   hwnd   As   IntPtr,   ByVal   Msg   As   Integer,   ByVal   wParam   As   Integer,   ByVal   lParam   As   Integer)   As   Integer  
                  If   Msg   =   WM_HOTKEY   Then  
                          If   wParam   =   1   Then   'wParam   值就是   keyID  
                                  SetForegroundWindow(hwnd)  
                          End   If  
                  End   If  
                  '将消息传送给指定的窗口  
                  keyWndproc   =   CallWindowProc(preWinProc,   hwnd,   Msg,   wParam,   lParam)  
          End   Function  
          Public   Sub   AddHotKey(ByVal   hwnd   As   IntPtr,   ByVal   keyID   As   Integer,   ByVal   Shift   As   Integer,   ByVal   KeyCode   As   Integer)  
                  'preWinProc得到窗口的地址  
                  '并执行委托函数keyWndproc  
                  preWinProc   =   SetWindowLong(hwnd,   GWL_WNDPROC,   AddressOf   keyWndproc)  
                  '注册热键  
                  '热键发生就会把本线程提到系统进程的最前列  
                  RegisterHotKey(hwnd,   keyID,   Shift,   KeyCode)  
          End   Sub  
          Public   Sub   DelHotKey(ByVal   hwnd   As   IntPtr,   ByVal   keyID   As   Integer)  
                  '删除热键注册  
                  UnregisterHotKey(hwnd,   keyID)  
          End   Sub  
   
   
  End   ModuleTop

11 楼gdutmo(莫一冰)回复于 2004-08-03 12:32:36 得分 0

这篇文章我也看过但我是新手有点看不懂,如果我要改为为按钮边热键应如何改呢?请各位帮忙!Top

12 楼AntingZ(夕惕若)回复于 2004-08-03 13:03:50 得分 0

把下面代码放到你的窗体代码:  
   
  Protected   Overrides   Function   ProcessCmdKey(ByRef   msg   As   System.Windows.Forms.Message,   ByVal   keyData   As   System.Windows.Forms.Keys)   As   Boolean  
   
                  '考虑到小数字键盘上的*(乘法)   和   Shift+8形成的*    
                  '根据你自己的要求选择需要哪个  
                  If   keyData   =   Keys.Multiply   Or   keyData   =   (keyData.Shift   Or   Keys.D8)   Then  
                          MessageBox.Show("You   Press   ***")  
                          'do   something  
                          Return   True  
                  End   If  
   
  End   FunctionTop

13 楼gdutmo(莫一冰)回复于 2004-08-03 13:24:00 得分 0

谢,不过我还想知道如果用API   的方法如何做呢?Top

14 楼AntingZ(夕惕若)回复于 2004-08-03 13:37:34 得分 0

都dotNet了,你还念念不忘API  
   
  热键API用   RegisterHotKey   和   UnregisterHotKey    
   
  还可以用Hook技术,不过那样实在是得不偿失,又麻烦有消耗资源。Top

15 楼gdutmo(莫一冰)回复于 2004-08-03 13:41:44 得分 0

呵呵,因为。NET的基类太大了,对于我的初学者来说重载它们有点烦麻,因为对它们不熟。楼上的朋友,怎样才能学好。NET呢,还请指点一下。Top

16 楼AntingZ(夕惕若)回复于 2004-08-03 13:52:13 得分 0

看书,写代码,碰到不懂的,查MSDN,不详细,  
  来CSDN搜索,搜不到   ,用Google搜索,还搜不到,来CSDN提问  
  咿,怎么没人回答,向同学朋友讨教,都不会。  
  关门,自己研究三天三夜  
  还不行,晕倒......  
   
  ----------------------------------------------------  
  偶也菜鸟一只,没什么高见。偶是这样来学的  
  Top

相关问题

  • 关于热键使用的问题?
  • 在DELPHI程序里使用热键
  • VB.NET中如何使用热键?
  • 如何给VB的按钮做个热键(不是&A的形式)
  • 请教高手:如何用VB编写系统热键?
  • VB。NET 如何使用SQL事物
  • 在vb。net中使用Word.Application(50分)
  • 怎样在delphi中使用系统热键?
  • 如何定义,使用一个全局热键(在键盘上)
  • 请教:如何使用键盘钩子屏蔽系统热键?

关键词

  • 代码
  • api
  • 热键
  • byval
  • keydata
  • 窗体
  • 调用
  • 全局
  • 例子
  • 激活

得分解答快速导航

  • 帖主:gdutmo

相关链接

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

广告也精彩

反馈

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