gpt4 book ai didi

c# - 如何调用 AnimateWindow 函数来为外部窗口/进程设置动画

转载 作者:行者123 更新时间:2023-11-30 21:34:53 26 4
gpt4 key购买 nike

我正在使用 ShowWindow函数隐藏和显示外部进程的主窗口。现在,我想使用 AnimateWindow在我显示或隐藏窗口时调用 ShowWindow 以动画显示该窗口之前的函数,但是,正如 MSDN 上的文档所述,如果线程(我在其上正在调用 Animatewindow) 不拥有我想要设置动画的窗口...

对此有什么解决方案吗?我可以通过某种方式“拥有”该线程以在该外部进程的 UI 线程上远程执行 Animatewindow 函数,或任何其他更简单的解决方案这?。至少我知道窗口句柄,并且我可以使用 GetWindowThreadProcessId 检索创建该窗口的线程的线程 ID。功能。

那么,这可以通过任何方式完成吗?

如果此信息可能有用:外部进程是一个 .NET 可执行文件(一个 WPF 桌面应用程序),我想为其主窗口设置动画。该应用程序支持应用程序将在启动时加载的 dll 文件形式的插件,因此我在类库中调用 ShowWindowAnimateWindow,运行我的代码我在其上运行消息循环(用于其他需要)的新线程。我无权访问该应用程序的源代码来实现任何类型的进程间通信功能,例如命名管道或共享内存块。

我要求使用 C# 或 VB.NET 的解决方案,这无关紧要。

最佳答案

如文档所述,只有拥有窗口的线程才能在窗口上调用 AnimateWindow()

您不能取得其他人的线程或窗口的所有权。因此,实现您的目标的唯一方法是将代码注入(inject)拥有该窗口的线程。

让您的插件 DLL 调用 GetWindowThreadProcessId() 来获取拥有该窗口的线程的 ID,然后调用 SetWindowsHookEx() 来安装线程特定的消息该线程的钩子(Hook)。

然后,您可以向窗口发送自定义消息,您的消息 Hook 处理程序将在拥有该窗口的线程的上下文中运行,然后可以在该窗口上调用 AnimateWindow() .

关于c# - 如何调用 AnimateWindow 函数来为外部窗口/进程设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743525/

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