【问题标题】:X,Y,W,H of external window in QTQT中外部窗口的X,Y,W,H
【发布时间】:2019-07-23 06:04:00
【问题描述】:

我正在学习编程,但在 Qt/Windows 中查找位置和分辨率数据时遇到了麻烦。我有可以做到这一点的 c++ 函数。

这是我正在使用的 Qt 代码

void Edge_Window::on_pushButton_getInfo_6_clicked()
{
    HWND h = FindWindow(NULL, TEXT("Edge Organizer"));
    LPRECT rct;
    GetWindowRect(h, rct);
    qDebug() << "X = " << rct->left;
    qDebug() << "Y = " << rct->top;
    qDebug() << "Width = " << rct->right - rct->left;
    qDebug() << "Height = " << rct->bottom - rct->top;
}

不幸的是,我从调试中得到的唯一答案是:

X =  1693732235
Y =  3465
Width =  644133493
Height =  79843420

无论我的屏幕位于何处,这都是响应。我试过GetForegroundWindow(),但它只是崩溃了。我的目标是获取标题、类、坐标和分辨率等信息,并能够在 Windows 中的外部程序上设置它们。

【问题讨论】:

  • 你在FindWindow()函数调用后检查HWND h的值是多少?它可以为 NULL(未找到 windows),因此您的矩形将无法正确初始化。
  • 我收到 0x2350a8a 的值,每次我重新启动程序时都会发生变化,所以我会假设发生了某种通信
  • Qt 似乎是一个阅读鲱鱼。您仅使用 Win32 界面。这是正确的,当然。你不知道另一个窗口是否是用 Qt 制作的,只是它是一个 Win32 窗口。

标签: c++ qt winapi


【解决方案1】:

在您的代码中,rct 是指向 RECT 的未初始化指针

你想要这个:

RECT rct;
GetWindowRect(h, &rct);

由于rct不再是指针而是RECT,所以你还需要将所有rct-&gt;xxx改为rct.xxx

你原来的代码是这样的:

RECT *rct;   // now it's a bit more obvious that rct is an uninitialized pointer
GetWindowRect(h, rct);

【讨论】:

  • 我是这个论坛的新手,它不是那么直观。我能够根据您的要求解决问题并更新一些部分以正确指向 rect。(rct->top 到 rct.top)
  • @DavidArmijo 是的,将指针隐藏在 typedefs 后面并不是最好的主意。每次在 Windows 中看到 LPxxx 时,实际上意味着“指向 xxx 的指针”。
猜你喜欢
  • 2021-07-18
  • 2020-04-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多