C++ 如何在C++;?
有没有办法在Linux下获取当前聚焦窗口的几何图形?我只需要窗口的位置(x和y)和大小(宽度和高度)就可以了,窗口当前有焦点或者在桌面上C++ 如何在C++;?,c++,linux,qt,C++,Linux,Qt,有没有办法在Linux下获取当前聚焦窗口的几何图形?我只需要窗口的位置(x和y)和大小(宽度和高度)就可以了,窗口当前有焦点或者在桌面上 我想在我的QT应用程序中使用此信息来截屏此窗口。显然,解决此问题的第一步是确定当前处于焦点的窗口。为此,您可以使用Xlib的函数。在此之后,使用获取窗口的位置和大小(甚至是有关窗口的更多信息)。显然,解决此问题的第一步是确定当前处于焦点的窗口。为此,您可以使用Xlib的函数。之后,使用获取窗口的位置和大小(甚至更多关于窗口的信息)。谢谢@Striezel,您的
我想在我的QT应用程序中使用此信息来截屏此窗口。显然,解决此问题的第一步是确定当前处于焦点的窗口。为此,您可以使用Xlib的函数。在此之后,使用获取窗口的位置和大小(甚至是有关窗口的更多信息)。显然,解决此问题的第一步是确定当前处于焦点的窗口。为此,您可以使用Xlib的函数。之后,使用获取窗口的位置和大小(甚至更多关于窗口的信息)。谢谢@Striezel,您的反馈为我指明了正确的方向。在研究了您的解决方案后,我发现了以下帖子: 稍微调整一下@Doug的答案,我得到了如下结果,似乎如预期的那样工作:
Window getToplevelParent(Display* display, Window window)
{
Window parentWindow;
Window rootWindow;
Window* childrenWindows;
unsigned int numberOfChildren;
while (1) {
if (XQueryTree(display, window, &rootWindow, &parentWindow, &childrenWindows,
&numberOfChildren) == 0) {
qCritical("ImageGrabber::getToplevelParent: XQueryTree Error");
return 0;
}
if (childrenWindows) {
XFree(childrenWindows);
}
if (window == rootWindow || parentWindow == rootWindow) {
return window;
} else {
window = parentWindow;
}
}
}
QRect ImageGrabber::getActiveWindowRect()
{
Display* display = XOpenDisplay(NULL);
Window focusWindow, parentOfFocusedWindow;
XWindowAttributes attrributes;
int revert;
XGetInputFocus(display, &focusWindow, &revert);
parentOfFocusedWindow = getToplevelParent(display, focusWindow);
if (!parentOfFocusedWindow) {
qCritical("ImageGrabber::getActiveWindowRect: Unable to get window, returning screen.");
return getCurrectScreenRect();
}
XGetWindowAttributes(display, parentOfFocusedWindow, &attrributes);
return QRect(attrributes.x, attrributes.y, attrributes.width, attrributes.height);
}
谢谢@Striezel,你的反馈给了我正确的方向。在研究了您的解决方案后,我发现了以下帖子: 稍微调整一下@Doug的答案,我得到了如下结果,似乎如预期的那样工作:
Window getToplevelParent(Display* display, Window window)
{
Window parentWindow;
Window rootWindow;
Window* childrenWindows;
unsigned int numberOfChildren;
while (1) {
if (XQueryTree(display, window, &rootWindow, &parentWindow, &childrenWindows,
&numberOfChildren) == 0) {
qCritical("ImageGrabber::getToplevelParent: XQueryTree Error");
return 0;
}
if (childrenWindows) {
XFree(childrenWindows);
}
if (window == rootWindow || parentWindow == rootWindow) {
return window;
} else {
window = parentWindow;
}
}
}
QRect ImageGrabber::getActiveWindowRect()
{
Display* display = XOpenDisplay(NULL);
Window focusWindow, parentOfFocusedWindow;
XWindowAttributes attrributes;
int revert;
XGetInputFocus(display, &focusWindow, &revert);
parentOfFocusedWindow = getToplevelParent(display, focusWindow);
if (!parentOfFocusedWindow) {
qCritical("ImageGrabber::getActiveWindowRect: Unable to get window, returning screen.");
return getCurrectScreenRect();
}
XGetWindowAttributes(display, parentOfFocusedWindow, &attrributes);
return QRect(attrributes.x, attrributes.y, attrributes.width, attrributes.height);
}
你可以用
你可以用