繁体   English   中英

在Visual Studio C#中控制外部窗口

[英]Control external window in visual studio c#

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

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

[edit]而且,在许多情况下,标题可能会随着语言的不同而变化,
因此hwnd = FindWindow(null, "Calculator")如果标题不是“ Calculator”而是“ Simulateur” [French]或“ Rechner” [German] hwnd = FindWindow(null, "Calculator")可能不起作用。 无论OS语言是什么,如何确保它找到窗口?

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

您没有描述要执行的示例,但是.NET自动化可能会为您提供帮助。 查看这篇文章。 也要注意这个

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM