软件中弹出模态对话框后的快捷键的处理方式
By
admin
at 2021-09-10 • 0人收藏 • 720人看过
情景:
软件中有快捷键, 某种情况下弹出了模态对话框 , 但是此时仍然需要快捷键有效.
问题是: 模态对话框会拦截窗体的消息流通 , 此时快捷键会无效.如果用key.hook是可以拦截全局按键, 但是会影响到其他软件或文件的按键操作.
解决办法:
这里仍然可以使用key.hook来设置快捷键 , hook里判断前置窗口是主窗体还是弹窗(判断弹窗的父窗口仍然是主窗体), 然后操作.
import win.ui; /*DSG{{*/ mainForm = win.form(text="模态对话框快捷键测试";right=397;bottom=318) mainForm.add( button={cls="button";text="弹出模态对话框";left=12;top=222;right=387;bottom=307;db=1;dl=1;dr=1;z=1}; edit={cls="edit";left=12;top=11;right=387;bottom=206;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=2} ) /*}}*/ var index = 1; import key.hook; mainForm.hook = key.hook(); mainForm.hook.proc = function(msg,vkcode,scancode,injected,flags,timeStamp,extraInfo){ if( injected ) return; //模拟鼠标不处理 if( win.getForeground() != mainForm.hwnd and mainForm.hwnd != win.getParentOwner(win.getForeground())) return ; select(msg) { case 0x100/*_WM_KEYDOWN*/ ,0x104/*_WM_SYSKEYDOWN*/ { select(vkcode) { case 0x26/*_VK_UP*/ { mainForm.edit.appendText(index++'顶顶顶顶顶_VK_UP'++'\r\n'); index++; return true; } case 0x25/*_VK_LEFT*/ { mainForm.edit.appendText(index++'踩踩踩踩踩_VK_LEFT'++'\r\n'); index++; return true; } } } } } mainForm.button.oncommand = function(id,event){ mainForm.msgboxTest("测试快捷键"); } mainForm.show(); return win.loopMessage();
登录后方可回帖