0

[编辑] 我打算为 VLC 播放器构建一些外部插件,因此我使用FindWindow函数类型来从我的程序中控制 VLC 播放器。

从您自己的窗口控制外部窗口的最佳编程实践是什么?
FindWindowEx最佳实践,还是FindWindow更好,或者是否有一些开发的库?FindWindowEx应该使用任何使用它的技巧吗?

[编辑] 此外,在许多情况下,标题可能因不同的语言而异,
因此hwnd = FindWindow(null, "Calculator")如果标题不是“计算器”而是“模拟器”[法语]或“Rechner”[德语],则可能无法正常工作。无论操作系统语言是什么,我如何确保它找到窗口?

还有另一个问题 - 是否有可能将我的应用程序锚定在 VLC 播放器旁边,这样 vlc 播放器窗口的任何移动也会移动我的应用程序?我找不到任何合适的功能。

4

1 回答 1

1

您没有描述您打算执行的示例,但 .NET 自动化可能会对您有所帮助。看看这篇文章。这个也要注意

[编辑] 好吧,要获得独立于标题值的查找窗口的可能性,您应该只使用 FindWindEx 函数并依赖于外部窗口的类名。类与语言环境无关。我认为 UI 自动化分为两类:

  • 基于窗口。这种方法假设您使用 FindWindow 和 SendMessage 来操作外部窗口
  • 基于坐标。在这种方法中,您仅使用外部窗口上的控件坐标。因此,您正在向具有特定坐标的顶级窗口发送消息。

第二种方法更容易,但完全不可靠。它将一直工作到目标应用程序更改控制布局。所以我建议你在任何可以应用的地方使用 FindWindowEx 和 SenMessage。

关于使用目标应用程序锚定您的应用程序。是的,有可能,你有两种方法可以做到这一点:
第一种也是简单的方法是在你的应用程序中创建计时器并检查目标应用程序的坐标并相应地移动你的应用程序窗口,但这种方法似乎是解决方法。第二种也是更复杂的方法是创建 Hook 并将其注入目标进程。您可以使用SetWindowHookEx函数设置挂钩。另请阅读C# 中的鼠标钩子。如果您将编写一个钩子,请给您一个提示,不要在所有进程中注入 .NET 钩子,如果它们为不同的平台版本而不是您的钩子编写,这可能会在托管应用程序中出现问题。

于 2011-04-02T09:24:59.713 回答