介绍
这期内容当中小编将会给大家带来有关使用Qt实现进程界面之间的鼠标焦点切换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>需求强>
有三个软件A, B,一个是主要软件,B, C是辅助软件。
⑴在使用一个的过程中,按N键可以呼出软件B,按M键可以呼出软件C再次按下可以隐藏它们。
⑵在软件B, C都存在的条件下,按J键可以实现鼠标焦点以一个→B→C的顺序在软件之间切换。
<强>分析
强>
需求(1)
在按键事件中对M或N键做处理,当对应键按下时,首先判断B.exe或C。exe是否存在,如果不存在则执行对应exe,否则显示或隐藏它们。这里不再赘述。
需求(2)
以从一个切到B为例,。其他类似。
<强>定义通用变量
强>
主要定义软件端口,消息类型,发送者类型。后面将建立三个Qt工程,MainDlg代表软件,罗盘代表软件B, chatlist代表软件c .定义如下:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 作者:张志浩 邮件:791745123 @qq.com 时间:2019-1-5 功能: 通用变量,宏定义头文件 DESTPORT:目标主机端口 SENDERTYPE:发送者类型 MSGTYPE:消息类型 版本:1.0 v * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */# pragma>/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 作者:张志浩 邮件:791745123 @qq.com 时间:2019-1-5 功能: 报文基类 版本:1.0 v * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */# pragma>//获取自身窗口句柄并置前 HWND HWND=: FindWindow (NULL, L" compass"); ::窗体提前(hwnd);//获取置前窗口句柄(该步骤可省略,直接用上一步获得的句柄) HWND hForeWnd=: GetForegroundWindow ();//获取当前工作线程ID DWORD dcurid=: GetCurrentThreadId ();//获取置前窗口的线程ID DWORD dfoid=: GetWindowThreadProcessId (hForeWnd, NULL);//依附 ::AttachThreadInput (dcurid dfoid,真的);//设置鼠标位置 QRect矩形=这→几何(); SetCursorPos (rect.left () + 200, rect.top () + 200);
<强> 强>
<强>整体流程梳理强>
以从MainDlg切往指南针为例,此时三个软件都已经打开并显示在桌面。
1按J键进入MainDlg键盘事件,发送消息到罗盘
空白MainDlg: keyPressEvent (QKeyEvent *事件) { 开关(事件→键()) { 案例Qt:: Key_J: { CInfoBase m_sendMsg; m_sendMsg.infoType=MSG_CHANGEMOUSEPOS; m_sendMsg。senderType=PROCESS_MAINDLG; m_myudp.SendData ((char *), m_sendMsg, sizeof (m_sendMsg) PORT_COMPASS,“127.0.0.1"); 打破; } 默认值: { } } }
2罗盘收到UDP消息,切换焦点
空白CUdpMsgBase: DataHanding (const char *数据) { int msgType=MSG_NONE; ::memcpy(和msgType、数据运算符(int)); 如果(msgType==MSG_NONE) { } 如果(msgType==MSG_CHANGEMOUSEPOS) { 发出changepos (); } 返回; }
进入槽函数
空白MainDlg: changePos () { HWND HWND=: FindWindow (NULL, L" MainDlg"); ::窗体提前(hwnd); HWND hForeWnd=: GetForegroundWindow (); DWORD dcurid=: GetCurrentThreadId (); DWORD dfoid=: GetWindowThreadProcessId (hForeWnd, NULL); ::AttachThreadInput (dcurid dfoid,真的); QRect矩形=这→几何(); SetCursorPos (rect.left () + 200, rect.top () + 200); }
<>强效果强>
上述就是小编为大家分享的使用Qt实现进程界面之间的鼠标焦点切换了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。