gpt4 book ai didi

c++ - 将焦点转移到另一个程序 Windows API

转载 作者:行者123 更新时间:2023-11-28 07:52:02 24 4
gpt4 key购买 nike

我正在尝试让我的应用程序将焦点转移到它碰巧悬停在鼠标上方的任何其他窗口。我正在尝试实现一些拖放功能,但似乎缺少的只是在鼠标将我的应用程序移动到另一个应用程序时焦点的变化。

这是我当前的测试功能(我现在在主回调过程中对 WM_MOUSEMOVE 进行测试,以供取笑)

case WM_MOUSEMOVE:
{
POINT pt;
GetCursorPos(&pt);
HWND newHwnd = WindowFromPoint(pt);

if (newHwnd != g_hSelectedWindow)
{
cout << "changing windows" << endl;
cout << SetWindowPos(newHwnd, HWND_TOP, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE) << endl;
g_hSelectedWindow = newHwnd;
}

CallWindowProc(listproc, hwnd,message,wParam,lParam);
break;
}

我尝试使用 AllowSetForegroundWindow 但它帮助它无法在给定范围内找到它,但我已经包括了。

如有任何帮助或建议,我们将不胜感激。

最佳答案

AllowSetForegroundWindow 不会有帮助,除非 other 窗口试图通过调用 SetForegroundWindow 成为前景窗口。

我很好奇,如果您需要将另一个窗口置于前台,为什么不直接调用 SetForegroundWindow 呢?

更新:所以这是您需要的代码才能正常工作:

HWND ResolveWindow(HWND hWnd)
{ /* Given a particular HWND, if it's a child, return the parent. Otherwise, if
* the window has an owner, return the owner. Otherwise, just return the window
*/
HWND hWndRet = NULL;

if(::GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD)
hWndRet = ::GetParent(hWnd);

if(hWndRet == NULL)
hWndRet = ::GetWindow(hWnd, GW_OWNER);

if(hWndRet != NULL)
return ResolveWindow(hWndRet);

return hWnd;
}

HWND GetTopLevelWindowFromPoint(POINT ptPoint)
{ /* Return the top-level window associated with the window under the mouse
* pointer (or NULL)
*/
HWND hWnd = WindowFromPoint(ptPoint);

if(hWnd == NULL)
return hWnd;

return ResolveWindow(hWnd);
}

只需从您的 WM_MOUSEMOVE 处理程序中调用 GetTopLevelWindowFromPoint(pt),如果您得到一个有效的 HWND,那么它将是一个可以带入的顶级窗口使用 SetForegroundWindow 到前台。

希望对您有所帮助。

关于c++ - 将焦点转移到另一个程序 Windows API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com