enhet Unit1;
ha kontakt
bruk
Windows meddelanden, SysUtils, Variants, klassificerar, diagram, kontrollerar, bildar,
Dialoger StdCtrls, ShellAPI, TlHelp32;
typ
TForm1 = klassificerar (TForm)
Button1: TButton;
tillvägagångssätt Button1Click (avsändare: TObject);
privat
{Privata förklaringar}
offentligt
{Offentliga förklaringar}
avsluta;
var
Form1: TForm1;
genomförande
{$R *.dfm}
typ
TEnumData = rekord
hW: HWND;
pID: DWORD;
avsluta;
fungera EnumProc (hw: HWND; var-data: TEnumData): Bool; stdcall;
var
pID: DWORD;
börja
Resultat: = True;
om (GetWindowLong (hw, GWL_HWNDPARENT) = 0) och
(IsWindowVisible (hw) eller IsIconic (hw)) därefter
börja
GetWindowThreadProcessID (hw, @pID);
Om pID = data.pID därefter
börja
data.hW: = hW;
Resultat: = falskt;
avsluta; {Om}
avsluta; {Om}
avsluta; {EnumProc}
fungera WindowFromProcessID (pID: DWORD): HWND;
var
data: TEnumData;
börja
data.pID: = pID;
data.hW: = 0;
EnumWindows (@EnumProc, longint (@data));
Resultat: = data.hW;
avsluta; {WindowFromProcessID}
fungera WindowFromAppname32 (appname: Stränga): HWND;
{Take endast applikationfilenamen, inte full bana!
Behov att passera f8orlängningen som väl. }
var
kort: THandle;
processEntry: TProcessEntry32;
börja
Resultat: = 0;
appName: = bokstav (appname);
kort: = CreateToolhelp32Snapshot (
TH32CS_SNAPPROCESS,
0);
om kort <> 0 därefter
försök
processEntry.dwSize: = (processEntry) Sizeof;
om Process32First (kortet som, är processEntry) därefter
repetition
om AnsiCompareText (
appname,
ExtractFilename (StrPas (processEntry.szExeFile))
) = 0
därefter
börja
Resultat: = WindowFromProcessID (processEntry.th32ProcessID);
Avbrott;
avsluta; {Om}
till inte Process32Next (kortet som, är processEntry);
slutligen
CloseHandle (kort);
avsluta; {försök}
avsluta; {WindowFromAppname32}
tillvägagångssätt TForm1.Button1Click (avsändare: TObject);
var
x: THandle;
börja
ShellExecute (0, ”öppnar”, ”c:\WINDOWS\notepad.exe”, '', '', SW_SHOW);
x: = WindowFromAppname32 (”NotePad.exe”);
ShowMessage (IntToStr (x));
avsluta;
avsluta.
|