VBA中检测键盘控制键_第1页
VBA中检测键盘控制键_第2页
VBA中检测键盘控制键_第3页
VBA中检测键盘控制键_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VBA中检测键盘控制键(Shift Control Alt)状态来源:水文工具集分类:代码,博客标签:VBAVBA编写的程序中,经常需要提供一些功能键或者快捷键或者是辅助键,比如Shift|Control|Alt,以方便用户更方便使用你的程序。VBA中并没有相关函数来完成检测键盘控制键状态的函数,因此,必须使用Windows API函数GetKeyState。GetKeyState函数会返回某个指定按键的状态(按下或者未按下)。水文工具集提供VBA编写的3个相关函数,可以方便你在代码中使用,用以完成相关功能。IsShiftKeyDown:检测Shift控制键状态IsControlKeyDown:检测Control控制键状态IsAltKeyDown:检测Alt控制键状态上面的函数返回True或者False,当指定按键按下时返回True,而未按下时返回False。函数的定义如下:01.PublicFunctionIsShiftKeyDown( _02.OptionalLeftOrRightKeyAsLong= LeftKeyOrRightKey _03.)AsBoolean04.05.PublicFunctionIsControlKeyDown( _06.OptionalLeftOrRightKeyAsLong= LeftKeyOrRightKey _07.)AsBoolean08.09.PublicFunctionIsAltKeyDown( _10.OptionalLeftOrRightKeyAsLong= LeftKeyOrRightKey _11.)AsBoolean上面的函数都有一个可选的参数来指定是检测只有左边或者只有右边或者两者其一或者同时按下控制键,默认是左边右边两者其一,具体的可选参数有下面的类型:1.PublicConstBothLeftAndRightKeys = 02. BOTH left and right together3.PublicConstLeftKey = 14. LEFT key only5.PublicConstRightKey = 26. RIGHT key only7.PublicConstLeftKeyOrRightKey = 38. EITHER left or right or BOTH当然如果加以修改,一样可以用来其它功能键。VBA中检测键盘控制键(Shift Control Alt)状态具体源代码如下:01.=02. VBA中检测键盘控制键(Shift Control Alt)状态03.04.05.=06.OptionExplicit07.OptionCompare Text08.09.PrivateDeclareFunctionGetKeyStateLibuser32( _10.ByValnVirtKeyAsLong)AsInteger11.12.PrivateConstKEY_MASKAsInteger= &HFF80 decimal -12813.14.PrivateConstVK_LSHIFT = &HA015.PrivateConstVK_RSHIFT = &HA116.PrivateConstVK_LCONTROL = &HA217.PrivateConstVK_RCONTROL = &HA318.PrivateConstVK_LMENU = &HA419.PrivateConstVK_RMENU = &HA520.21.PrivateConstVK_LALT = VK_LMENU22.PrivateConstVK_RALT = VK_RMENU23.PrivateConstVK_LCTRL = VK_LCONTROL24.PrivateConstVK_RCTRL = VK_RCONTROL25.26.PublicConstBothLeftAndRightKeys = 027.PublicConstLeftKey = 128.PublicConstRightKey = 229.PublicConstLeftKeyOrRightKey = 330.31.PublicFunctionIsShiftKeyDown(OptionalLeftOrRightKeyAsLong= LeftKeyOrRightKey)AsBoolean32.DimResAsLong33.34.SelectCaseLeftOrRightKey35.CaseLeftKey36.Res = GetKeyState(VK_LSHIFT)AndKEY_MASK37.CaseRightKey38.Res = GetKeyState(VK_RSHIFT)AndKEY_MASK39.CaseBothLeftAndRightKeys40.Res = (GetKeyState(VK_LSHIFT)AndGetKeyState(VK_RSHIFT)AndKEY_MASK)41.CaseElse42.Res = GetKeyState(vbKeyShift)AndKEY_MASK43.EndSelect44.45.IsShiftKeyDown =CBool(Res)46.EndFunction47.48.PublicFunctionIsControlKeyDown(OptionalLeftOrRightKeyAsLong= LeftKeyOrRightKey)AsBoolean49.DimResAsLong50.51.SelectCaseLeftOrRightKey52.CaseLeftKey53.Res = GetKeyState(VK_LCTRL)AndKEY_MASK54.CaseRightKey55.Res = GetKeyState(VK_RCTRL)AndKEY_MASK56.CaseBothLeftAndRightKeys57.Res = (GetKeyState(VK_LCTRL)AndGetKeyState(VK_RCTRL)AndKEY_MASK)58.CaseElse59.Res = GetKeyState(vbKeyControl)AndKEY_MASK60.EndSelect61.62.IsControlKeyDown =CBool(Res)63.64.EndFunction65.66.PublicFunctionIsAltKeyDown(OptionalLeftOrRightKeyAsLong= LeftKeyOrRightKey)AsBoolean67.DimResAsLong68.69.SelectCaseLeftOrRightKey70.CaseLeftKey71.Res = GetKeyState(VK_LALT)AndKEY_MASK72.CaseRightKey73.Res = GetKeyState(VK_RALT)AndKEY_MASK74.CaseBothLeftAndRightKeys75.Res = (GetKeyState(VK_LALT)AndGetKeyState(VK_RALT)AndKEY_MASK)76.CaseElse77.Res = GetKeyState(vbKeyMenu)AndKEY_MASK78.EndSelect79.80.IsAltKeyDown =CBool(Res)81.82.EndFunction下面代码是调用了上面函数的一个测试,我们可以从VBA编辑器的调试窗口中看到相关控制键状态。01.SubTest()02.Application.OnTime Now + TimeSerial(0, 0, 2),ProcTest, ,True03.EndSub04.05.SubProcTest()06.Debug.PrintSHIFT KEY: , _07.LEFT: &CStr(IsShiftKeyDown(LeftKey), _08.RIGHT: &CStr(IsShiftKeyDown(RightKey), _09.EITHER: &CStr(IsShiftKeyDown(LeftKeyOrRightKey), _10.BOTH: &CStr(IsShiftKeyDown(BothLeftAndRightKeys)11.12.Debug.PrintALT KEY: , _13.LEFT: &CStr(IsAltKeyDown(LeftKey), _14.RIGHT: &CStr(IsAltKeyDown(RightKey), _15.EITHER: &CStr(IsAltKeyDown(LeftKeyOrRightKey), _16.BOTH: &CStr(IsAltKeyDown(BothLeftAndRightKeys)17.18.Debug.PrintCTRL KEY: , _19.LEFT: &CStr(IsControlKeyDown(LeftKey), _20.RIG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论