Осмелюсь предложить - что-то - где-то - как-то так:
Код:
Function PId(Exename:string):Dword;
var
snap:DWORD;
pe:TprocessEntry32;
Wnd : hWnd;
buff: array[0..Max_Path] of char;
tmpPID: DWord;
begin
result:= 0;
snap:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if snap <> INVALID_HANDLE_VALUE then
begin
pe.dwSize:= sizeof(TPROCESSENTRY32);
if process32First(snap, pe) then
repeat
Wnd := GetWindow(Application.Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN // Цикл поиска окон
IF (Wnd <> Application.Handle) AND // -Собственное окно
IsWindowVisible(Wnd) AND // -Невидимые окна
(GetWindow(Wnd, gw_Owner) = 0) AND// -Дочерние окна
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) // -Окна без заголовков
THEN
BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
GetWindowThreadProcessId(Wnd, @tmpPID);
If tmpPID = pe.th32ProcessID then
form1.Memo1.Lines.Add(pe.szExeFile + ' = ' + StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext); // Ищем новое окно
END;
if CompareText(pe.szExeFile, exename) = 0 then
begin
result:= pe.th32ProcessID;
closehandle(snap);
exit;
end;
until not process32Next(snap,pe);
closehandle(snap);
result:= 0;
end;
end;
а следующую ф-цию я подправил так:
function OpenProc(id: Cardinal):boolean;
__________________
...И был сначала ZX-Spectrum, а потом его T(urbo)ASS(e)M(bler)... И только на 7-й день (когда Интел купила Пентковского [из КБ Бабаяна]) - появился Pentium-I... А в Союзе P-II был ещё в 1978 году (точнее: Эльбрус [мультискалярный проц] только не рапространялся спекулянтами, а управлял ракетами и спутниками)... А лет с пяток назад Эльбрус-II ПЁР (но никак не ГНАЛСЯ как Селероны) на F(recuency):= 400 GHz... А самое парадоксальное - презентация состоялась в Минске...
|