Ir al contenido


Foto

Minimizar ventanas de un proceso


  • Por favor identifícate para responder
1 respuesta en este tema

#1 BrainDeath

BrainDeath

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 27 diciembre 2009 - 01:20

Hola ps me ha salido una duda quisiera saber como minimizar ventanas con la PID de un proceso.Una idea es buscando el handle del proceso con la PID para minimizar todas las ventanas del proceso pero no encuentro algo que me ayude.

Espero su ayuda Saludos..

Pròspero año nuevo  (d)
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 27 diciembre 2009 - 05:34

Pues se me ocurre algo como esto:


delphi
  1. type
  2.   TWindowRec = record
  3.     ProcessId: Cardinal;
  4.   end;
  5.   PWindowRec = ^TWindowRec;
  6.  
  7. function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall;
  8. var
  9.   ProcessId: Cardinal;
  10. begin
  11.   Result:= TRUE;
  12.   ProcessId:= 0;
  13.   GetWindowThreadProcessId(Handle, ProcessId);
  14.   if ProcessId = PWindowRec(lParam).ProcessId then
  15.   begin
  16.     ShowWindow(Handle,sw_minimize);
  17.   end;
  18. end;
  19.  
  20.  
  21. // Para usarlo, si ya tienes el PID, solo tienes que hacer algo como esto
  22. var
  23.   WindowRec: TWindowRec;
  24. begin
  25.   FillChar(WindowRec,Sizeof(WindowRec),0);
  26.   WindowRec.ProcessId:= PID;
  27.   EnumWindows(@EnumWindowsProc, LPARAM(@WindowRec)); 
  28. end;




Y para probarlo puedes usar el siguiente codigo, que ejecuta el notepad espera 5 segundos y lo minimiza:


delphi
  1. var
  2.   WindowRec: TWindowRec;
  3.   StartupInfo: TStartupInfo;
  4.   ProcessInfo: TProcessInformation;
  5. begin
  6.   FillChar(StartupInfo,Sizeof(StartupInfo),0);
  7.   StartupInfo.wShowWindow:= SW_SHOW;
  8.   if CreateProcess(nil,PChar('notepad.exe'),nil,nil, FALSE, CREATE_NEW_CONSOLE or
  9.     NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo, ProcessInfo) then
  10.     begin
  11.       Sleep(5000);
  12.       FillChar(WindowRec,Sizeof(WindowRec),0);
  13.       WindowRec.ProcessId:= ProcessInfo.dwProcessId;
  14.       EnumWindows(@EnumWindowsProc, LPARAM(@WindowRec));
  15.     end;
  16. end;


  • 0




IP.Board spam blocked by CleanTalk.