我正在尝试退出一个窗口,我有第三个DestroyWindow()
和SendMessage()
,其中WM_CLOSE和CloseWindow()
前两个不起作用,而CloseWindow();只是最小化它!
我正在尝试做的示例代码:
int main()
{
HWND curwind;
char ccurwind[256];
HWND newwind;
HWND wind2;
Sleep(1000);
printf("Destroying in 5...\n");
Sleep(1000);
printf("Destroying in 4...\n");
Sleep(1000);
printf("Destroying in 3...\n");
Sleep(1000);
printf("Destroying in 2...\n");
Sleep(1000);
printf("Destroying in 1...\n");
curwind = GetForegroundWindow();
GetWindowTextA(curwind, ccurwind, 256);
//DestroyWindow(curwind);
if (DestroyWindow(curwind) == 0) {
printf("Failed with error: %s", GetLastError());
}
else {
printf("\nDestroyed %s", ccurwind);
}
getch();
return 0;
}
所以基本上关闭窗口但不是关闭过程 示例场景: 我在新窗口中打开谷歌上的新标签,该程序将关闭该窗口,但不关闭整个过程。这是可能的,如果可以,我会使用什么功能?
答案 0 :(得分:1)
只允许拥有该窗口的线程调用DestroyWindow
。 SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0)
与使用系统菜单关闭窗口相同,但它最终只发送WM_CLOSE
。
一个窗口可以忽略WM_CLOSE
,你无能为力。
如果窗口处于完整性级别高于您的过程中,则UIPI将阻止您的消息。
答案 1 :(得分:0)
函数:DestroyWindow()应该完成这项工作。
来自:' https://msdn.microsoft.com/en-us/library/windows/desktop/ms632682(v=vs.85).aspx'
销毁指定的窗口。该函数将WM_DESTROY和WM_NCDESTROY消息发送到窗口以停用它并从中移除键盘焦点。该函数还会破坏窗口的菜单,刷新线程消息队列,销毁计时器,删除剪贴板所有权,并中断剪贴板查看器链(如果窗口位于查看器链的顶部)。
如果指定的窗口是父窗口或所有者窗口,则DestroyWindow会在销毁父窗口或所有者窗口时自动销毁关联的子窗口或拥有的窗口。该函数首先销毁子窗口或拥有窗口,然后它会破坏父窗口或所有者窗口。
DestroyWindow还会破坏CreateDialog函数创建的无模式对话框。