我必须从我的程序中运行一些其他应用程序并隐藏它的表单。在Windows XP中很简单:
ShellExecute(Handle, 'open', 'foo.exe', nil, nil,SW_HIDE);
但似乎它在Vista和win7中不再起作用了。
答案 0 :(得分:5)
好吧,至少
ShellExecute(Handle, nil, 'C:\WINDOWS\notepad.exe', nil, nil, SW_SHOWMINIMIZED);
似乎按照人们的预期工作。我没有可用的Windows XP机器,但究竟在XP上发生了什么?如果我跑
ShellExecute(Handle, nil, 'C:\WINDOWS\notepad.exe', nil, nil, SW_HIDE);
在Windows 7中,创建了一个notepad.exe进程,但没有显示任何窗口。我猜这个窗口已经创建了,但现在显示了,实际上就是人们所期望的那样。您可以稍后使用FindWindow和ShowWindow函数显示窗口。
<强>更新强>
我刚刚确认了我的假设:
var
h: hWnd;
ShellExecute(Handle, nil, 'C:\WINDOWS\notepad.exe', nil, nil, SW_HIDE);
sleep(100);
h := FindWindow(nil, 'Namnlös - Anteckningar');
if IsWindow(h) then
ShowWindow(h, SW_SHOW)
显示新创建的窗口(标题为“Namnlös - Anteckningar”,即瑞典语中的“新文件 - 记事本”)。
更新2:
请注意
答案 1 :(得分:1)
并非所有应用程序都在其启动信息中正确地尊重SW _...标志。