Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2014-11-23 21:18:54 ЛС | профиль | цитата
procedure THIMouseEvent._work_doClick;
var b:byte;
pos:TPoint;
begin
b := ReadInteger(_Data,_data_Button,_prop_Button);
GetCursorPos(pos);
mouse_event(_mdown[b],pos.x,pos.y,0,0);
mouse_event(_mup[b],pos.x,pos.y,0,0);
end;


и вот такой вопрос по компоненту MouseEvent:
зачем в выше приведённом коде используются координаты, когда нужно только НАЖАТЬ клавишу???
полагаю и в игре при такой раскладке на Windows XP, из за этого происходит эмуляция со мещением курсора вниз, тем самым уводя камеру вниз, или каким образом разгадать такую загадку, из за чего на Windows XP в игрушке при эмуляции, камеру бросает вниз?

ну и ещё в 1 источнике с мануалом по функции mouse_event говорится, что в Windows XP эту функцию заменяют на SendInput
карма: 2

0
Ответов: 8926
Рейтинг: 823
#2: 2014-11-23 21:44:47 ЛС | профиль | цитата
Rysik, вот, вот!
Сам я в игрушки не играю и игроботов не строю, мне действие procedure THIMouseEvent._work_doClick; не сдалось, требую убрать на фиг для экономии кода и времени!
карма: 19

0
Ответов: 1343
Рейтинг: 31
#3: 2014-11-23 21:50:40 ЛС | профиль | цитата
Леонид писал(а):
действие procedure THIMouseEvent._work_doClick;


так оно в играх и не работает кстати нужным образом , надо юзать нажатие и отпускание через определённый интервал

и всё же интересно как реализовать функцию SendInput ?
карма: 2

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#4: 2014-11-23 22:17:30 ЛС | профиль | цитата
Rysik писал(а):
и всё же интересно как реализовать функцию SendInput ?

Ищешь мануал на эту функцию, читаешь (можно найти уже готовый пример на каком-либо ЯВУ), берешь IC и пробуешь реализовать. У меня с первого раза не получилось, на дальнейшее исследование я плюнул, стало не интересно
карма: 22

0
Ответов: 1343
Рейтинг: 31
#5: 2014-11-23 22:28:32 ЛС | профиль | цитата
nesco писал(а):
Ищешь мануал на эту функцию, читаешь


было бы так просто, но я там не понимаю, что за типы данных в функции надо указывать


code_34667.txt
карма: 2

0
файлы: 1code_34667.txt [520B] [255]
Разработчик
Ответов: 26151
Рейтинг: 2127
#6: 2014-11-23 23:55:52 ЛС | профиль | цитата
Rysik писал(а):
было бы так просто, но я там не понимаю, что за типы данных в функции надо указывать


nesco писал(а):
можно найти уже готовый пример на каком-либо ЯВУ


На том же Delphi, к примеру. У меня не получилось, повесило всю систему, поэтому даже браться не буду
карма: 22

0
Ответов: 2265
Рейтинг: 676
#7: 2014-11-24 01:08:46 ЛС | профиль | цитата
Rysik писал(а):
что за типы данных в функции надо указывать
Поменяйте процедуру _work_doClick у MouseEvent на вот этот код и протестируйте:
#pas
procedure THIMouseEvent._work_doClick;
var b:byte;
pos:TPoint;
inp: TInput; //test
mi: TMouseInput; //test
begin
b := ReadInteger(_Data,_data_Button,_prop_Button);
// GetCursorPos(pos);
// mouse_event(_mdown[b],pos.x,pos.y,0,0);
// mouse_event(_mup[b],pos.x,pos.y,0,0);
ZeroMemory(@mi, sizeof(mi)); //test
ZeroMemory(@inp, sizeof(inp)); //test
mi.dwFlags:= _mdown[b]; //test
inp.mi := mi; //test
SendInput(b,inp,sizeof(inp)); //test
mi.dwFlags:= _mup[b]; //test
inp.mi := mi; //test
SendInput(b,inp,sizeof(inp)); //test
end;
nesco писал(а):
повесило всю систему, поэтому даже браться не буду
При первых попытках с кодом, у меня тоже система тушила экран (если подвигать мышь, включался), вроде как проблема была в отсутствии ZeroMemory, но полностью не уверен, нужно тестировать.
XP SP3
карма: 11

0
Ответов: 4630
Рейтинг: 749
#8: 2014-11-24 15:56:46 ЛС | профиль | цитата
nesco писал(а):
У меня не получилось
Здесь рабочий пример: [url]forum.html?q=3&p=272351#p272351[/url]
[offtop]
nesco писал(а):
повесило всю систему
Тому, кто перепутал значения констант INPUT_MOUSE и INPUT_KEYBOARD в windows.pas компилятора Delphi - дать по шапке
А также TKeybdInput.dwExtractInfo[/offtop]
карма: 26

1
Голосовали:Rysik
Ответов: 1841
Рейтинг: 369
#9: 2014-11-24 16:09:40 ЛС | профиль | цитата
nesco писал(а):
можно найти уже готовый пример на каком-либо ЯВУ

Ну, вот только что проверил, вроде работает
#cpp
#include <windows.h>
UINT sendKey(WORD keyCode)
{
INPUT keyEvent{};
keyEvent.type = INPUT_KEYBOARD;
keyEvent.ki.wVk = keyCode;
keyEvent.ki.wScan = MapVirtualKeyEx(keyCode, MAPVK_VK_TO_VSC, GetKeyboardLayout(0));

const UINT nInputs = 1; //Устанавливает число структур в массиве pInputs (keyEvent).
return SendInput(nInputs, &keyEvent, sizeof(keyEvent));
}
карма: 1
0
Ответов: 1343
Рейтинг: 31
#10: 2014-11-24 18:32:24 ЛС | профиль | цитата
Netspirit писал(а):
Здесь рабочий пример: forum.html?q=3&p=272351#p272351

от души, СПАСИБО

sla8a, тоже спасибо
------------ Дoбавленo в 19.32:
sla8a писал(а):
Поменяйте процедуру _work_doClick у MouseEvent на вот этот код и протестируйте


проблема по поводу сдвига курсора во время эмуляции решена!

ну и наверно выкинуть можно mouse_event , и запитать туда полноценный SendInput, так как всё же не правильно получается, что при КЛИКЕ устанавливаются ещё и координаты курсора
карма: 2

0
Ответов: 4630
Рейтинг: 749
#11: 2014-11-25 12:19:19 ЛС | профиль | цитата
Rysik писал(а):
при КЛИКЕ устанавливаются ещё и координаты курсора
Прошу обратить внимание: в этом компоненте есть ошибка в использовании функции mouse_event.

А конкретно: GetCursorPos и подстановка полученных значений в mouse_event используются для того, чтобы произвести клик в том положении, где в данный момент находится курсор. Но:
1) в таком случае в первом параметре mouse_event также должен быть указан флаг MOUSEEVENTF_ABSOLUTE. Без него указанные координаты трактуются как смещение относительно предыдущего нажатия, из-за чего, вероятно, и происходит скачок курсора при эмуляции.
2) А раз так, то отсутствие флага MOUSEEVENTF_ABSOLUTE и 0-вые значения dx, dy избавляют от необходимости использовать GetCursorPos и отлично упрощают код.
карма: 26

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#12: 2014-11-25 12:25:15 ЛС | профиль | цитата
Netspirit, а где окончательный протестированный код
карма: 22

0
Ответов: 4630
Рейтинг: 749
#13: 2014-11-25 12:33:37 ЛС | профиль | цитата
У меня - в уме. А что?
карма: 26

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#14: 2014-11-25 14:30:03 ЛС | профиль | цитата
Netspirit писал(а):
У меня - в уме. А что?

Не, это я что ли прокукарекал
Netspirit писал(а):
Прошу обратить внимание: в этом компоненте есть ошибка в использовании функции mouse_event

Обратили, а где решение вопроса
карма: 22

0
Ответов: 4630
Рейтинг: 749
#15: 2014-11-25 14:36:42 ЛС | профиль | цитата
Обратили - хорошо. С моими выводами согласны? Если да - будет решение.
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)