Jump to content


Photo

Minimizar ventanas de un proceso


  • Please log in to reply
1 reply to this topic

#1 BrainDeath

BrainDeath

    Member

  • Miembros
  • PipPip
  • 28 posts

Posted 27 December 2009 - 01:20 AM

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
  • 1259 posts
  • LocationEspaña

Posted 27 December 2009 - 05:34 AM

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.