2013-09-29 5 views
1

В настоящее время я пытаюсь эмулировать событие прокрутки мыши в текущем открывшемся окне. Я реализую его с помощью функции setscrollpos() в Visual C++.Как эмулировать прокрутку мыши для текущего окна?

SetScrollPos(hwnd,SB_VERT,0,TRUE); 

    UpdateWindow(hwnd); 

Как передать имя текущего окна, открытого для параметра hwnd?

+0

Вы пытаетесь отправить это сообщение в другое приложение? Если это так, ваш вопрос лучше подумать как «Как получить hwnd определенного окна?» Вы можете использовать SendInput, когда у вас есть этот hwnd для _correctly_ имитировать активность пользовательского ввода-устройства (материал мыши, клавиатура и т. Д.). – enhzflep

+0

Что означает «текущее окно»? –

+0

Когда я использую фазу «текущее окно», я имею в виду любое окно, открытое пользователем ноутбука. Прокрутка мыши контролируется с помощью веб-камеры, используя особый жест. Я не уверен, как получить имя открытого окна для перехода к параметру hwnd ?? – Sade

ответ

1

Миллион лет назад я создал программу, которая будет играть WinMine (Windows MineSweeper) для меня.

Это включало

  • (а) Получить HWND окна с заголовком «Сапер»
  • (б) Вызов setWindowForeground на нем
  • (с) Открытие памяти процесса и считывая некоторые данные о том, что соответствует текущему состоянию игры.
  • (d) изучение этой памяти, чтобы определить количество и положение мин
  • (е) Перемещение мыши в центр каждой «безопасной» плитки перед отправкой левой кнопкой вниз, затем лево- button up message

Игра может быть успешно завершена в течение 100% времени менее чем за 1 секунду - оставшаяся время составляющая высокого балла всегда была такой же, как и общее время, необходимое для решения проблемы. Для ударов я также добавил код, который бы установил игровое поле в 1-битное изображение - каждая ячейка была в безопасности или нет.

Как бы то ни было, для меня работает следующий код: он просто прокручивает этот блок после ввода на 4 строки.

Если он запущен в режиме отладки или с видимым окном консоли - события проглатываются им, поскольку это окно переднего плана. Я запустил этот код без окна. Редактирование кода с последующим ударом сборки, прежде чем переключиться обратно в это окно, в то время как строение кода привело к прокрутке этого окна ввода.

#include <windows.h> 
#include <winuser.h> 

const int minWheelMovement = 120; 

int WINAPI WinMain (HINSTANCE hThisInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpszArgument, 
        int nCmdShow) 
{ 

    HWND foregroundWindow; 
    foregroundWindow = GetForegroundWindow(); 
    mouse_event(MOUSEEVENTF_WHEEL, 0,0,4*minWheelMovement, 0); 
} 
+0

Не могли бы вы поделиться этим небольшим кодом приложения на github? Кажется очень интересным ... –

+0

@AlexandreMarcondes - Нет, у меня нет учетной записи github и вы не настроены на это. Я запишу его на пастебин, доступный в течение следующих 24 часов. Всего минуту или две. Однако обратите внимание: программа больше не работает правильно, поскольку она была написана для версии MineSweeper, которая поставляется с WindowsXP. – enhzflep

+1

@AlexandreMarcondes - здесь, поймайте! http://pastebin.com/U2ZuvXuH – enhzflep

Смежные вопросы