Сведения о вопросе

Fhohir

12:45, 4th August, 2020

Теги

c#   .net   windows   winapi    

Отправка щелчка мыши на кнопку на панели задач с помощью C#

Просмотров: 383   Ответов: 4

В приложении, над которым я сейчас работаю, требуется вывести на передний план окно внешнего приложения. Выполнение Win32 API вызовов, таких как BringWindowToTop и SetForeground window, не всегда работает. Это связано с некоторыми ограничениями в пределах Windows XP. Что я хотел бы сделать вместо этого, так это отправить имитацию щелчка мыши по кнопке окна на панели задач, которая, как я надеюсь, выведет окно на передний план. Кто-нибудь знает, как это возможно?



  Сведения об ответе

piter

20:45, 11th August, 2020

Проверьте раздел "Как украсть фокус на 2K/XP" в http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, так как это именно то, что вам нужно. Я бы не пошел по маршруту панели задач, так как панель задач может быть скрыта или просто отсутствовать.


  Сведения об ответе

JUST___

17:38, 9th August, 2020

Это вполне возможно. Но все это очень схематично. Ваше приложение также может прервать работу со следующей версией Windows, так как оно не имеет документов. Вам нужно найти дескриптор окна панели задач, затем найти дескриптор окна дочернего окна, представляющего кнопку, а затем отправить ему сообщение WM_MOUSEDOWN (я думаю).

Вот немного о поиске дескриптора окна панели задач:

http://www.codeproject.com/

FWIW, ограничения на BringWindowToTop/SetForeground существуют, потому что это раздражает, когда окно крадет фокус. Это может не иметь значения, если вы работаете в корпоративной среде. Просто имейте это в виду. :)


  Сведения об ответе

9090

21:06, 1st October, 2020

Я использовал это в программе, где мне нужно было имитировать щелчки и движения мыши;

Глобальная библиотека мыши и клавиатуры


  Сведения об ответе

davran

22:25, 14th August, 2020

Честно говоря, у меня никогда не было проблем с тем, чтобы вывести окно на передний план на XP/Vista/2003/2000.

Вам нужно убедиться, что вы делаете следующее:

  1. Проверьте, если IsIconic (свернуто)
  2. Если #1 приводит к true, то вызовите ShowWindow проходящий, что и sw_restore
  3. Тогда звоните SetForegroundWindow

У меня никогда не было проблем, которые я мог бы придумать, чтобы сделать это с помощью этих шагов.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться