如何在C++中创建隐藏窗口

ana*_*and 36 c++ user-interface winapi window

如何创建隐藏窗口?

此窗口的目的是接收一些消息.

Nat*_*man 23

When you create the window, omit the WS_VISIBLE flag and don't call ShowWindow.

  • MSDN声明您还应该是HWND_MESSAGE的子窗口,请参阅http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx#message_only (7认同)
  • 但是你没有收到广播信息. (5认同)

Sla*_*tos 14

在win32/mfc环境中,您需要做的是创建一个类并从CWnd继承,如下所示:

class HiddenMsgWindow : public CWnd
{
...
}
Run Code Online (Sandbox Code Playgroud)

在该类的构造函数中,您将实例化一个这样的窗口:

HiddenMsgWindow::HiddenMsgWindow()
{
   CString wcn = ::AfxRegisterWndClass(NULL);
   BOOL created = this->CreateEx(0, wcn, _T("YourExcellentWindowClass"), 0, 0, 0, 0, 0, HWND_MESSAGE, 0);
}
Run Code Online (Sandbox Code Playgroud)

这会让你看到一个隐藏的窗口,消息泵几乎准备好摇滚.

故事的其余部分是提供窗口消息和这些消息的处理程序之间的链接.

这是通过向您的实现文件(.cpp)添加一些宏和消息处理程序来完成的,如下所示:

BEGIN_MESSAGE_MAP(HiddenMsgWindow, CWnd)
   ON_MESSAGE(WM_USER + 1, DoNOOP)
END_MESSAGE_MAP()

LRESULT HiddenMsgWindow::DoNOOP(WPARAM wParam, LPARAM lParam)
{
   AfxMessageBox(_T("Get Reaaady for a Ruuummmmmmmbllllle!"));
   return LRESULT(true);
}
Run Code Online (Sandbox Code Playgroud)

然后你需要在头文件中填写其余的胶水,如下所示:

class HiddenMsgWindow : public CWnd
{
public:
   HiddenMsgWindow();
protected:
   afx_msg LRESULT DoNOOP(WPARAM wParam, LPARAM lParam);

   DECLARE_MESSAGE_MAP()

}
Run Code Online (Sandbox Code Playgroud)

就像魔术一样,你有一个隐藏的窗口,可以随时抽取你的信息.

为了使用此消息窗口,您将实例化该类检索它的句柄并根据需要发送或发布消息.像这样:

HiddenMsgWindow *hmw = new HiddenMsgWindow();
SendMessage(hmw->m_hWnd, WM_USER + 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)

  • 我为你编辑了.看看源代码,了解如何设置各种格式.:]代码应缩进四个空格,你可以通过用反向标记包围代码来做"内联代码":\`code \`变成`code`. (2认同)

ta.*_*.is 10

您可以按照下列指示:https://docs.microsoft.com/en-us/windows/desktop/winmsg/window-features#message-only-windows

  • 只要您不想接收*广播*消息,只有窗口不接收消息,这样就可以了. (3认同)