嵌入调用外部程序的问题

WhbtomT 2020-10-24 02:44:55
有一个操作,就是不停地从goldwave里剪一小节音频,然后保存为另一个音频文件。这个操作类似的重复很多,而且又在两个软件之间不停来回,因此就有了用Delphi解决这个问题的想法。在网上查了很久,总的结果有两个。第一个是https://blog.csdn.net/xieyunc/article/details/17360983。

改成如下代码后,
var
vh: HWND;
begin

ShellExecute(Self.Handle,'open',Pchar('C:\Windows\System32\notepad.exe'),'1',nil,SW_SHOWNORMAL);
vh := windows.FindWindow( nil, 'Form1');
ShowMessage(IntToStr(vh));
if vh<>0 then
begin
Windows.SetParent(pnlApp.Handle, Self.pnlApp.Handle);
Windows.MoveWindow(pnlApp.Handle, 0, 0,Self.pnlApp.Width,Self.pnlApp.Height,True);
end else
ShowMessage('xx程序未运行!');

程序倒是调用出来了,但没有在panel里,而是在外部。请问是什么原因?
...全文
192 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanqth 2020-10-26
  • 打赏
  • 举报
回复
引用 5 楼 机动战士 的回复:
支持一下,我也想知道
代码、测试结果都给出来了。
机动战士 2020-10-26
  • 打赏
  • 举报
回复
支持一下,我也想知道
tanqth 2020-10-24
  • 打赏
  • 举报
回复

  var vh: HWND;
begin
  ShellExecute(Self.Handle,'open',Pchar('C:\Windows\System32\notepad.exe'),'',nil,SW_SHOWNORMAL);
  sleep(1000);  // 延迟一下,等待记事三打开。
  vh := Winapi.Windows.FindWindow(nil, '无标题 - 记事本');
  if vh<>0 then
  begin
    Winapi.Windows.SetParent(vh, Self.Panel1.Handle);
    Winapi.Windows.MoveWindow(vh, 0, 0,Self.Panel1.Width,Self.Panel1.Height,False);
  end
  else
    ShowMessage('xx程序未运行!');
效果如下:
tanqth 2020-10-24
  • 打赏
  • 举报
回复
用计算器再做了测试,发现可以改变计算器窗体大小(与 Panel1 一样大),但不能嵌入。 ShellExecute(Self.Handle,'open',Pchar('C:\Windows\System32\calc.exe'),'',nil,SW_SHOWNORMAL); sleep(1000); vh := Winapi.Windows.FindWindow(nil, '计算器');
tanqth 2020-10-24
  • 打赏
  • 举报
回复
第一种方法: vh := Winapi.Windows.FindWindow(nil, 'Form8'); 这里,不应该是你自己的窗体名应该是需要被嵌入的程序的窗体名。 如下图片的Form8是被嵌入的另外的程序。 notepad.exe,记事本的标题,好像不是窗体上显示的,总是找不到。
WhbtomT 2020-10-24
  • 打赏
  • 举报
回复
第二种是:https://blog.csdn.net/xtfnpgy/article/details/39900331 运行后直接出错。 请大侠指点,不胜感激。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧