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

按下某组键(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

不断抄袭的Facebook正逐步沦为一家普通的公司 Windows 8.1会不会把Windows 8的“Modern”开发者踢到路边 任志鹏:FusionCloud是华为二十年技术积累的精华 机器学习典范?iOS7中的Siri能主动学习如何发音 三星宣布关闭PC业务 主推便携设备和一体机 Web设计师必须掌握的六大设计策略 Facebook为什么要推Instagram视频分享功能? 天气预报(id后面的9位数字为城市代码)年月日,星期,当前时间(仅用于javascript) PHP 5.5.0发布 不再支持Windows XP和2003 专访ThinkPHP创始人刘晨:用最简单最快速的方式开发PHP应用 重构:仔细查看,改进代码 加速编码的17款最棒的CSS工具 生于微信:专访疯狂猜图CEO曹晓刚 谷歌:受感染的合法网站远比恶意网站危险性大 Mozilla正式发布Firefox 22应用程序开发者受益 支持3D游戏、视频通话和文件分享 直接拿来用!最火的前端开发项目(一) Salesforce.com和Oracle在云合作上达成长期协议 即将到来的数据中心僵尸末日,谁能成为最后的幸存者?! Andorid APK反逆向解决方案:梆梆加固原理探寻 科技拥抱设计:体验设计如何创新? Rails 4.0正式发布 命途多舛的webOS,两度易主,生生死死多少回 Citrix全面开源XenServer 为了三十亿人的网络幸福:Google投资O3b发射网络卫星 Windows 8.1中IE 11开始支持WebGL和SPDY/3 微软Build 2013开发者大会:盘点Windows 8.1的15个重大更新 瞧!这是摩托罗拉移动新Logo,你有什么感觉? 专访UEditor创始人战毅:打造最佳的用户编辑体验 Eclipse 4.3 正式版发布 代号Kepler 为兴趣而生 七大编程挑战项目,你敢来吗? iOS 7辅助功能:左右摇头控制iOS设备 聊天室来客列表的刷新方法是怎么实现的 请教各位PB高手! 关于时间的问题,请各位帮我看看 DELPHI中关于调用SQL SERVER存储过程???(高分相送) 就真的没有高手能给出破解word文档密码的高招或者软件吗(我的分,你的答案!!) ?一个对表格做校验的问题? ????****当用程序调WORD时,我想把WORD的右键事件屏蔽,请高手指点如何实现 一般在DOS下,在系统盘C中找不到其它的逻辑盘的原因有是什么? 在D5中winsock用recReceivebuf收数据为什么老出现地址错误???高分相送!!! 索取代码 求救:关于邮件服务器(SMTP)认证 请问在CE系统数据库编程时CEVT_UI4和CEVT_LPWSTR有何不同? 浏览器里能否使用带有界面的ActiveX Dialog中Edit控件对应的变量m_edit_string(CString型)如何得到控件中显示的串 各位:哪里有PB 7.0下载? 新学jbuilder请教前辈:听说用jbuilder做出来的东西脱离jbuilder环境后运行通常要改好多东西,怎么做能避免这类情况?用jbuilder做开发要 GetWindowNext怎么老是返回NULL? 我想学java,但是,我现在只会c++? 急都急死了,快教教我如何用Resin配jsp服务器啊?? 请问哪里可以找到Delphi 6 Developer's Guide这本书? 请问VB中怎么把从ms sqlserver中查到的记录输出到其它库中?如foxpro …… http://www.ws.net.cn/cgi-bin/lb2/topic.cgi?forum=1&topic=6696&show=0快了看看,有没有你们喜欢的女生? 爽呀!!!Visual Studio.net实在是正点呀! 我想用delphi自带的Micorsoft help workshop做帮助行么,在delphi哪里呀,我没找到! 我打算按下一个按钮实现ctrl+space切换输入法的功能,可是不好使,大家帮我看看 在dreamweave ultradev下如何把ASP与本地服务器上的数据库连接起来。 请教,来者有份,200分大放送, 初学者关于Package的问题 再贴WebLogic Server 和 Weblogic Integration 有何不同,各是用来做什么的? 我在APPlication中开始处加上如下代码,在PB下运行时没问题,怎么编译后执行exe文件后老提示连不??为什么,请赐教!! 在静态切分窗口中,如何显示标题? 求教大虾:如何给软件加上licence限制 抗议CSDN帖子内容为楷体,同意者举手! 如何在画布上画一个带箭头的直线. *-->为对话框应用上妆!在线等待 [诚征交友]不诚勿扰,请条件适合男士入内 有谁用过Cute ftp上传软件,为什么一进行文件同步时,就出现404 object not find的错误 关于界面对象丢失的问题…… 请大家看看这个问题。 我真的很需要帮助。。。请问谁有360度可以许多张图片旋转的代码 360度全景特效 高分求树型结构源代码 现在出了本Jbuilder5的书。有没有谁有这本电子书啊? 高分求树型结构源代码 SDK问题 这句sql有问题吗? 关于驱动程序开发! 在SQL-SERVER中出现数据死锁的情况一般是什么,若是由多个用户同时向数据库更新数据而导致的死锁,解决此问题的办法有那些? 寻找源代码排版软件? 有没有用VC写过短信接收程序,我在接收中文时出现乱码。 请教大虾:用mideaplayer来播放一首歌,如何用progressbar来表示进度? 我想学习驱动程序的开发,请大家帮我推荐几本这方面的书? 绿色化学指的是什么? 生活中在哪里见到过小数?举个例子. 在注塑过程中模具内的空气需要排除吗?模具内的空气会对注塑有影响吗? 在地球上一物体收到的万有引力很大于起绕地球所需的向心力,那么多余的力去哪了,如果是重力的话,那么就说明重力和向心力是分开的,向心力不能当重力使.但如果是完全失重的话,那么向心 关于绿色化学随便得弄点东西,写小论文的 力学之父 甲、乙两家公司共有150名工人,甲公司每名工人月工资为1200元,乙公司每名工人月工资为1500元,两家公司每月需付给工人工资共计19.5万元.(1)求甲、乙公司分别有多少名工人?(2)经营一段 短语动词的用法 什么是小数?小数的小故事是什么?小数的概念是什么? 某工厂要招聘甲乙两种工种的工人150人,甲乙两种工种的工人的月工资分别为600元和1000元.现要求招聘乙种工种的人数不少于甲种工种人数的2倍,甲乙两种工种各招聘多少人时,可以使得每月所 关于一个动词短语的用法请问what we should do is to talk about.what we should do is talking about...这两句中talk about是动词短语,但是用在is后面时,应该这么用呢?类似的一句还有:this subject is mainly to talk abo 中国力学之父是谁 甲厂有工人120人,乙厂有工人150人,如果要使乙工厂人数是甲厂的2倍,那么需要从甲 厂抽调多少人到乙厂? look引导的动词短语级用法, 请问保留2位有效数字和保留2位小数是一样意思吗?举个例子 某工厂计划招聘A,B两个工种的工人120人,已知A,B 两个工种的工人120人,已知A,B两个工种的工人的 月工资分别某工厂计划招聘A,B两个工种的工人120人,已知A,B两个工种的工人120人,已知A,B两个工种 动词短语的用法同动词一样吗 生活中有关小数的例子 质量相等的木块和铁块,谁的体积大 什么是绿色化学?为什么提倡绿色化学? 我想杀了阿基米德和牛顿怎么办?我控制不住情绪! 【答案选BCD,请逐个选项说明原因】如图所示,从地面上A点发射一枚远程导弹,在引力作用下,沿ACB椭圆轨道飞行击中地面目标B,C为轨道的远地点,距地面高度为h.已知地球半径为R,地球质量为M,引 谁能告诉我performance的用法(特别是由它组成的动词短语的用法) 平时说的%70水+%30酒精,这里的百分比是质量比还是体积比还是别的 19.如图所示,a为地球赤道上的物体;b为沿地球表面附近做匀速圆周运动的人造卫星;c为地球同步卫星.关于a、b、c做匀速圆周运动的说法中正确的是A.角速度的大小关系为wa=wc>wb(w为角速度) 绿色化学是什么 我们常说的酒的度数是体积百分数还是质量百分数? 18.2010年10月1日18时59分57秒,搭载着嫦娥二号卫星的长征三号丙运载火箭在西昌卫星发射中心点火发射,卫星由地面发射后,进入地月转移轨道,经多次变轨最终进入距离月球表面100公里,周期为11 重量7.8 体积1这个比值表示的意义是什么 (a+b)(a-b)怎样解释(用生活中的例子) 用蒸馏水润湿后的PH试纸测盐水,稀盐酸,氢氧化钠的值会比以前的增大还是减少 动词短语和短语动词有区别吗 举个生活中的例子! 在一次人才招聘会上,有A、B两家公司分别开出它们的工资标准:A公司允诺第一年月工资数为1500元,以后每年月工资比上一年月工资增加230元;B公司允诺第一年月工资数为2000元,以后每年月工 什么是绿色化学 牛顿发现万有引力的过程我认为牛顿是因为有一天坐在苹果树下打瞌睡,被树上成熟的苹果掉下来打到,就让他发现了万有引力的存在. 某招聘会上有甲乙两公司 甲公司允诺第一年月工资为1500元,以后每年月工资比上一年月工资增加230元;乙公...某招聘会上有甲乙两公司 甲公司允诺第一年月工资为1500元,以后每年月工资比上一 什么叫“绿色化学”? H2,NA个H原子,那么H2的物质的量是如何计算? (1/4)在一次人才招聘会上,甲,乙两家公司开出的工资标准分别是;甲公司;第一年月工资1500元,以后每...(1/4)在一次人才招聘会上,甲,乙两家公司开出的工资标准分别是;甲公司;第一年月工资 什么是“绿色化学”? 牛顿发现"万有引力"的详细故事 在一次人才招聘会上,有A、B两家公司分别开出它们的工资标准:A公司允诺第一年月工某招聘会上有甲乙两公司 甲公司允诺第一年月工资为1500元,以后每年月工资比上一年月工资增加230元;乙公 比值表示的意义是什么 3.4NH3的物质的量为 mol 含有质子数为 个,含有电子数 NA 含有 NA个H,含有 个N原子?给的答案第二个是2NA 第三个是2NA.用的是0.2*10=2NA,请问这个步骤的依据是什么?请具体说明,讲的容易懂的给分~17g 在人才招聘会上,某公司承诺录用后第一年每月工资为3000元,以后每年的月工资比上一年月工资增加300元(1)如果某人在该公司连续工作n年,他在第n年后的月工资是多少?(2)如果这个人期望 用绳系着一个浸没在水中的实心金属球,金属球的体积是2*10-3m3,绳能承受的最大拉力是155N,将金属球慢慢向上提起.金属球在露出水面体积多大时,绳会断(水的阻力不计,P金属=8000Kg/m3,G=1 如果已知Na+的物质的量是5.00mol,则Na2CO2.10H2O的:求物质的量是多少mol 人造地球卫星近地点与远地点线速度比为什么不是半径反比的开根号? 食品企业实习总结 3000~4000字 0.2molH2中含有的氢原子个数为多少,6.02*10^22个NA+的物质的量为几MOL408+10^23 0.1mol 谁能给我解释下啊, 描写菊花的诗句和带有植物的成语 用绳系着一个浸没在水中的实心金属球,金属球的体积是2×10-3m³,绳能承受的最大拉力是155牛将金属球慢慢向上提起,金属球露出水面体积多大时,绳会断.(水的阻力不计,ρ金属=8×1000千克/m&# 过点(2,-2),且与双曲线x^2/2-y^2=1有共同的渐近线的双曲线的方程是? 描写秋天菊花的句子 求模具实习总结关于模具拆装及修理的文章 .. 注塑模具按结构分为哪几种?注塑模具浇口分为哪几种? 为什么要研究绿色化学 将一实心金属块用绳拴住挂在弹簧测力计上,在空气中弹簧测力计的示数是1.96N,再把金属块浸没在水中,这时弹簧测力计的示数为0.98N;求:这个金属球的密度是多大? 什么注塑模具属于双分型注塑模具
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘