unidad Unit1;
interfaz
aplicaciones
Windows, mensajes, SysUtils, variantes, clases, gráficos, controles, formas,
Diálogos, StdCtrls, ShellAPI, TlHelp32;
tipo
TForm1 = clase (TForm)
Button1: TButton;
procedimiento Button1Click (remitente: TObject);
privado
{Declaraciones privadas}
público
{Declaraciones públicas}
extremo;
var
Form1: TForm1;
puesta en práctica
{$R *.dfm}
tipo
TEnumData = expediente
hW: HWND;
pID: DWORD;
extremo;
función EnumProc (hw: HWND; datos del var: TEnumData): Bool; stdcall;
var
pID: DWORD;
comenzar
Resultado: = verdad;
si (GetWindowLong (hw, GWL_HWNDPARENT) = 0) y
(IsWindowVisible (hw) o IsIconic (hw)) entonces
comenzar
GetWindowThreadProcessID (hw, @pID);
Si pID = data.pID después
comenzar
data.hW: = hW;
Resultado: = falso;
extremo; {Si}
extremo; {Si}
extremo; {EnumProc}
función WindowFromProcessID (pID: DWORD): HWND;
var
datos: TEnumData;
comenzar
data.pID: = pID;
data.hW: = 0;
EnumWindows (@EnumProc, longint (@data));
Resultado: = data.hW;
extremo; {WindowFromProcessID}
función WindowFromAppname32 (appname: Secuencia): HWND;
¡{Toma solamente el nombre de fichero del uso, trayectoria no llena!
Necesidad de pasar la extensión también. }
var
foto: Manilla en forma de T;
processEntry: TProcessEntry32;
comenzar
Resultado: = 0;
appName: = mayúscula (appname);
foto: = CreateToolhelp32Snapshot (
TH32CS_SNAPPROCESS,
0);
si foto <> 0 entonces
intento
processEntry.dwSize: = Sizeof (processEntry);
si Process32First (foto, processEntry) entonces
repetición
si AnsiCompareText (
appname,
ExtractFilename (StrPas (processEntry.szExeFile))
) = 0
entonces
comenzar
Resultado: = WindowFromProcessID (processEntry.th32ProcessID);
Rotura;
extremo; {Si}
hasta no Process32Next (foto, processEntry);
finalmente
CloseHandle (foto);
extremo; {intento}
extremo; {WindowFromAppname32}
procedimiento TForm1.Button1Click (remitente: TObject);
var
x: Manilla en forma de T;
comenzar
ShellExecute (0, “se abre”, “c:\WINDOWS\notepad.exe”, '', '', SW_SHOW);
x: = WindowFromAppname32 (“NotePad.exe ");
ShowMessage (IntToStr (x));
extremo;
extremo.
|