Fechar janela que eu já tenho o Handle: código falha...

24/11/2005

0

Galera,

Vou postar abaixo o código de meu programa. Ele localiza todas as janelas (não processos) do Windows e lista-as na listbox (evento do button1). O button2 encerra, com o SendMessage, todos os programas que estão na listbox, exceto ele mesmo. Mas estou com problema: nem todas janelas são fechadas, quase sempre a última da lista, mas as vezes ele pula 2 ou mais. Qual o problema do código? Segue o código:

Function EnumWindowsProc (Wnd: HWND; lb: TListbox): BOOL; stdcall;
var
   caption: Array [0..128] of Char;
begin
   Result := True;
   if IsWindowVisible(Wnd) and ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
   (HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow))and
   ((GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) = 0) then
   begin
      SendMessage( Wnd, WM_GETTEXT, Sizeof(caption),integer(@caption));
      lb.Items.AddObject( caption,TObject( Wnd ));
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ListBox1.Items.Clear;
   EnumWindows( @EnumWindowsProc, integer( listbox1 ));
end;


procedure TForm1.Button2Click(Sender: TObject);
var
   Contador : Integer;
   Janela   : hWND;
   Nome     : String;
begin
   For Contador := 0 To (ListBox1.Items.Count-1) Do
   Begin
      Nome := Trim(Copy(ListBox1.Items.Strings[Contador],1,6));
      If Nome <> ´Listar´ Then
      Begin
         Janela:= FindWindow(nil, PChar(ListBox1.Items.Strings[Contador]));
         SendMessage(Janela, WM_CLOSE,0,0);
      End;
   End;

end;


Aguardo ajuda!

[]s
Willian


Willian

Willian

Responder

Posts

25/11/2005

Edilcimar

o ultimo for para o contador
For Contador := 0 To (ListBox1.Items.Count-1) Do
cada vez que vc fecha uma janela, este contador é incrementado, porém o listbox1.items tem o seu Count diminuido de 1, portanto vai dar erro, faça isto dentro de um while listbox1.items.count > 0


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar