簡體   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