首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

外部程序嵌套到自己的程序内,并隐藏外部的任务栏显示有关问题

2013-01-02 
外部程序嵌套到自己的程序内,并隐藏外部的任务栏显示问题【求助】本帖最后由 xingyu198932 于 2012-12-13 00

外部程序嵌套到自己的程序内,并隐藏外部的任务栏显示问题【求助】
本帖最后由 xingyu198932 于 2012-12-13 00:07:25 编辑 我这里有a.exe文件是别人做的。我想把它嵌入到我的窗体里面成为窗体的一部分。
 用了佬哥的案例,把计算器嵌套在自己的窗体内,代码如下:

var
  hwndOldParent,hwndCalc:HWND;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Windows.SetParent(hwndCalc,hwndOldParent);//恢复计算器的原有宿主
end;
procedure TForm1.Button1Click(Sender: TObject);//绑架计算器
begin
  hwndCalc:=FindWindow(nil,'计算器'); //找计算器窗体
  if hwndCalc=0 then winexec('calc.exe',SW_SHOWNORMAL);//如果未找到就运行计算器
  hwndCalc:=FindWindow(nil,'计算器'); //再找计算器窗体
  hwndOldParent:=GetParent(hwndCalc);//获取它的宿主(待进程结束时恢复它的原有宿主)
  Windows.SetParent(hwndCalc,Handle);//将计算器绑架入自己的窗体
end;


计算器成功的显示在窗体内,并且任务栏没有计算器的任务显示,释放后计算器显示在任务栏。可问题是
我自己吧a.exe嵌套进去后,a.exe会在任务栏显示,看的非常假,一看就是2个程序
我需要a.exe隐藏在任务栏隐藏,怎么办呢?

我发现只要是windos自带的记事本、牌、计算器等,嵌入后都不会在任务栏显示,其他程序都不行,会显示。
求解
[解决办法]
红色的是新增加的代码:

function FindMainWindow(h: HWND): HWND;
var
  hParent, hOwner: HWND;
begin
  hParent := h;
  repeat
    Result := hParent;
    hParent := Windows.GetParent(hParent);
  until hParent = 0;

  hOwner := Result;
  repeat
    Result := hOwner;
    hOwner := Windows.GetWindow(hOwner, GW_OWNER)
  until hOwner = 0
end;

var
  hwndOldParent,hwndCalc,hwndCalcMain:HWND;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Windows.SetParent(hwndCalc,hwndOldParent);//恢复计算器的原有宿主
end;
procedure TForm1.Button1Click(Sender: TObject);//绑架计算器
begin
  hwndCalc:=FindWindow(nil,'计算器'); //找计算器窗体
  if hwndCalc=0 then winexec('calc.exe',SW_SHOWNORMAL);//如果未找到就运行计算器
  hwndCalc:=FindWindow(nil,'计算器'); //再找计算器窗体
  hwndCalcMain:=FindMainWindow(hwndCalc);
  if (hwndCalcMain <> 0) and (hwndCalcMain <> hwndCalc) then
    ShowWindow(hwndCalcMain, SW_HIDE);
  hwndOldParent:=GetParent(hwndCalc);//获取它的宿主(待进程结束时恢复它的原有宿主)
  Windows.SetParent(hwndCalc,Handle);//将计算器绑架入自己的窗体
end;

热点排行