Было уже где-то на форуме, вот вариант:
Код | type PProcessID = ^TProcessID; TProcessID = record PID : DWORD; Title : String[255]; end; function GetWindowNameFromPID(PID: DWORD): String; var ProcessID : PProcessID; begin GetMem(ProcessID,SizeOf(TProcessID)); ProcessID^.PID := PID; If Not EnumWindows(@EnumProcess,Integer(Pointer(ProcessID))) Then begin If MessageDlg('Could not get hook to the process handles.' + #13#10 + 'Try Again?',mtConfirmation,[mbYes,mbNo],0) = mrYes Then begin GetWindowNameFromPID(PID); end; end; end; function EnumProcess(Handle: HWND; lParam: Integer): BOOL; stdcall; var PID : Cardinal; ProcessID : TProcessID; Title : String; begin If Handle = nil Then begin Result := False; end Else begin ProcessID := PProcessID(Pointer(lParam))^; GetWindowThreadProcessID(Handle,PID); If ProcessID.PID = lParam Then begin SetLength(Title,255); SetLength(Title,GetWindowText(Handle,PChar(Title),Length(Title))); If Title = '' Then begin Title := 'Empty'; end; ProcessID.Title := Title; end; Result := True; end; end;
|
Немного доработав код можно получить что-то приличное 
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_24147897.html |