怎么在窗体中嵌入一个被调用的exe文件?小妹急求~多谢
如何在窗体中嵌入一个被调用的exe文件?小妹急求~谢谢! - C++ Builder / Windows SDK/API
是这样的,我想在form的一个panel里显示一个外部的exe,我目前只能用ShellExecute方法调用外部exe文件,是在一个新窗口打开的,我想在我自己程序的窗体上显示打开,而不是在新的窗口打开,有什么办法可以解决么?先谢过了~
其中我找到一段代码 是用c#写的,我不会c#,他写的很复杂,小妹实在看不太懂,不知道这个方法在BCB中怎么用,贴出来给大家看下
http://www.cnblogs.com/jdmei520/archive/2009/06/05/1497124.html
------解决方案--------------------
是这样的,我想在form的一个panel里显示一个外部的exe,我目前只能用ShellExecute方法调用外部exe文件,是在一个新窗口打开的,我想在我自己程序的窗体上显示打开,而不是在新的窗口打开,有什么办法可以解决么?先谢过了~
其中我找到一段代码 是用c#写的,我不会c#,他写的很复杂,小妹实在看不太懂,不知道这个方法在BCB中怎么用,贴出来给大家看下
http://www.cnblogs.com/jdmei520/archive/2009/06/05/1497124.html
------解决方案--------------------
- Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject); var H1,H2: Hwnd; begin // 先執行要放入專案的外部EXE檔案(用隱藏方式來執行) WinExec('C:\Program Files\TOOLS\MYIE\MyIE.exe',SW_HIDE); // 再找到該外部EXE檔案 H1 := FindWindow(nil,PChar('MyIE')); // 假設找到執行之程式後要放在 Panel1 H2 := Panel1.Handle; // 將外部程式放在 Panel1 Windows.SetParent(H1,H2); // 設定外部程式顯示的位置及大小 // MoveWindow(hWnd,X,Y,W,H,B) : RETURN BOOL // hWnd: HWND // X:Integer; {horizontal} // Y:Integer; {vertical} // W:Integer; {the new window width} // H:Integer; {the new window height} // B:BOOL; {the repaint flag} MoveWindow(H1,0,0,Panel1.Width,Panel1.Height,True); // Windows.ShowWindow(H1,SW_ShowNormal); end;
------解决方案--------------------
- C/C++ code
HWND hwnd,chwnd; hwnd=this->Panel1->Handle; ShellExecute(hwnd, "open", "calc.exe" ,"", "C:\WINDOWS\system32", SW_HIDE ); Sleep(100); chwnd=::FindWindow("SciCalc","计算器"); if(chwnd!=NULL) { ::SetParent(chwnd,hwnd); ::MoveWindow(chwnd,0,0,Panel1->Width,Panel1->Height,true); }
------解决方案--------------------
可以用Visual studio里的spy++来监听窗口的各种信息。
做法是:
1、打开被查看窗口
2、运行spy++
3、点FindWindow
4、拖动FindWindow中间的图标到你的窗口上
5、spy++里就显示你要的结果了