【问题标题】:Bring window of another process forward将另一个进程的窗口向前推进
【发布时间】:2012-11-21 19:46:06
【问题描述】:

我有一个 C Legacy 应用程序,这个应用程序会随着时间的推移打开和关闭窗口(它是一个服务器应用程序)。

在同一台机器上,我正在运行一个 C# winforms 应用程序。

这是我的目标: 我的 C# 应用程序向我的 C 应用程序发送一条 win32 消息。 C 应用程序打开窗口。我希望新打开的 C 窗口出现在我的 C# 应用程序前面。

目前的流程如下:

  • C#向C发送win32消息
  • C 接收并打开新窗口
  • C 试图让自己前进
  • (此时我想知道 C# 是否应该告诉 C '把你自己带到我面前')

edit 除了让 C 窗口以某种方式出现在前面的部分之外,我已经完成了所有工作。我目前向 C 应用程序发送消息,它会打开新窗口(在同一 .exe 的所有其他窗口前面),但在我的 C# 应用程序下。

我尝试过使用

[DllImport("user32.dll")]
static extern bool AllowSetForegroundWindow(ServerWindowHandle);

但是没有运气。我是否需要让我的 C 应用程序拥有我的 .net 应用程序的“所有权”? C# 应用程序正在通过 programinvoke 启动。

【问题讨论】:

标签: c# windows winforms winapi


【解决方案1】:

你能修改 C 应用程序吗?如果是这样,请在 C 应用程序窗口句柄上调用 SetForegroundWindow。或者,如果您可以获得对 C 应用程序窗口句柄的引用,则可以从 C# 应用程序进行此调用。

【讨论】:

  • 我很确定 C 应用程序已经调用了 SetForegroundWindow。问题是它没有把自己带到 C# 应用程序前面(注意 C# 在我发送消息时是前台应用程序)
【解决方案2】:

您没有提及您使用的是什么操作系统,但通过一些搜索,我发现 SetForegroundWindow 显然并不总是在 Windows 7 上工作。描述了一种解决方法here。也许您可以从那里获取一些想法并将它们应用到 C 或 C# 应用程序中以获得可行的解决方案?

【讨论】:

  • 哈,你的链接失效了,所以我看不出你提供的是否是解决方案。我的解决方案是三个步骤(现在挖掘代码)1)AllowSetForegroundWindow,2)SetForegroundWindow,3)SetActiveWindow
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多