блок Unit1;
поверхность стыка
пользы
Windows, сообщения, SysUtils, варианты, типы, графики, управление, формы,
Диалоги, StdCtrls, ShellAPI, TlHelp32;
тип
TForm1 = тип (TForm)
Button1: TButton;
процедура Button1Click (прислужник: TObject);
приватно
{Приватные объявления}
публика
{Общественные объявления}
конец;
var
Form1: TForm1;
вставка
{$R *.dfm}
тип
TEnumData = показатель
hW: HWND;
pID: DWORD;
конец;
функция EnumProc (hw: HWND; данные по var: TEnumData): Bool; stdcall;
var
pID: DWORD;
начните
Результат: = True;
если (GetWindowLong (hw, GWL_HWNDPARENT) = 0) и
(IsWindowVisible (hw) или IsIconic (hw)) после этого
начните
GetWindowThreadProcessID (hw, @pID);
Если pID = data.pID после этого
начните
data.hW: = hW;
Результат: = ложно;
конец; {Если}, то
конец; {Если}, то
конец; {EnumProc}
функция WindowFromProcessID (pID: DWORD): HWND;
var
данные: TEnumData;
начните
data.pID: = pID;
data.hW: = 0;
EnumWindows (@EnumProc, longint (@data));
Результат: = data.hW;
конец; {WindowFromProcessID}
функция WindowFromAppname32 (appname: Шнур): HWND;
{Взятие только filename применения, полный курс!
Потребность пройти выдвижение также. }
var
снимок: Т-образная рукоятка;
processEntry: TProcessEntry32;
начните
Результат: = 0;
appName: = UpperCase (appname);
снимок: = CreateToolhelp32Snapshot (
TH32CS_SNAPPROCESS,
0);
если снимок <> 0 после этого
попытка
processEntry.dwSize: = Sizeof (processEntry);
если Process32First (снимок, processEntry) после этого
повторение
если AnsiCompareText (, то
appname,
ExtractFilename (StrPas (processEntry.szExeFile))
) = 0
после этого
начните
Результат: = WindowFromProcessID (processEntry.th32ProcessID);
Пролом;
конец; {Если}, то
до не Process32Next (снимка, processEntry);
окончательно
CloseHandle (снимок);
конец; {попытка}
конец; {WindowFromAppname32}
процедура TForm1.Button1Click (прислужник: TObject);
var
x: Т-образная рукоятка;
начните
ShellExecute (0, «раскрывает», «c:\WINDOWS\notepad.exe», '', '', SW_SHOW);
x: = WindowFromAppname32 («NotePad.exe ");
ShowMessage (IntToStr (x));
конец;
конец.
|