Управление внешним окном в visual studio c # - PullRequest
0 голосов
/ 02 апреля 2011

[править] Я собираюсь создать внешнее дополнение для плеера VLC, поэтому для этого я использую функции типа FindWindow, чтобы управлять плеером VLC из моей программы.

Какая лучшая практика программирования для управления внешним окном из вашего собственного окна?
Является ли FindWindowEx лучшей практикой, или FindWindow лучше для этого, или есть какая-то развитая библиотека для нее? Любые советы по использованию FindWindowEx, как это следует использовать?

[править] Кроме того, во многих случаях названия могут отличаться на разных языках,
поэтому hwnd = FindWindow(null, "Calculator") может не работать, если заголовок не «Калькулятор», а «Simulateur» [французский] или «Rechner» [немецкий]. Как я могу убедиться, что он находит окно, независимо от того, какой язык ОС?

И еще один побочный вопрос - есть ли возможность привязать мое приложение рядом с проигрывателем VLC, чтобы любое движение окна проигрывателя vlc также перемещало мое приложение? Я не мог найти подходящую функцию для этого.

1 Ответ

1 голос
/ 02 апреля 2011

Вы не описали пример того, что вы собираетесь делать, но автоматизация .NET может вам помочь.Проверьте эту статью.Также обратите внимание на this

[EDIT]. Чтобы получить возможность того, что окно поиска не зависит от значения заголовка, вы должны использовать только функцию FindWindEx и полагаться на className внешнего окна.Класс не зависит от локали.Автоматизация пользовательского интерфейса, на мой взгляд, делится на два класса:

  • на основе окна.Этот подход предполагает, что вы используете FindWindow и SendMessage для манипулирования внешними окнами
  • на основе координат.При таком подходе вы используете только координаты элементов управления на внешнем окне.Таким образом, вы отправляете сообщения в окно верхнего уровня с конкретными координатами.

Второй подход более прост, но совершенно ненадежен.Это будет работать, пока целевое приложение не изменит макет управления.Поэтому я предлагаю вам использовать FindWindowEx и SenMessage везде, где это может быть применено.

Об привязке вашего приложения к целевому приложению.Да, это возможно, и у вас есть два способа сделать это:
первый и простой способ - создать таймер внутри вашего приложения и проверить координаты целевого приложения и соответственно переместить ваше ap-окно, но такой подход кажется обходным.Второй и более сложный способ - создать Hook и внедрить его в целевой процесс.Вы можете установить ловушку с помощью функции SetWindowHookEx .Также читайте о мышином крючке в C # .И один совет для вас, если вы напишете ловушку, не внедряйте ловушку .NET во все процессы, это может привести к проблемам в управляемых приложениях, если они написаны для разных версий платформы, а не для ловушки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...