【求助】pb快捷键问题

sensenren 2011-09-15 08:57:25
我想实现这样的功能:在pb中写一个函数(或者事件)监控用户敲击键盘的动作,根据用户按下键盘相应的键,实现相应的功能。难点是当焦点不在pb程序上时也能监控键盘动作。例如,用户在聊qq,当前焦点在qq聊天窗口,这时,用户按下F10键,pb程序捕捉到这个动作,自动切换到pb程序并打开某个pb窗口。

不知道目前pb是否支持这种快捷键?请各位指教。
...全文
689 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyoinge 2011-09-18
  • 打赏
  • 举报
回复
改成
//④*****在窗口的other事件编写脚本:
//处理系统热键
IF wparam = atomid and atomid > 0 THEN //表示按下open中定义的热键 Ctrl + F
//处理
messagebox('hello','你好!')
END IF


wag_enu 2011-09-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sensenren 的回复:]
引用 4 楼 wag_enu 的回复:
绑定。。。


怎么绑定呢?望指教
[/Quote]

这个问题我没研究过,LZ 误解了,我留个印以后便于翻贴而已。。。
wlj768 2011-09-18
  • 打赏
  • 举报
回复
学习一下
sensenren 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wag_enu 的回复:]
绑定。。。
[/Quote]

怎么绑定呢?望指教
sensenren 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yyoinge 的回复:]
C/C++ code
//首先调用api函数RegisterHotKey为窗口注册热键。
//当热键按下后,windows发送wm_hotkey消息给窗口,
//这时我们可以在PB窗口的other事件中处理。

//①*****定义窗口实例变量:
long atomid //热键ID号,通过GlobalAddAtom分配,注册及注销热键时都需要用到
constant integer……
[/Quote]

这种方法我试过了,有问题。假如在other事件中就写一个messagebox('hello','你好!'),那么在打开窗口时程序就会执行5次左右的messagebox,提示5次“你好”,不知道这个问题怎么解决。
还有就是焦点在其他程序上时,pb程序监测到了热键,怎么切换回pb程序来?
wag_enu 2011-09-16
  • 打赏
  • 举报
回复
绑定。。。
yyoinge 2011-09-16
  • 打赏
  • 举报
回复
其他按键键值
//键盘常用ASCII码 
//~`键
Constant integer VK_BackQuote = 192
//_-键
Constant integer VK_Dash = 189
//+=键
Constant integer VK_Equal = 187
//{[键
Constant integer VK_LeftBracket = 219
//}]键
Constant integer VK_RightBracket = 221
//|\键
Constant integer VK_BackSlash = 220
//?/键
Constant integer VK_Slash = 191
//:;键
Constant integer VK_SemiColon = 186
//"'键
Constant integer VK_Quote = 222
//<,键
Constant integer VK_Comma = 188
//>.键
Constant integer VK_Period = 190


//ESC键
Constant integer VK_ESCAPE = 27
//回车键
Constant integer VK_Enter = 13
//TAB键
Constant integer VK_TAB = 9
//Caps Lock键
Constant integer VK_CapsLock = 20
//Shift键
Constant integer VK_SHIFT = 16
//Ctrl键
Constant integer VK_CONTROL = 17
//Alt键
Constant integer VK_MENU = 18
//空格键
Constant integer VK_Spacebar = 32
//退格键
Constant integer VK_BACK = 8
//左徽标键
Constant integer VK_LWIN = 91
//右徽标键
Constant integer VK_RWIN = 92
//鼠标右键快捷键:
Constant integer VK_APPS = 93
//
//Insert键
Constant integer VK_INSERT = 45
//Home键
Constant integer VK_HOME = 36
//PageUp
Constant integer VK_PageUp = 33
//PageDown
Constant integer VK_PageDown = 34
//End键
Constant integer VK_END = 35
//Delete键
Constant integer VK_DELETE = 46
//
//方向键(←)
Constant integer VK_LEFTArrow = 37
//方向键(↑)
Constant integer VK_UPArrow = 38
//方向键(→)
Constant integer VK_RightArrow = 39
//方向键(↓)
Constant integer VK_DOWNArrow = 40
//F1键
Constant integer VK_F1 = 112
//F2键
Constant integer VK_F2 = 113
//F3键
Constant integer VK_F3 = 114
//F4键
Constant integer VK_F4 = 115
//F5键
Constant integer VK_F5 = 116
//F6键
Constant integer VK_F6 = 117
//F7键
Constant integer VK_F7 = 118
//F8键
Constant integer VK_F8 = 119
//F9键
Constant integer VK_F9 = 120
//F10键
Constant integer VK_F10 = 121
//F11键
Constant integer VK_F11 = 122
//F12键
Constant integer VK_F12 = 123
//
//
//Num Lock键
Constant integer VK_NUMLOCK = 144
//小键盘0
Constant integer VK_NUMPAD0 = 96
//小键盘1
Constant integer VK_NUMPAD1 = 97
//小键盘2
Constant integer VK_NUMPAD2 = 98
//小键盘3
Constant integer VK_NUMPAD3 = 99
//小键盘4
Constant integer VK_NUMPAD4 = 100
//小键盘5
Constant integer VK_NUMPAD5 = 101
//小键盘6
Constant integer VK_NUMPAD6 = 102
//小键盘7
Constant integer VK_NUMPAD7 = 103
//小键盘8
Constant integer VK_NUMPAD8 = 104
//小键盘9
Constant integer VK_NUMPAD9 = 105
//小键盘.
Constant integer VK_DECIMAL = 110
//小键盘*
Constant integer VK_MULTIPLY = 106
//小键盘+
Constant integer VK_ADD = 107
//小键盘-
Constant integer VK_SUBTRACT = 109
//小键盘/
Constant integer VK_DIVIDE = 111
//
//
//Pause Break键
Constant integer VK_PAUSE = 19
//printscreen
constant integer VK_PRINTSCREEN = 44
//Scroll Lock键
Constant integer VK_SCROLL = 145


constant integer MOD_ALT = 1 //ALT键
constant integer MOD_CONTROL = 2 //CTRL键
constant integer MOD_SHIFT = 4 //SHIFT键
constant integer MOD_WIN = 8 //WIN键

yyoinge 2011-09-16
  • 打赏
  • 举报
回复
//首先调用api函数RegisterHotKey为窗口注册热键。
//当热键按下后,windows发送wm_hotkey消息给窗口,
//这时我们可以在PB窗口的other事件中处理。

//①*****定义窗口实例变量:
long atomid //热键ID号,通过GlobalAddAtom分配,注册及注销热键时都需要用到
constant integer MOD_NONE = 0 //没有组合键
constant integer MOD_ALT = 1 //ALT键
constant integer MOD_CONTROL = 2 //CTRL键
constant integer MOD_SHIFT = 4 //SHIFT键

//②*****定义API函数:
FUNCTION Integer GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR "GlobalAddAtomA"
FUNCTION ulong RegisterHotKey(ulong hwnd,ulong id,ulong fsModifiers,ulong vk) LIBRARY "user32.dll"
FUNCTION ulong UnregisterHotKey(ulong hwnd,ulong id) LIBRARY "user32.dll"

//③*****在窗口的open事件编写脚本:
//注册热键
long ll_RC
string ls_atomid
ls_atomid = 'myatomid' //热键标示名称,注册多个热键时,必须保证不重复
atomid = GlobalAddAtom(ls_atomid) //得到惟一的ID,保证不和其他应用程序发生冲突
//注册的热键为Ctrl+F ,70为'F'
//如果组合键,可用MOD_CONTROL + MOD_ALT等
ll_RC = RegisterHotKey(Handle(this), atomid, MOD_CONTROL , 70)

//热键注册冲突
if ll_RC = 0 then messagebox("Error!","热键注册错误")

//④*****在窗口的other事件编写脚本:
//处理系统热键
IF wparam = atomid THEN //表示按下open中定义的热键 Ctrl + F
//处理
messagebox('hello','你好!')
END IF

//⑤*****在窗口的close事件编写注销热键的脚本:
if atomid > 0 then unregisterhotkey(handle(this), atomid)


xuam 2011-09-16
  • 打赏
  • 举报
回复
简单的说就是一键换屏是吧,
参考其他软件,在应用程序里做个timer侦测,然后调用API函数,检测按下键盘的事件.

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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