说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

按下某组键(HotKey)便执行某程式-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
按下某组键(HotKey)便执行某程式-VB资料

在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。
'以下在.BasOption 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

[对话CTO]甲骨文熊光樑:全球研发模式开发出接地气产品 GitHub中国游记之长城——跨越那堵看不见的墙 IE11开发人员工具:UI响应工具详解 2013 Linux领域年终盘点 腾讯云俱乐部深圳站成功落幕 开创移动开发新篇章 解读云计算、大数据、物联网等九大IT技术发展趋势 苹果已证实收购Topsy或将涉足社交领域 触摸未来:Tactus微流体技术2014年来袭 Windows的未来:一个核心 多个版本 Github项目中使用率最高的Java/Ruby/JS库 2013中国大数据技术大会盛大开幕 从黑色星期五找到的六个规则 帮助网站转化 移动开发者的自学宝典:十大在线编程学习网站 MIT新技术:远程触摸和操纵实物 创新人机交互 中国移动研究院业务支撑研究所所长孙少陵:大数据实时处理技术发展趋势及中国移动实践和展望 “第一届中国大数据技术创新与创业大赛”主办方发言及创新分赛颁奖 中国移动研究院业务支撑研究所所长孙少陵:大会及与会嘉宾介绍 中国工程院院士、大数据专家委员会主任李国杰:能挖掘出价值的数据就是好数据 阿里飞天平台总架构师唐洪:飞天开放平台 百度大数据首席架构师林仕鼎:新计算时代 金山发布全系列IaaS平台 Google无人驾驶汽车与机器人组合,秒杀无人机 Google欲推新Chrome应用:适用于Android、iOS平台 comScore:美国市场苹果手机独占鳌头 Android和iOS双寡头垄断 一周消息树:新技术实现远程触摸和操纵实物 创新人机交互 研发周报:帮助网站转换的六大黑色星期五规则 【开源专访】JFinal作者詹波:以极简方式实现Web项目的极速开发 2013中国智能交通与大数据技术峰会:迎接交通大数据新时代 大数据应用技术(上):加速创新,重塑世界 英特尔百度携手推出首个跨平台应用商店 12月9日:计算机软件第一夫人Grace Hopper出生 一个老问题 ?ACCESS2000的数据库有几行坏了,无法用ACCESS修复/无法删除,一读到该行ACCESS就直接退出,怎么办? 各位,感觉学数学难不难? 壹?ACCESS2000的数据库有几行坏了,无法用ACCESS修复/无法删除,一读到该行ACCESS就直接退出,怎么办? 号外:今天终于卖了侯捷的Inside The C++ Object Model ,休息时可以翻番,为了祝贺特灌水100 谁能给我连 接sql2000数据库数据原的原代码===火急!!! 高手帮忙,如何让我能用jbuilder5? 请问用Perl编写用户交互程序 请问各位大哥,上海的高程考试在哪里报名啊? dcom 服务器关闭时怎能捕捉异常 三戒,有请~~~ 谁知道websphere的试用版怎么做掉? 打印DataReport时怎样用API改变系统的纸型,急急急急急急急急急!!!! 新来的~~来报到了~~只能送20分~~希望大家不嫌弃~~ 请成功使用JBuilder5的朋友指教!! 激情放送 五位QQ号,100块,你会要吗? 555~~~~挂了PASCAL挂了,5555~~~~我学不好DELPHI 了5555谁帮我呀!!! 有编过游戏修改器的高手吗? jinesc领分~~~ 如何使UpDown每次增加或减少0.5? 有个问题很困惑,请教 上傳后,服務器端如何接收? 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!! 我快神经了,求救 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!! 别笑我傻,又有简单问题 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!!!!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!! 大家都谈谈建立什么样的目录结构能更好的管理硬盘里的东东 lilo 如何设置??请赐教!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!!!!1 mts是什么? mts是什么?? 学习汇编要什么基础,要看什么样的书,有没有好的汇编的电子参考书下载呢? 腾讯的qq怎么不好用了? 有CCNA,Scjp2,高程的计算机本科生能卖多少?(答者有分,只能给33分,没办法) word的表格问题 如果开另外一个线程来进行注册码检验,是否比较难CRACK? 请问高程考试考试的难度 怎么让程序启动的时候接受参数? mts是什么??? 我也调查:这里有多少冠名以“独孤”的,为何独孤???? 菜鸟SOS 个人论:编写程序方法论(原作者,huangbeyond) 向流版主学习,戒网!戒网!成天在网上瞎转,不如下去加强学习,碰到问题再上网寻求答案,天天在网上泡得久了,看到各大PB网站的编程技巧都有些视而不见了.....到PB论坛很多人都象到自己喜爱的聊天室了,到论坛好象就是来聊天一样.....戒网!戒网! 如何编写一个集成Ms Word的控件,能够处理WEB上的文件排版 怎么不能下载呢? 我是女孩,有人信吗??嘻嘻~~ 谁知道关于用vc编游戏的书,请各位大虫们介绍介绍好吗?谢谢了!!!!!!!!!! 我们经常在一起玩用英语怎么说 英语翻译像四川九寨沟,张家界,安徽黄山,桂林山水,等等 英语翻译词组 梦想中的旅行 可不可以用dreamy trip?dreamy 不是有 虚幻的 模糊的意思嘛? "我们经常在一起"用英语怎么说? "周末去旅游好吗?"的英文翻译是什么? “旅行很快就结束了”英文翻译要用过去时! 亲爱的我们永远在一起好吗?用英语怎么说 英语翻译 翻译下就行 我看看大意3. Results and discussions3.1. Extraction kineticsThe characteristics of the bed and the particles were: particle average diameter of 3.9×10−4 m, true particles density of 1524 kg/m3, apparent bed de 翻译英文:天气变冷,注意保暖. 我要我们永远在一起 帮我翻译 我要我们永远在一起单独的永远在一起 英文是什么 我们用了一周的时间在桂林欣赏了美丽的风景英文翻译 天气变冷了 英汉互译 我们永远在一起 用英语怎么说 我喜欢那美丽的风景!用英语怎么说? 天气变冷了 用英语怎么说 It is 你在那里干什么用英文怎么说 我们永远在一起”,用英语怎么说呀] 我们用一周的时间在桂林欣赏了美丽的风景英文翻译 你在那里用英语怎么讲 让我们在一起用英语怎么说 我将站在巴黎铁塔的最高层去欣赏巴黎美丽的风景 用英语翻译不要拿机器翻译 问:你在那里读书?英语怎么说 不知道以后我们会不会在一起用英语怎么说? 英语翻译希望哪位达人帮我翻译.事后会追加分值.摘要:发展旅游电子商务不仅是中国旅游业自身发展需要,也是信息时代中国旅游业面临国际旅游业竞争的必需.通过分析中泰旅游电子商务发 帽子的英语怎么读, 英语翻译求英语翻译成在线等1.仅以此画表示我的愤怒 英语翻译我觉得,最理想的度假地一定是一个美丽的海滨城市,那里要有充足的阳光,柔软的沙滩和多姿多彩的海滩派对.还要有很多美女帅哥,数不清的椰子树以及一整天都放不完的动听音乐.我 学霸用英文怎么读,学渣呢? 英语翻译 现在他们正在看一张他们教室的画. 旅游新热点 用个英文翻译 昆虫英语怎么读?给好评 自己画的画 英文翻译 最热门的旅游景点在哪里?风景旅游景点最多旅游人数是哪里? 生物用英语怎么读, 你喜欢哪一类型的画?求英语翻译 上海热门旅游景点有哪些? 香港是特别行政区用英语怎么说 英语翻译:你明天和他一起来上海吗? 英语翻译“你越轻视我,我越要游得快”.关键是“越---越---”句式 他去香港了 英语怎么说急用!写了! 英语翻译亲们,最近想跳槽到一家鞋企,人家要英文简历.我现在想知道报价员的英文该怎样翻译的.如果您是这行的就更好,希望能得到您的指点, 求“去上海一定要去东方明珠电视塔游玩”的英文翻译,关键词include 这周去香港 英语怎么说 英语翻译想翻译好报价单上交,该去哪里翻译啊 你给了我一次愉快地旅行 英文翻译 香港用英语怎么说 英语翻译注意:请用人脑翻译 帮忙用英语翻译一句话 “一次遥远的旅行” 我希望再去一次那里用英语怎么说?用 过去时态 说啊. 英语翻译是以What's —— —— —— this computer 英语翻译我相信你在中国将会有一个美好的旅行! "和某人在一起"用英语怎么说? 初一英语翻译:价格合理 英语翻译 进行一次家庭旅行 "与某人在一起"用英语怎么说?^-^ 旅游景点英文翻译 英语翻译是7个词语和成的 没有人愿意和他呆在一起用英语怎么说? 英语翻译先是关于九寨沟滴1.五花海2.五彩池3.我们路过了许多景点.(注意哈,过去时)4.熊猫海5.诺日朗瀑布6.树正寨还有一句:从山脚爬到山顶一共有3800米,但我和爸爸还是坚持爬了上去, 英语翻译To minimise ATM fees,withdrawal the maximum allowed each transaction,usually 20 banknotes or 20000 baht.Your personal daily withdrawal limit will be enforced if less than the equivalent of 20000 baht.If you intend to bring Travellers Cheq
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn