Как отправить двойной щелчок на клавиатуре сфокусированный объект из c ++? - PullRequest
0 голосов
/ 10 марта 2011

вопрос в том, как отправить двойной клик на объект, который уже сфокусирован на клавиатуре? Например, предположим, что моя мышь находится в правом нижнем положении на экране, если я открою проводник, нажав WIN + E, а затем нажав клавишу ПРОБЕЛ -> я получу фокус на диск (например, c: \ disk), поэтому я хочу знать, на какой координате находится тот фокус, который может послать на него двойной щелчок. Есть ли в C ++ функция, которая делает это для нас?

Ответы [ 4 ]

2 голосов
/ 10 марта 2011
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
  Sleep(10); 
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
  Sleep(10); 
  // Click Two 
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
  Sleep(10); 
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 

От Google:

http://groups.google.com/group/borland.public.delphi.winapi/browse_thread/thread/f1380942baf5c1ae?pli=1

http://msdn.microsoft.com/en-us/library/ms646260(v=vs.85).aspx

0 голосов
/ 15 марта 2011

Проверьте MSAA или UIAutomation на MSDN; это API, которые позволяют вам получить доступ к информации об элементах ниже уровня HWND. Они предназначены для инструментов тестирования и инструментов доступности, которым нужна эта информация. Например, экранная лупа может использовать эти API для отслеживания фокуса клавиатуры, определения местоположения текущего элемента и определения правильных координат для увеличения.

MSAA / UIA широко поддерживаются в Windows - все системные элементы управления (используемые в проводнике) поддерживают его, равно как и содержимое IE, Firefox и некоторых других приложений.

Вы можете использовать инструмент inspect.exe, входящий в состав Windows SDK, для работы с этой функцией.

Обратите внимание, что перед тем, как щелкнуть цель, вы должны убедиться, что элемент в этой точке является тем элементом, который, как вы ожидаете, будет: если на пути есть какой-то другой диалог, щелчок перейдет к этому элементу.

0 голосов
/ 10 марта 2011

Вы можете найти текущее окно с функцией GetFocus. Но в целом нет способа найти место для отправки события двойного щелчка. Вы можете легко узнать размеры и координаты экрана любого окна с помощью функции GetWindowRect. Вы можете отправить это событие в центр окна или в любой его угол или в любое другое место, а в некоторых случаях этого будет достаточно.

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

0 голосов
/ 10 марта 2011

Я не уверен, что это возможно - в вашем примере окно проводника выделяет приводной объект - вам нужен какой-то способ получить координаты объекта в окне проводника (которым вы не управляете, верно? )

Нетрудно отправить двойной щелчок в окне, но определить, что происходит внутри окна, сложно.

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