2017-04-14 119 views
0

我想退出一個窗口,我有第三個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

我很困惑。你的程序沒有打開一個窗口 - 你如何期望它能夠銷燬它沒有創建的窗口? – duskwuff

+0

我不希望它關閉它創建的窗口(因爲它沒有創建一個窗口),我希望它關閉另一個程序的窗口,例如。我的程序關閉了Google窗口 – Jimmmmmy

+0

DWORD WINAPI GetLastError(void);'不返回字符串指針,而是返回錯誤代碼。 –

回答

1

只有擁有窗口的線程纔可以調用DestroyWindowSendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0)與使用系統菜單關閉窗口相同,但最終只發送WM_CLOSE

一個窗口可以忽略WM_CLOSE,對此你可以做的事情不多。

如果窗口處於比您的更高的完整性級別的進程中,那麼UIPI將會阻止您的消息。

0

函數:DestroyWindow()應該做的工作。

來自: 'https://msdn.microsoft.com/en-us/library/windows/desktop/ms632682(v=vs.85).aspx'

銷燬指定窗口。該函數將WM_DESTROY和WM_NCDESTROY消息發送到窗口以停用它並從中移除鍵盤焦點。該功能還銷燬窗口的菜單,刷新線程消息隊列,破壞定時器,刪除剪貼板所有權,並打破剪貼板查看器鏈(如果窗口位於查看器鏈的頂部)。

如果指定的窗口是父窗口或所有者窗口,則DestroyWindow會在銷燬父窗口或所有者窗口時自動銷燬關聯的子窗口或擁有的窗口。該函數首先銷燬子窗口或擁有的窗口,然後銷燬父窗口或所有者窗口。

DestroyWindow也破壞由CreateDialog函數創建的無模式對話框。