jednostka Unit1;
interfejs
uses
Windows, Wiadomość, SysUtils, Wariant, Klasa, Grafika, Kontrola, Forma,
Dialog, StdCtrls, ShellAPI, TlHelp32;
typ
TForm1 = klasa (TForm)
Button1: TButton;
procedura Button1Click (Nadawca: TObject);
intymny
{Intymny deklaracja}
społeczeństwo
{Jawny deklaracja}
końcówka;
var
Form1: TForm1;
urzeczywistnienie
{$R *.dfm}
typ
TEnumData = rejestr
hW: HWND;
pID: DWORD;
końcówka;
funkcja EnumProc (hw: HWND; var dane: TEnumData): Bool; stdcall;
var
pID: DWORD;
zaczynać
Rezultat: = Prawdziwy;
jeżeli (GetWindowLong (hw, GWL_HWNDPARENT) = (0)) i
(IsWindowVisible (hw) lub IsIconic (hw)) wtedy
zaczynać
GetWindowThreadProcessID (hw, @pID);
Jeżeli pID = data.pID wtedy
zaczynać
data.hW: = hW;
Rezultat: = Fałszywy;
końcówka; {Jeżeli}
końcówka; {Jeżeli}
końcówka; {EnumProc}
funkcja WindowFromProcessID (pID: DWORD): HWND;
var
dane: TEnumData;
zaczynać
data.pID: = pID;
data.hW: = (0);
EnumWindows (@EnumProc, longint (@data));
Rezultat: = data.hW;
końcówka; {WindowFromProcessID}
funkcja WindowFromAppname32 (appname: Sznurek): HWND;
{Brać tylko the podaniowy filename, pełny ścieżka!
Potrzeba the rozszerzenie także. }
var
zdjęcie: THandle;
processEntry: TProcessEntry32;
zaczynać
Rezultat: = (0);
appName: = UpperCase (appname);
zdjęcie: = CreateToolhelp32Snapshot (
TH32CS_SNAPPROCESS,
(0));
jeżeli zdjęcie <> (0) wtedy
próba
processEntry.dwSize: = Sizeof (processEntry);
jeżeli Process32First (zdjęcie, processEntry) wtedy
powtórka
jeżeli AnsiCompareText (
appname,
ExtractFilename (StrPas (processEntry.szExeFile))
) = (0)
wtedy
zaczynać
Rezultat: = WindowFromProcessID (processEntry.th32ProcessID);
Przerwa;
końcówka; {Jeżeli}
do nie Process32Next (zdjęcie, processEntry);
w końcu
CloseHandle (zdjęcie);
końcówka; {próba}
końcówka; {WindowFromAppname32}
procedura TForm1.Button1Click (Nadawca: TObject);
var
x: THandle;
zaczynać
ShellExecute ((0), "otwierać", "c:\WINDOWS\notepad.exe", '', '', SW_SHOW);
x: = WindowFromAppname32 ("NotePad.exe ");
ShowMessage (IntToStr (x));
końcówka;
końcówka.
|