Пошук ручки до вікна 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.