gpt4 book ai didi

c++ -::PostMessage 在我切换到另一个程序时不起作用

转载 作者:行者123 更新时间:2023-11-28 00:16:32 26 4
gpt4 key购买 nike

在我们的程序中,我们从一个单独的 dll 中打开一个对话框来显示信息。当我们的系统计时器导致系统锁定时,我需要关闭此对话框。

我通过在我的 MainFrm 和 EditDisplayDll 中注册系统消息来向 dll 发送信息

SYSTEMLOCK = RegisterWindowMessage("SystemLock");

当我通过

发送消息时

::PostMessage(GetActiveWindow()->m_hWnd,SYSTEMLOCK,0,0);

消息正确发送到我的 EditDisplayDll 并在系统锁定时关闭对话框;但是,如果我在等待超时时使用 alt 选项卡并使用另一个程序(firefox、outlook 等),则该消息永远不会正确调用 EditDisplayDll。 MainFrmMainFrm 内的其他窗口在任何一种情况下都正确锁定并隐藏自己。

我也尝试过将 HWND_BROADCAST 与 PostMessageSendNotifyMessage 一起使用。我还尝试使用 FindWindow()FindWindowEx() 专门调用 EditDisplayDll。

我不能使用像 GetDlgItem() 这样的东西,因为我的 MainFrm.cpp 没有访问这个 dll 的权限。

我决定使用 GetActiveWindow() 是因为我相信它会查找特定于我的程序的窗口,无论我在哪个窗口中,如 Foreground Vs Active window 中的图像所示。

最后,我的问题是,有没有一种方法可以调用我程序中的所有 Windows,而不管我当前使用的是什么程序,或者有没有其他方法可以访问 EditDisplayDll 的特定 IDD 以便发送 SYSTEMLOCK 消息呢?

最佳答案

CWnd *cWndED = FindWindow(_T("EditDisplay"),_T("EditDisplay")); HWND hwnd = (HWND)cWndED;

您应该使用具有适当类、窗口名称的 win32 API::FindWindow。并且不要将 CWnd 指针转换为 HWND。您的代码应如下所示:

HWND hWnd = ::FindWindow(_T("ProperClass"), _T("ProperNmae"));
if (hWnd != NULL)
{
::PostMessage(hWnd, YOUR_MESSAGE, ....);
}

我会建议您使用 Spy++ 找到您的 Dll 窗口类和名称,然后尝试使用上述方法找到它。请记住,最好使用 native API 来完成此类任务。

关于c++ -::PostMessage 在我切换到另一个程序时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954432/

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