德尔福:SW_HIDE不再起作用了吗?

时间:2010-03-21 22:06:10

标签: delphi

我必须从我的程序中运行一些其他应用程序并隐藏它的表单。在Windows XP中很简单:

  ShellExecute(Handle, 'open', 'foo.exe', nil, nil,SW_HIDE);

但似乎它在Vista和win7中不再起作用了。

2 个答案:

答案 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:

请注意

  • 我本可以使用'open'作为动词,而不是 nil
  • 如果我用'notepad.exe'替换notepad.exe的完整路径,我的代码将无效。

答案 1 :(得分:1)

并非所有应用程序都在其启动信息中正确地尊重SW _...标志。