使用Qt实现进程界面之间的鼠标焦点切换

  介绍

这期内容当中小编将会给大家带来有关使用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实现进程界面之间的鼠标焦点切换

上述就是小编为大家分享的使用Qt实现进程界面之间的鼠标焦点切换了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

使用Qt实现进程界面之间的鼠标焦点切换