软件中弹出模态对话框后的快捷键的处理方式
By
admin
at 2021-09-10 • 0人收藏 • 848人看过
情景:
软件中有快捷键, 某种情况下弹出了模态对话框 , 但是此时仍然需要快捷键有效.
问题是: 模态对话框会拦截窗体的消息流通 , 此时快捷键会无效.如果用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();登录后方可回帖