|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Chiudere una finestra di un processo qualsiasi, win32
Salve a tutti, sto screivendo un programma in C# e richiamo delle api win32 per ottenere le handle delle finestre sullo schermo.
La cosa riesce perfettamente e non ci sono problemi, devo per forza lavorare in c#. Ora voglio chiudere una finestra che ho sullo schermo, mi prendo l'handle e richiamo la funzione, sempre delle api win32, DestroyWindow, passo l'handle e la funzione mi torna false e mni viene dato questo codice d'errore: ERROR_ACCESS_DENIED 5 Access is denied. Come posso fargli chiudere di riffa o di raffa la finestra forzandolo? Per l'handle della finestra è preso con api win32, quindi diciamo che è c# per modo di dire. Uso tutte funzioni win32. Grazie, ciao ciao. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
A thread cannot use DestroyWindow to destroy a window created by a different thread.Quindi si deduce che non puoi distruggere finestre di altri processi. Ti conviene inviare il messaggio WM_CLOSE alle finestre. Nota che una finestra potrebbe anche rifiutarsi di chiudere se le si invia il WM_CLOSE (basta che non faccia nulla in risposta ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Ciao come gli mando il messaggio WM_CLOSE? E come glielo faccio prendere di prepotenza, di arroganza direi quasi :-).
Calcola che lo devo chiamare tramite api win32 da C# quindi mi servirebbe una funzione che mi sfrutti o l'handle della finestra, o l'id del thread a cui è associata la finestra o l'id o handle del processo padre. Grazie, ciao ciao. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
- SendMessage - SendMessageCallback - SendMessageTimeout - SendNotifyMessage - PostMessage Ti conviene leggere su MSDN. Potrebbe andarti bene SendMessageTimeout, gli puoi dare un timeout. Se l'applicazione che vuoi chiudere fosse bloccata (per qualunque motivo) la tua applicazione non ne risentirebbe e potresti determinare se è bloccata o meno. Tieni presente che il messaggio WM_CLOSE è una richiesta "gentile" di chiusura. L'unica chiusura brutale sarebbe killare il processo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Grazie mille, ho utilizzato una sendmessage.
Beh killare il processo non fa al caso mio :-) troppi danni. Grazie ancora, ciao ciao, |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:21.