我有一个基于C ++ / CLI的安装应用程序需要关闭我编写的另一个应用程序,替换应用程序的.exe和dll并重新运行可执行文件。
首先,我需要沿着以下几行关闭该窗口:
HWND hwnd = FindWindow(NULL, windowTitle);
if( hwnd != NULL )
{
::SendMessage(hwnd, (int)0x????, 0, NULL);
}
即。找到一个匹配的窗口标题(有效)...但是我需要什么消息才能发送远程窗口让它关闭?
...还是有更多的.net-ish方法,而不诉诸Windows API直接?
请记住,我只限于.net 2.0
答案 0 :(得分:5)
答案 1 :(得分:3)
您可以使用WM_CLOSE
致电SendMessage
。
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
有关代码示例,请参阅http://boycook.wordpress.com/2008/07/29/c-win32-messaging-with-sendmessage-and-wm_copydata/。
答案 2 :(得分:2)
WM_QUERYENDSESSION
,并将lParam设置为ENDSESSION_CLOSEAPP
。WM_ENDSESSION
。WM_CLOSE
。答案 3 :(得分:1)
如果有人想要遵循更多的.net-ish做事方式,您可以执行以下操作:
using namespace System::Diagnostics;
array<Process^>^ processes = Process::GetProcessesByName("YourProcessName");
for each(Process^ process in processes)
{
process->CloseMainWindow(); // For Gui apps
process->Close(); // For Non-gui apps
}
答案 4 :(得分:-1)
更新
使用WM_CLOSE。我错了。