怎样用API定义多个快捷键

南山明月 2003-09-29 11:22:44
那就是无论调用它的程序是在前台还是在后台运行,它都能够检测键盘上某组合键是否被按下(即一旦调该函数,它在整个系统范围内都有效)
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingtian2008 2003-12-07
  • 打赏
  • 举报
回复
up
online 2003-11-13
  • 打赏
  • 举报
回复
Option Explicit
' 声明API函数
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
' 声明结构
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type Msg
hWnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
' 声明常数
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312

Private HotKey_Flg As Boolean

Private Sub Form_Load()
Dim Message As Msg

'注册 Ctrl+Shift+I和Ctrl+Shift+K 为热键
RegisterHotKey Me.hWnd, &HBFFF&, MOD_CONTROL + MOD_SHIFT, vbKeyI
RegisterHotKey Me.hWnd, &HBFFA&, MOD_CONTROL + MOD_SHIFT, vbKeyK
Me.Show
'等待处理消息
HotKey_Flg = False
Do While Not HotKey_Flg
'等待消息
WaitMessage
'检查是否热键被按下
If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
'打开计算器程序
Shell "calc.exe", vbNormalFocus
End If
'转让控制权,允许操作系统处理其他事件
DoEvents
Loop
End Sub

Private Sub Form_Unload(Cancel As Integer)
HotKey_Flg = True
'撤销热键的注册
Call UnregisterHotKey(Me.hWnd, &HBFFF&)
End Sub


南山明月 2003-11-13
  • 打赏
  • 举报
回复
怎样用API定义多个快捷键?你只定义了一个快捷键呀
pigpag 2003-10-01
  • 打赏
  • 举报
回复
可以直接运行,千万不要“暂停”程序。十之八九VB6就会突然关掉
rainstormmaster 2003-09-30
  • 打赏
  • 举报
回复
上面的程序使用了SubClassing,调试的时候,记得先存盘,最好编译之后再运行
南山明月 2003-09-29
  • 打赏
  • 举报
回复
使用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的定义取消掉。
aha99 2003-09-29
  • 打赏
  • 举报
回复
给你一个完整的例子
模块:
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 Const ShowHotKey = &H44EE
Public preWinProc As Long
Public Modifiers As Long, uVirtKey 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 = ShowHotKey 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 "
Form1.Show
End If
End If
End If
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
窗体:
Option Explicit
Sub Form_Load()
Dim ret As Long
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
Modifiers = MOD_ALT + MOD_SHIFT + MOD_CONTROL
uVirtKey = vbKeyZ
ret = RegisterHotKey(Me.hwnd, ShowHotKey, Modifiers, uVirtKey)
Me.Hide
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
Call UnregisterHotKey(Me.hwnd, ShowHotKey)
End Sub

没写注释,自己看看吧
32位汇编级调试器Ollydbg2.01简繁中文版 : Ollydbg2.01版是一个由Oleh Yuschuk2013年9月24发布的32位汇编级调试器,32位汇编级调试器Ollydbg2.01简繁中文版由正思软件工作室翻译发布。 此中间版开始支持插件和自定义快捷键. OllyDbg的是一个32位汇编级Microsoft的Windows的分析调试器。二进制代码分析的重点,特别是在源代码不可用的情况下非常有用。 特别亮点: 直观的用户界面,没有隐藏的命令. 代码分析 - 跟踪寄存器,确认过程,循环,API调用,分支,表,常量和字符串 直接运行和调试的DLL 对象文件扫描 - 从对象文件和库位于例程 允许用户定义的标签,备注和功能描述 识别在Borland ®格式的调试信息 会话之间保存的补丁程序,并将其写入可执行文件,并更新链接地址 开放式架构 - 支持许多第三方插件 无需安装 - 没有注册表或系统目录中的垃圾 调试多线程应用程序 附加到正在运行的程序 配置反汇编器,支持MASM的和IDEAL的格式 MMX,3DNOW!和SSE数据类型和说明,包括速龙Athlon扩展 完整的Unicode支持 动态识别ASCII和Unicode字符串 - 在Delphi格式! 识别复杂的代码结构,如呼叫跳转到程序 解码1900多个标准的API和400 C函数调用 提供来自外部的帮助文件的API函数的上下文敏感的帮助 设置条件,日志记录,内存和硬件断点 跟踪程序的执行,记录已知函数的参数 显示调整信息 动态跟踪堆栈帧 搜索不精确的命令和摸糊的二进制序列 搜索整个分配的内存 查找引用常量或地址范围 审查和修改内存,设置断点和暂停运行方案 组装成二进制形式的最短的命令 从软盘启动 很多,很多!
本书第五版已经经过全面地修订和扩展,涵盖了构建当今Web2.0应用程序所需的JavaScript技术。本书不仅是一本实例驱动的程序员指南,同时也是一本可以摆在桌边随时查阅的参考手册,它以全新的章节阐述了有效使用Javascript脚本所需要知道的一切,包括:
  脚本化的HTTP 和 Ajax;XML处理;使用标记的客户端图形;JavaScript的命名空间——编写复杂程序时所必不可少的;嵌入到Java应用程序中的类、闭包、持久层、Flash和JavaScript 第一部分详细阐述了JavaScript语言的核心内容。如果你是JavaScript新手,它将教授你这门语言;如果你已经是一个JavaScript程序员,第一部分将能磨练你的技艺并加深你对这门语言的理解。 第二部分阐述了在特定浏览器提供的脚本环境下,如何使用JavaScript进行DOM编程。同时运用许多精巧的实例,广泛且深入地阐明了JavaScript如何应用于客户端程序:;为HTML文档生成表格内容;展示DHTML的活力;自动化表单验证;绘制动态饼状统计图;创建可拖曳的HTML元素;为Web应用程序定义键盘快捷键;创建有Ajax特性的工具提示;在Ajax应用中使用XPath和XSLT加载XML文档对象;以及更多 第三部分全面介绍了JavaScript语言的核心。讲述了在JavaScript 1.5和ECMAScript version 3中定义的每一个类、对象、构造器、方法、函数、属性和常量。 第四部分是关于客户端JavaScript的详细参考,涵盖了遗留的Web浏览器API、标准DOM2 API以及新兴的标准,例如XMLHttpRequest对象和标记。本书已经成为全球超过300,000的JavaScript程序员构建JavaScript应用程序不可或缺的参考书籍。
功能最强大的Jass编辑器更新 1.4.3.3 -> 1.4.3.4[!] 修正了当字符串或注释中存在括号时括号提示的显示错误问题;[!] plugin(插件)菜单不再可以使用任意热键;[!] 修正了Shortcut Manager的程序运行期间内存泄露问题;[!] 修正了打开某些地图文件时Global List中Triggers可能产生严重错误的问题;[+] 增加了提示无对应的括号的提示(该功能默认关闭);[+] 保存脚本文件到地图文件中时自动删除"(attributes)"文件;[+] 在config.exe中增加了关联地图类型文件(*.W3M, *.W3X)功能(使用该功能时请选择“否”,否则将覆盖掉原来使用WE打开的关联方式);[+] Shortcut Manager的热键选择列表中去除plugin菜单已使用的热键; 将UTF8<->ASC功能移动到Format All/Selected Text菜单下; 提高了文件较长时的一些相关功能的效率。文件说明JassShopPro.exe - 主程序config.exe - 设置程序。许多JSP有许多强大的功能需要调用该文件来设定MpqLib.dll - 用于直接读取地图中的jass文件的动态链接库(Thx to Soar)CHS.lng - 简体中文语言包。建议每次更新都覆盖掉default.tmt - 模板文件。这是一个文本文件,可以根据该文件内容(挺容易懂的)设计自定义的模板菜单,支持快捷键和一些控制命令。可以通过config.exe定义自己的模板菜单文件common.j, blizzard.j, common.ai - 目前为1.18的API文件,主程序至少需要common.j文件pjass.exe - 用于语法检查,无此文件,主程序中的语法检查将不可用jsp.ini - JassShopPro.exe会自动创建该文件,用于保存设置,无此文件时config.exe不可用。当首次运行JassShopPro的时候,如果没有找到这个文件,程序会自动搜索并提问是否使用语言包(语言包有特殊的设定,如果是某些英文版改的中文版xp的或者新加坡中文版之类,不会自动提问CHS.lng)功能 语法高亮 根据jass2语言定义了十几种字体,可以通过config.exe自己设定字体颜色、风格,以及高亮规则 智能大小写转换 可自动转换大小写,并能自动判断是否进行大小写转换,例如输入 “location”,此时如果再输入“(”,程序将认为它是函数,自动转换成“Location(”,否则认为是类型,不进行大小写转换 快速函数搜索 可以方便快捷的查找API函数、常量、变量、类型。可以选择是否从名称第一个字母开始匹配,是否注意大小写,该函数的返回类型或变量、常量的类型。搜索按钮将自动在所有函数/变量常量/类型中查找。按回车或者空格会将当前词汇添加到下拉菜单中。单击其中条目,下面的代码框中将显示源代码,双击搜索列表中项目,将自动插入代码 标准的MDI(多文档界面)操作 Ctrl+F4关闭一个文档,Ctrl+Tab切换文档 功能强大的搜索功能 有丰富的选项,在主界面编辑时会智能填入搜索内容。如选中代码不含有换行符,搜索对话框中将自动填入选中的文本,超过一行则会自动将搜索范围变为 Selected Text (选中文本) 书签功能 每个编辑中的文本可以定义10个书签 当前代码结构 左侧的列表会显示全部的全局变量、函数、全局Trigger。红色的变量代表常量,红色的函数代表常函数,红色的Trigger代表缺乏全局变量声明的T。目前Trigger列表只是列出来,没有任何实际功能。对于变量和函数,左键单击在代码框中显示代码,右键单击跳转到声明位置,双鞑迦耄孛旖菁麱2 )会在整个编辑文本中改名 强大的模板引擎 具体可以参照Default.tmt文件,可以自定义类别,自定义快捷键,做一些比较复杂的功能 语法检查 该功能需要pjass.exe文件。可以在检查结果中双击条目跳转到出错位置 测试地图 现在程序已经支持直接打开地图文件中的war3map.j或者scripts\war3map.j文件,或者直接储存到地图文件中。如果正在编辑的是地图文件,可立刻使用WE的标准操作快捷键Ctrl+F9进行地图测试 插入颜色 可以直观的选择颜色,然后转换成jass的颜色代码插入到文本中 强大的文本缩进 可通过config.exe设置tab键的宽度,编辑代码时也会根据关键词进行缩进。菜单中提供了缩进、去除缩进、增加缩进功能,自动根据是否选中文本对选中代码或者全文进行缩进处理,方便阅读 与WE通信 可以直接与WE的文本编辑框通信,相互复制代码 UTF-8 <-> ASC 人性化的操作 主程序支持参数,可以通过config.exe在注册表中注册文件类型,从而双击打开相关类型文件。如果已经有一个JassShopPro在运行中,再次双击注册为用JSP打开的类型的文件时,将在已启动的文档中打开文件。同样,支持拖放操作,可以直接将文件拖到窗口中打开 自动完成功能 输入“set ”,将自动显示本地变量与全部全局变量;输入“call ”,则会自动显示当前代码前面的全部函数。输入一个有效的函数名称并按“(”时,将显示该函数参数的提示(或者按F1) 丰富的快捷键 大多数有用的功能都提供了快捷键。 Ctrl+鼠标左键单击(F2):如果大小写不正确,会自动转换大小写。如果被点中的是当前文档的全局变量、常量或者函数,则会自动跳转到声明位置 双击:可在代码框中得到相关的源代码 压缩代码 可以进行一些简单的代码压缩处理,可以处理:去除注释,压缩全局变量、常量名称,压缩函数名称,去除无用回车,去除缩进等 自定义菜单快捷键 主程序中的Shortcut Manager可以方便帮助您设置菜单中的快捷键,方便需要 plug-in 支持插件程序,可以通过config.exe方便的管理已安装的插件。

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧