Desidero chiudere la finestra con un nome (qualsiasi applicazione, ad esempio, calcolatrice e così via). Come si fa in C#? Importa le funzioni WinAPI?Come chiudere la finestra con il suo nome?
risposta
Sì, è necessario importare le funzioni API di Windows: FindWindow()
, SendMessage()
; e WM_CLOSE
costante.
definizioni nativi delle funzioni API di Windows:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
/// </summary>
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
const UInt32 WM_CLOSE = 0x0010;
codice cliente:
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Untitled - Notepad");
if (windowPtr == IntPtr.Zero)
{
Console.WriteLine("Window not found");
return;
}
SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
Sì, questo funziona perfettamente per Blocco note (presupponendo, ovviamente, che il titolo della finestra sia esattamente quello che hai dato qui, che probabilmente non è la maggior parte delle volte). Ma non funzionerà per le applicazioni che hanno più finestre di primo livello, a meno che non siano state progettate specificamente per chiudere l'intera app dopo la chiusura di una singola finestra di primo livello. Altrimenti, è necessario inviare 'WM_CLOSE' a * ciascuno * delle finestre di livello superiore per assicurarsi che l'app venga chiusa. –
Inoltre, le app possono scegliere di rispondere a "WM_CLOSE" come preferiscono. Ad esempio, alcuni programmi scelgono di minimizzarsi nell'area di notifica della barra delle applicazioni al momento della ricezione di questo messaggio, piuttosto che chiudere effettivamente. Poiché non è possibile controllare il modo in cui l'applicazione risponde al messaggio, è necessario testare ampiamente questo metodo e rendersi conto di quanto sia potenzialmente fragile quando si tratta di applicazioni sconosciute e non testate. –
È corretto come questo 'CloseWindow (windowPtr)'? –
si sta cercando di chiudere le finestre appartenenti ad altri processi. Questo non è qualcosa che si può assumere andrà in modo affidabile. Per prima cosa, TU non possiedi quelle finestre così non hai alcun diritto automatico di andare a fare casino con le finestre degli altri processi.
Come suggerisce l'altra risposta, è possibile provare a inviare un WM_CLOSE alla finestra, ma viene fornito con l'avvertenza che l'altro processo non ha il diritto di onorarlo. La risposta a WM_CLOSE può essere qualsiasi cosa all'accettazione e un arresto pulito al rifiuto definitivo. In quest'ultimo caso, non hai davvero alcuna possibilità. Non è il tuo processo. Nel mezzo, come hai visto, potrebbero esserci dei tipi di finestre intermedie, finestre di dialogo, ecc. Con cui dovresti fare i conti.
Allora, cosa stai cercando di ottenere qui? Perché stai cercando di chiudere Windows appartenenti ad altri processi? Potrebbe aiutare a chiarire qual è lo scopo.
- 1. Come chiudere la finestra genitore da suo figlio?
- 2. Come trovare la variabile JavaScript con il suo nome
- 3. Come posso chiudere un buffer senza chiudere la finestra?
- 4. Come trovare il file con il suo nome parziale?
- 5. Impossibile chiudere manualmente la finestra plot matplotlib
- 6. Funzione per chiudere la finestra in Tkinter
- 7. Come ottenere carattere con il suo nome (unicode) in Java?
- 8. Come chiudere la finestra GLUT senza terminare l'applicazione?
- 9. Come chiudere una finestra popup di Liferay.util.openWindow?
- 10. Come chiudere la finestra di dialogo da viewmodel (Caliburn + WPF)?
- 11. Bootstrap su Twitter: come chiudere la finestra di dialogo modale?
- 12. Come annullare o chiudere una finestra di dialogo personalizzata nel suo metodo onCreate?
- 13. Come chiudere la finestra divisa/editor adiacente - Xcode 4
- 14. Come chiudere una finestra di Kendo dal contenuto della finestra?
- 15. Java: come impedire a WindowClosing di chiudere effettivamente la finestra
- 16. Come chiudere la finestra del browser in AngularJS
- 17. Chiamare un Windows Form con il suo nome di classe
- 18. Come chiamare il metodo usando il suo nome?
- 19. Electron.js Come minimizzare/chiudere la finestra sulla barra delle applicazioni e ripristinare la finestra dal vassoio?
- 20. Qt: Come ridimensionare una finestra per il suo nuovo contenuto
- 21. Rotativa Scarica con la finestra di dialogo Salva con nome
- 22. In Java, come ottenere l'attributo data la stringa con il suo nome?
- 23. Rileva un pronome e il suo nome?
- 24. Come posso ottenere un handle di processo con il suo nome in C++?
- 25. programmazione chiudere la finestra creata da `View (x)`
- 26. Perché il costruttore viene chiamato se la classe ha un metodo (funzione) con il suo nome?
- 27. Avvio di SweetAlert per impedire all'utente di chiudere la finestra
- 28. Qualcuno sa come B-Tree ha preso il suo nome?
- 29. Previene emacs dal chiudere automaticamente una finestra dopo il completamento
- 30. Qt - Esc non dovrebbe chiudere la finestra di
http://www.codeproject.com/Articles/22257/Find-and-Close-the-Window-using-Win-API ... google rox sai – m0s
Possibile duplicato. http://stackoverflow.com/questions/116090/how-do-i-kill-a-process-using-vb-net-or-c – Lloyd
@Lloyd: non è un duplicato, uccidere un processo non è la stessa cosa di chiudere una finestra. –