C# visual studio c中的控件外部窗口#

C# visual studio c中的控件外部窗口#,c#,visual-studio,dll,ui-automation,C#,Visual Studio,Dll,Ui Automation,[编辑]我打算为VLC播放器构建一些外部插件,因此我使用FindWindow类型的函数,以便从我的程序控制VLC播放器 从您自己的窗口控制外部窗口的最佳编程实践是什么? 是FindWindowEx最佳实践,还是FindWindowEx更好,还是有开发的库?使用FindWindowEx时有什么建议吗 [编辑]此外,在许多情况下,标题可能会随着不同的语言而有所不同, 因此,如果标题不是“Calculator”,而是“Simulator”[法语]或“Rechner”[德语],那么hwnd=FindWi

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

从您自己的窗口控制外部窗口的最佳编程实践是什么?
FindWindowEx
最佳实践,还是
FindWindowEx
更好,还是有开发的库?使用
FindWindowEx
时有什么建议吗

[编辑]此外,在许多情况下,标题可能会随着不同的语言而有所不同,
因此,如果标题不是“Calculator”,而是“Simulator”[法语]或“Rechner”[德语],那么
hwnd=FindWindow(null,“Calculator”)
可能不起作用。无论操作系统语言是什么,如何确保它找到窗口


还有一个附带的问题——是否有可能在VLC播放器旁边锚定我的应用程序,这样VLC播放器窗口的任何移动都会移动我的应用程序?我找不到任何合适的函数。

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

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

  • 基于窗口的。这种方法假设您使用FindWindow和SendMessage来操纵外部窗口
  • 基于坐标的。在这种方法中,只使用外部窗口上控件的坐标。所以,您正在向顶层窗口发送带有特定坐标的消息
第二种方法更简单,但完全不可靠。它将一直工作,直到目标应用程序更改控制布局。因此,我建议您在任何可以应用的地方使用FindWindowEx和SenMessage

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

谢谢,我做了一些更改,所以问题会很清楚。