01) Programas Abertos 
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 
EnumWindows( @EnumWindowsProc, integer( listbox1 )); 
end; 

*************************************************************

02) Programas Abertos (incluíndo os ocultos) 
Para listar (pegar) todas janelas abertas, deve-se usar a funcao da API 
EnumWindows, que usa uma funcao Callback, com dois parametros, um Handle para a 
janela e um ponteiro. Voce pode usá-la com um códi-go semelhante a este (Este 
lista as janelas abertas, mesmo invisí-veis, em uma listbox): 

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; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
EnumWindows(@EnumWindowsProc,LongInt(Self)); 
end; 

*************************************************************

083 - Como executar programas externos
Winexec('Command.com /C Teste.exe',Tipo_de_Janela);
Tipo_de_Janela :
SW_SHOWNORMAL - Visualização normal da janela
SW_MAXIMIZE - Janela maximizada
SW_MINIMIZE - Janela minimizada 
SW_HIDE - Escondido 

*************************************************************

411 - Executar um programa e aguardar sua finalização antes de continuar
Inclua na seção uses: Windows
{ Esta função faz isto. }
function ExecAndWait(const FileName, Params: string;
  const WindowState: Word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços 
contidos em nomes longos }
  CmdLine := '"' + Filename + '"' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
  cb := SizeOf(SUInfo);
  dwFlags := STARTF_USESHOWWINDOW;
  wShowWindow := WindowState;
  end;
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
  CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
  PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  { Aguarda até ser finalizado }
  if Result then begin
  WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  { Libera os Handles }
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
  end;
end;
- Exemplo de uso:
ExecAndWait('c:\windows\notepad.exe', '', SW_SHOW);

*************************************************************

Dicas tirados do '850 Dicas do Delphi'.

Jonatã.


        



        
                
_______________________________________________________ 
Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar 
seu conhecimento? Experimente o Yahoo! Respostas !
http://br.answers.yahoo.com/

Responder a