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:
Aguardo ajuda!
[]s
Willian
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
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)