Пошук ручки до вікна WPF


109

Форми Windows мали властивість win1.Handle, яка, якщо я пам'ятаю, повертає ручку основної ручки вікна?

Чи існує еквівалентний спосіб отримати ручку вікна WPF?

Я знайшов такий код в Інтернеті,

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

але я не думаю, що це допоможе мені, оскільки в моїй програмі є кілька вікон.

Дякую!!


24
Дозвольте дати вам кілька привітних порад, Еван. Не займайтеся програмою культового культу! Розсічіть код, який ви знайшли в Інтернеті. Ви чітко бачите, що він проходить Application.Current.MainWindow, і з цього ви можете пояснити, що передавши посилання на інше вікно, ви отримаєте свою відповідь. Я ніколи не використовував WindowInteropHelper, але все-таки міг відповісти на питання, просто обґрунтувавши це.
Gregory Higley

1
ви праві, дякую! я втомився сьогодні :).
Еван

5
Нема проблем! І я не мав на увазі це як критику, аби бути корисним. Ми всі зробили невеликі вантажі-чаклування час від часу. :)
Gregory Higley

Відповіді:


142

Ну а замість того, щоб проходити Application.Current.MainWindow, просто передайте посилання на те, яке саме вікно ви хочете: new WindowInteropHelper(this).Handleі так далі.


Щойно я виявив, що загальне діалогове вікно FileSave посилається на вікно верхнього рівня, тож ви можете передати, наприклад, посилання на головне вікно програми. Збережіть послуги Interop, коли вам це справді потрібно.
Девід А. Грей

39

Просто використовуйте своє вікно з класом WindowsInteropHelper:

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

Зараз ви запитуєте головне вікно програми, з якого завжди буде таке. Однак ви можете використовувати цю саму методику в будь-якому вікні, за умови, що це клас Window, похідний від System.Windows.Window.



3

Якщо ви хочете, Windowщо з певних причин ви хочете вікна ручки для ВСІХ додатків , ви можете скористатись Application.Windowsвластивістю, щоб отримати всі Windows, а потім використати, WindowInteropHandlerщоб отримати їх ручки, як ви вже демонстрували.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.