2017-04-14 3 views
0

Ich versuche, ein Fenster zu beenden ich habe dritte DestroyWindow() und SendMessage() mit WM_CLOSE und CloseWindow() die ersten beiden funktionieren nicht und CloseWindow(); minimiert es nur!Verlassen Sie kein Fenster minimieren?

Beispiel-Code von dem, was ich versuche zu tun:

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; 
} 

Also im Grunde das Fenster schließen, aber nicht den Prozess Beispielszenario: ich einen neuen Tab auf Google öffnen in einem neuen Fenster dieses Programm schließe das Fenster, aber nicht den ganzen Prozess. Ist das möglich und wenn ja, welche Funktion würde ich verwenden?

+0

Ich bin verwirrt. Ihr Programm öffnet kein Fenster - wie erwarten Sie, dass es ein Fenster zerstören kann, das es nicht erstellt hat? – duskwuff

+0

Ich möchte nicht, dass es ein Fenster schließt, das es erstellt hat (da es keins erstellt hat) Ich möchte, dass es ein Fenster eines anderen Programms zB schließt. Mein Programm schließt ein Google-Fenster – Jimmmmmy

+0

'DWORD WINAPI GetLastError (void);' gibt keinen String-Zeiger, sondern einen Fehlercode zurück. –

Antwort

1

Nur der Thread, der das Fenster besitzt, darf DestroyWindow aufrufen. SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0) ist das gleiche wie Schließen des Fensters mit dem Systemmenü, aber es sendet letztlich nur WM_CLOSE.

Ein Fenster kann WM_CLOSE ignorieren und es gibt nicht viel, was Sie dagegen tun können.

Wenn sich das Fenster in einem Prozess mit einer höheren Integritätsstufe befindet als Sie, blockiert UIPI Ihre Nachricht.

0

die Funktion: DestroyWindow() sollte die Aufgabe erledigen.

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

Zerstört das angegebene Fenster. Die Funktion sendet WM_DESTROY- und WM_NCDESTROY-Nachrichten an das Fenster, um sie zu deaktivieren und den Tastaturfokus daraus zu entfernen. Die Funktion zerstört auch das Menü des Fensters, löscht die Thread-Nachrichtenwarteschlange, zerstört Timer, entfernt die Eigentümerschaft der Zwischenablage und bricht die Betrachterkette der Zwischenablage (wenn das Fenster an der Spitze der Überwachungskette liegt).

Wenn das angegebene Fenster ein Eltern- oder Besitzerfenster ist, zerstört DestroyWindow automatisch das zugehörige untergeordnete oder eigene Fenster, wenn es das Eltern- oder Besitzerfenster zerstört. Die Funktion zerstört zuerst untergeordnete oder eigene Fenster und zerstört dann das Eltern- oder Besitzerfenster.

DestroyWindow zerstört auch modale Dialogfelder, die mit der CreateDialog-Funktion erstellt wurden.

Verwandte Themen