请教pb一个窗口注册多个热键的问题

herofour444 2014-10-06 09:14:04
想注册F1,F2,A,Q,S等热键,分别对应不同的功能。

//定义全局变量

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"
//定义局部变量
Long AtomID[7]
//窗口open事件
//注册热键
Integer li_ret,i
String ls_dt, ls_err
for i = 1 To 7
Sleep(0.1)
ls_dt = "AtomId" + String(i) + String(Today(),"yyyy-mm-dd hh:mm:ss:fff")
// messagebox("",ls_dt)
AtomId[i] = GlobalAddAtom(ls_dt)
// messagebox("",string(AtomId[i]))
li_ret = RegisterHotKey(Handle(This), AtomId[i], 0 , 111 + i)
If li_ret = 0 Then ls_err += " F" + String(i)
Next
If ls_err <> '' Then MessageBox( "警告", "功能键"+ls_err+" 注册失败!" )
//窗口other事件
Integer i
If Message.Number = 786 Then
For i = 1 To 7
//messagebox("wp",string(wParam))
// messagebox("ato",string(AtomId[i]))
If wParam = AtomId[i] Then
of_set_hotkey('F'+String(i))
exit
End If
Next
End If
//定义的函数
Choose Case as_keyName
Case "F1"
messagebox("",'F1')
case "F2"
messagebox("",'F2')
case "F3"
messagebox("",'F3')
End Choose


现在的问题是,在open事件
AtomId[i] = GlobalAddAtom(ls_dt)
获取的ATomid[i] 所有的值都一样。
请问为何。
...全文
166 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
herofour444 2014-10-06
  • 打赏
  • 举报
回复
ok,值变了,明天上班测试下,结贴谢谢
A啦Dbit 2014-10-06
  • 打赏
  • 举报
回复
引用 2 楼 xiajinxian 的回复:
PB10以下声明如下:FUNCTION boolean RegisterHotKey(long hwnd,long id,long fsModifiers,long vk) LIBRARY "user32.dll" alias for "RegisterHotKey;ansi" Function boolean UnregisterHotKey(long hwnd , long id ) library 'user32' alias for 'UnregisterHotKey;ansi' FUNCTION long GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR "GlobalAddAtomA;ansi" FUNCTION long GlobalDeleteAtom(long nAtom ) Library "kernel32" Alias for "GlobalDeleteAtom;ansi"
写错了,是PB10以上,我是这样用的 long ll_rc int i for i=1 to upperbound(is_hotkey[]) if ipo_hotkey[i]<>lpo_child then continue; is_atom[i]=string(Handle(lw_panret))+'_'+classname(lpo_child)+'_'+is_hotkeyflags[i]+'_'+is_hotkey[i] //可以任意定义,是识别这个ID的关键字 il_atom[i]=GlobalAddAtom(is_atom[i])//获得注册成功的唯一ID //Ctrl为2,Alt为1,Shift为4 if RegisterHotKey(Handle(lw_panret), il_atom[i],i_hotkeyflags[i], asc(is_hotkey[i]))=false then // GlobalDeleteAtom(il_atom[i]) il_atom[i]=0 messagebox('',is_hotkeyflags[i]+'_'+is_hotkey[i]+':Faild!') end if next
A啦Dbit 2014-10-06
  • 打赏
  • 举报
回复
PB10以下声明如下:FUNCTION boolean RegisterHotKey(long hwnd,long id,long fsModifiers,long vk) LIBRARY "user32.dll" alias for "RegisterHotKey;ansi" Function boolean UnregisterHotKey(long hwnd , long id ) library 'user32' alias for 'UnregisterHotKey;ansi' FUNCTION long GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR "GlobalAddAtomA;ansi" FUNCTION long GlobalDeleteAtom(long nAtom ) Library "kernel32" Alias for "GlobalDeleteAtom;ansi"
herofour444 2014-10-06
  • 打赏
  • 举报
回复
在other事件中,每次提示的都是F1, 想做到F1,F2等不同的热键,分别对应不同的事件。 可是ATomid[i] 中所有的值都是-16267

1,079

社区成员

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

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