我建议导入并定义以下内容:
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool PostMessage(IntPtr handleWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
const int WM_ENDSESSION = 0x0016,
WM_TRUE = 0x1,
WM_FALSE = 0x0;
然后通过代表真假的0x1或0x0作为wParam消息发送。
所以在你的代码中你将使用:
PostMessage(HandleToSendTo, WM_ENDSESSION, WM_TRUE, 0);
HandleToSendTo 是您要将消息发送到的窗口的窗口句柄。
编辑
如果您不知道 Windows 句柄,我假设您会知道它的标题或名称。如果是这样,您可以使用它:
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern int FindWindowEx(int hwndParent, int hwndEnfant, int lpClasse, string lpTitre);
更多信息可以在this question.找到
或许
我不知道这是否是一个类似的句柄,我对此表示怀疑,但有人可以让我知道是否是,但你可以获得一个 Process 句柄,这意味着你可以使用 Process.GetProcessesByName(" MyAppName");,虽然不要依赖这个,因为我认为它不会得到你所追求的句柄。只是一个建议。