我用类似的代码, 倒时实现了嵌入, 但是原来的EXE收不到焦点, 不能操作了.
哪位朋友请指点下?测试环境: Win7 + D7
procedure TForm1.btn_ExecClick(Sender: TObject);
begin
WinExec('MyEXE.exe',SW_SHOW);
end;procedure TForm1.btn_SetParentClick(Sender: TObject);
var
iHD : THandle;
begin
iHD := FindWindow(nil,'Form_ExeTest');
if iHD>0 then begin
Windows.SetParent(iHD,Handle);
end;
end;
哪位朋友请指点下?测试环境: Win7 + D7
procedure TForm1.btn_ExecClick(Sender: TObject);
begin
WinExec('MyEXE.exe',SW_SHOW);
end;procedure TForm1.btn_SetParentClick(Sender: TObject);
var
iHD : THandle;
begin
iHD := FindWindow(nil,'Form_ExeTest');
if iHD>0 then begin
Windows.SetParent(iHD,Handle);
end;
end;
iHD:THandle;
begin
iHD:=FindWindow(nil,'form1');
if iHD>0 then
begin
Windows.SetParent(iHD,pnl1.Handle);
end;
end;
var
iHD: THandle;
begin
iHD := FindWindow(nil, 'form1');
if iHD > 0 then
begin
Windows.SetParent(iHD, Handle);
end;
end;
反过来,也能把自己应用的窗口(包括按钮)随便嵌入别人的应用,前年的360劫持QQ就是这么做的
后面我又用VC做了一个EXE, 嵌入后也是没反应,汗!
Application.Handle := iHD;
不知道是不是你要的效果,直接调用了DLL的窗体了。var
DLLHandle: THandle;
DLLSub: InvokeDLLForm;begin
DLLHandle := LoadLibrary('prjDLL.dll');
if DLLHandle <> 0 then
begin
@DLLSub := GetProcAddress(DLLHandle, 'CreateDLLForm');
if Assigned(DLLSub) then
begin
DLLForm := DLLSub(Application, Screen);
end;
end;
end;
1、提高EXE的启动执行速度。将装载数据等代码,放在show之后执行。
2、在FindWindow(nil,'Form_ExeTest')代码之前加入sleep(600);