Duvida

Delphi

25/01/2004

Eu estou tentando desenvolver um codigo que feche todos os programas abertos [b:274ef4b15a]´ menos o meu ´[/b:274ef4b15a], mas esta dificil. Alguem pode me ajudar se possivel.

Obrigado...


Alima

Alima

Curtidas 0

Respostas

Luisfernando

Luisfernando

25/01/2004

Essa funçao serve para ver quais sao os processos em execuçao

function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
Form.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;

E essa para finalizar um processo.

PostMessage(FindWindow(´Nome do processo´, nil), WM_QUIT,0,0);


GOSTEI 0
Fabio.hc

Fabio.hc

25/01/2004

Finalizando todas as tarefas
procedure TForm1.ButtonKillAllClick(Sender: TObject);
var
   pTask : PTaskEntry;
   Task : Bool;
   ThisTask: THANDLE;
begin
   GetMem (pTask, SizeOf (TTaskEntry));
   pTask^.dwSize := SizeOf (TTaskEntry);
   Task := TaskFirst (pTask);
   while Task do
      begin
      if pTask^.hInst = hInstance then
         ThisTask := pTask^.hTask
      else
         TerminateApp (pTask^.hTask, NO_UAE_BOX);
      Task := TaskNext (pTask);
      end;
   TerminateApp (ThisTask, NO_UAE_BOX);
end;


Eu ainda não testei.


GOSTEI 0
Dhiogo

Dhiogo

25/01/2004

Esse codigo que fará oque vc quer.

Function EnumWindowsProc (Wnd: HWND; lb: TStringlist): 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.AddObject( caption,TObject( Wnd ));
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  strs:TStringlist;
  i:integer;
  hwnd:Thandle;
begin
  strs:=tstringlist.Create;
  EnumWindows( @EnumWindowsProc, integer(strs));
  for i := 1 to strs.Count-1 do
  begin
    hwnd:=findwindow(nil,pchar(strs.Strings[i]));
    if hwnd <> 0 then
       sendmessage(hwnd,wm_close,0,0);
  end;
end;



GOSTEI 0
Alima

Alima

25/01/2004

[b:606305b642]Obrigado a todos pela ajuda.[/b:606305b642]


GOSTEI 0
Beppe

Beppe

25/01/2004

Que ótimo que a ´Dúvida´ esteja sanada. Mas na próxima dúvida, escolha um título mais condizente com o problema. Assim você atrai a audiência que você precisa e estará conforme as regras do fórum.

[]´s
Beppe


GOSTEI 0
POSTAR