Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. PostMessage发送WM_LBUTTONDOWN消息给QT窗口无效
Forum Updated to NodeBB v4.3 + New Features

PostMessage发送WM_LBUTTONDOWN消息给QT窗口无效

Scheduled Pinned Locked Moved Solved Chinese
7 Posts 2 Posters 5.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kingwang
    wrote on last edited by
    #1

    大家好, 遇到一个问题请教一下:
    向qt app的窗口发送消息, 模拟鼠标点击, 没有效果, 代码如下:

    void SimuClick(HWND hwnd, int x, int y)
    {
        LPARAM point = MAKELPARAM(x, y);
        ::PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, point);
        ::PostMessage(hwnd, WM_LBUTTONUP, 0, point);
    }
    

    如果遇到相似问题, 并有解决办法, 请不吝赐教, 谢谢!

    1 Reply Last reply
    0
    • jiancaiyangJ Offline
      jiancaiyangJ Offline
      jiancaiyang
      wrote on last edited by
      #2

      可以不用Windows原生的事件。直接使用Qt的Qt Test就可以模拟点击。看看Qt的帮助文档吧。

      我们自己的论坛:http://qtdream.com
      擅长三维角色仿真动画。

      K 1 Reply Last reply
      0
      • K Offline
        K Offline
        kingwang
        wrote on last edited by
        #3

        非常感谢, 我改为以下的代码, 但是依然没有效果:

        
        void SimuClick(HWND hwnd, int x, int y)
        {
        	SetForegroundWindow(hwnd);
        	QWindow *wnd = QWindow::fromWinId((WId)hwnd);
        	if (wnd != nullptr) {
        		QTest::mouseClick(wnd, Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), QPoint(x, y));
        		return;
        	}
        }
        

        可以确认, hwnd没有问题, 并且QWindow::fromWindId也返回了一个QWindow。 x,y坐标和在spy++里面看到的一样。

        参数没有错误, 就是没有效果。

        1 Reply Last reply
        0
        • jiancaiyangJ jiancaiyang

          可以不用Windows原生的事件。直接使用Qt的Qt Test就可以模拟点击。看看Qt的帮助文档吧。

          K Offline
          K Offline
          kingwang
          wrote on last edited by
          #4

          @jiancaiyang 我又做了实验, 自己用qt creator创建的窗口, 用PostMessage是可以点击成功的。
          难道现在无法实现模拟点击的app使用了什么特殊的办法来过滤掉模拟点击?

          1 Reply Last reply
          0
          • jiancaiyangJ Offline
            jiancaiyangJ Offline
            jiancaiyang
            wrote on last edited by
            #5

            最好不要用平台相关的本来Qt是跨平台的应用程序框架所以最好你制作的是跨平台的应用程序。

            我们自己的论坛:http://qtdream.com
            擅长三维角色仿真动画。

            K 1 Reply Last reply
            1
            • jiancaiyangJ jiancaiyang

              最好不要用平台相关的本来Qt是跨平台的应用程序框架所以最好你制作的是跨平台的应用程序。

              K Offline
              K Offline
              kingwang
              wrote on last edited by
              #6

              @jiancaiyang QTest::mouseClick也无效。。。

              1 Reply Last reply
              0
              • K Offline
                K Offline
                kingwang
                wrote on last edited by
                #7

                问题已找到, 由于windows 10的uipi保护的问题, 目标进程的级别高于我的程序, 所以PostMessage失败了, GetLastError返回ERROR_ACCESS_DENIED。 解决办法需要提高自己的级别, menifest文件中设置uiAccess=true。

                1 Reply Last reply
                1

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved