Sono sempre il solito nubbio, avrei bisogno di una mano, vorrei saxe se esiste 1 comando che interrompe 1 processo di window, insomma 1 programma per chiudere i programmi (win xp). avrei bisogno di chiudere 1 lista abbastanza lunga di programmi nel minor tempo possibile e mi e' venuto in mente questo, si puo' fare?
Conosci handle della finestra che vuoi chiudere?
Se la risposta è si... ti basta un PostMessage(handle, WM_SYSCOMMAND,SC_CLOSE,0); (http://msdn2.microsoft.com/en-us/library/ms644944.aspx)
Se la risposta è no... lo devi ricavare con FindWindow (http://msdn2.microsoft.com/en-us/library/ms633499.aspx)
Esempio 1: Vuoi chiudere una finestra del Bolcco Note e ricavi handle per mezzo del titolo (caption)...
FindWindow(nil , 'Senza nome - Blocco note');
program ChiudiFinestra1;
uses SysUtils, windows, Messages;
var
Finestra, Figlia: HWND;
begin
Figlia := 0;
Finestra := 0;
Finestra := FindWindow(nil , 'Senza nome - Blocco note');
if Finestra <> 0 then
begin
PostMessage(Finestra, WM_CLOSE,0,0);
Sleep(500);
Figlia := FindWindow(nil , 'Blocco note'); // Ora controllo se è uscita una richiesta di salvare il file
if Figlia <> 0 then
if GetParent(Figlia) = Finestra then // se Figlia è parente di Finestra
begin
PostMessage(Figlia, WM_CLOSE,0,0); // la chiudo
PostMessage(Finestra, WM_DESTROY,0,0); // e chiudo brutalmente la finestra
end;
end;
end.
Esempio 2: Vuoi chiudere una finestra del Blocco Note e ricavi handle per mezzo della classe...
FindWindow('Notepad' , nil);
program ChiudiFinestra2;
uses SysUtils, windows, Messages;
var
Finestra, Figlia: HWND;
begin
Figlia := 0;
Finestra := 0;
Finestra := FindWindow('Notepad' , nil);
if Finestra <> 0 then
begin
PostMessage(Finestra, WM_CLOSE,0,0);
Sleep(500);
Figlia := FindWindow(nil , 'Blocco note'); // Ora controllo se è uscita una richiesta di salvare il file
if Figlia <> 0 then
if GetParent(Figlia) = Finestra then // se Figlia è parente di Finestra
begin
PostMessage(Figlia, WM_CLOSE,0,0); // la chiudo
PostMessage(Finestra, WM_DESTROY,0,0); // e chiudo brutalmente la finestra
end;
end;
end.
Esempio 3: Se vuoi chiude tutte le finestre del Blocco Note aggiungi un ciclo
repeat CodiceDaEseguire until CondizionePerTeminareIlCiclo;
program ChiudiFinestre;
uses SysUtils, windows, Messages;
var
Finestra, Figlia: HWND;
begin
Figlia := 0;
Finestra := 0;
Repeat // inizia il ciclo
begin
Finestra := FindWindow('Notepad' , nil);
if Finestra <> 0 then
begin
PostMessage(Finestra, WM_CLOSE,0,0);
Sleep(500);
Figlia := FindWindow(nil , 'Blocco note'); // Ora controllo se è uscita una richiesta di salvare il file
if Figlia <> 0 then
if GetParent(Figlia) = Finestra then // se Figlia è parente di Finestra
begin
PostMessage(Figlia, WM_CLOSE,0,0); // la chiudo
PostMessage(Finestra, WM_DESTROY,0,0); // e chiudo brutalmente la finestra
end;
end;
end;
until Finestra = 0; // tarmina il ciclo quando Finestra è uguale a 1
end.
Ciao.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.