unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyFun = function(p: Pointer): DWORD;stdcall;
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
hnd: THandle;
WindowList: Pointer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function MyFun(p: Pointer): DWORD;stdcall;
implementation
{$R *.dfm}
function MyFun(p: Pointer): DWORD;
begin
with TForm1(p) do
begin
if WaitForSingleObject(hnd,INFINITE) = WAIT_OBJECT_0 then
begin
EnableTaskWindows(WindowList);
SetForeGroundWindow(WindowHandle);
end;
Result := 0;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var pInfo: TProcessInformation;
sInfo: TStartupInfo;
iTHreadId: Cardinal;
begin
FillChar(sInfo,SizeOf(sINfo),#0);
sInfo.cb := SizeOf(sINfo);
sInfo.dwFlags := STARTF_USESHOWWINDOW;
sInfo.wShowWindow := 1;
if CreateProcess(nil,'Notepad.exe',nil,nil,
False,0,nil,nil,sInfo,pInfo) then
begin
WindowList := DisableTaskWindows(0);
hnd := pInfo.hProcess;
Label1.Caption := Inttostr(hnd);
CreateThread(nil,0,@myFun,Self,0,iTHreadId);
end;
end;
end.