+ -
当前位置:首页 → 问答吧 → 如何delphi 打开外接应用程序主程序激活但外程序不激活?

如何delphi 打开外接应用程序主程序激活但外程序不激活?

时间:2011-11-22

来源:互联网

如何delphi 打开外接应用程序主程序激活但外程序不激活?

我用了一下代码:
Delphi(Pascal) code

ShellExecute(handle, 'open','shouxie.exe',nil,nil,6);

作者: xsmuhtar   发布时间: 2011-11-22

激活什么意思?焦点?还是窗体show?
这两个东东都可以用消息搞定

作者: funxu   发布时间: 2011-11-22

就是焦点,我打开了外部程序,程序打开了,但是主窗口不焦点

作者: xsmuhtar   发布时间: 2011-11-22

程序打开后窗体就在最顶层了,可以还将原来程序的窗体放在最顶层。

作者: shijies   发布时间: 2011-11-22

试下
SendMessage(handle, 0x0008, 0, 0);
或者
ShowWindow(Handle, SW_SHOWNOACTIVATE);

作者: funxu   发布时间: 2011-11-22

引用 3 楼 shijies 的回复:
程序打开后窗体就在最顶层了,可以还将原来程序的窗体放在最顶层。


我把原来程序的窗口放在最顶层了,还是一样的

我调用的是别人提供的一个手写程序,我把他调用的自己的程序,手写程序启动后焦点仍然在手写程序上,并不在原来的主程序上了,
这样的情况应该有一个办法把?

作者: xsmuhtar   发布时间: 2011-11-22

引用 4 楼 funxu 的回复:
试下
SendMessage(handle, 0x0008, 0, 0);
或者
ShowWindow(Handle, SW_SHOWNOACTIVATE);


我用了第一个是不能执行了,但是第二个没什么反映了

作者: xsmuhtar   发布时间: 2011-11-22

给你的两个例子是取消焦点的
handle改成主窗体
你把它改成
SendMessage(handle, 0x0007, 0, 0);
或者
ShowWindow(Handle, SW_SHOWNORMAL);

要么
SetForegroundWindow(Handle);

作者: funxu   发布时间: 2011-11-22

我的主窗体名称是mainfrm1, 我用了

Delphi(Pascal) code
ShowWindow(mainfrm1, SW_SHOWNORMAL);



之后出现这样错误信息了
Delphi(Pascal) code
[DCC Error] mainfrm.pas(1174): E2010 Incompatible types: 'HWND' and 'Tmainfrm1'
[DCC Fatal Error] logat.dpr(5): F2063 Could not compile used unit 'mainfrm.pas'

作者: xsmuhtar   发布时间: 2011-11-22

第一个参数应该是窗体句柄
例如
mainfrm1.HWND

作者: funxu   发布时间: 2011-11-22

把焦点放到原来的主窗口试试,mainfrm1.setfocus;

作者: shijies   发布时间: 2011-11-22