gpt4 book ai didi

来自旧版 C++ 应用程序窗口问题的 C# 子进程

转载 作者:行者123 更新时间:2023-11-28 08:31:17 27 4
gpt4 key购买 nike

我们有一个 C++ 遗留应用程序,并一直在使用 C# 小程序对其进行扩展,这些小程序使用来自父 C++ 应用程序的 COM 调用。他们调出非模态窗口。此外,我认为这些 .NET 窗口不是 c++ 应用程序的适当子项,因为 EnumChildWindows 没有找到它们,而 EnumWindows 找到了它们。然而,一种类似 child 的行为仍然存在,即如果您关闭父 C++ 应用程序,C# 窗口也会关闭。

我的基本问题是,如果用户调用这些 c# 小程序之一,然后无意中单击了父 (c++) 应用程序窗口,则 c# 窗口会掉到后台。如果用户想要将它带回顶部,他们应该能够在任务栏中单击它的图标。不幸的是,由于某些奇怪的原因,通常需要单击任务栏图标三次!第一次应该把一个隐藏的窗口带到顶部,但它没有。第二次点击最小化隐藏窗口,第三次成功恢复。

在弥合遗留->.NET 鸿沟时,是否还有其他人遇到过此错误/功能?我想知道我是否可以拦截第一次单击我的 C# 小程序的任务栏图标,并以某种方式强制它回到顶部。 :-)

我一直在尝试以下内容:

  [DllImport("User32.dll")]
private static extern int ShowWindow(IntPtr hwnd, IntPtr nCmdShow);

但即使我能正常工作,我仍然需要拦截第一次鼠标点击。感谢您的帮助!

最佳答案

如果 C# 窗口实际上是子窗口,它会工作吗?可以通过将父 HWND 作为参数传递给 C# COM 对象,然后使用 PInvoke 调用 SetParent 来实现这一点。在 C# 窗口上。 (我从来没有这样做过,但听起来至少和与 ShowWindow 和任务栏战斗一样安全?)

(请注意 SetParent 文档中的注释,您可能还需要摆弄子窗口的窗口标志?)

(根据 C# 窗口类型,它可能已经具有您可以使用的 Handle 属性;否则您可以通过 PInvoke 调用 FindWindow 来获取其句柄。)

关于来自旧版 C++ 应用程序窗口问题的 C# 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1918236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com