Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2021-02-08 04:07:03 ЛС | профиль | цитата
По мышке всё разжёвано и работает...

С клавиатурой что? если ZeroMemory не ставить, то экраны в бешенство, магия происходит, а если поставить то ничего не происходит



Add(InlineCode,3935702,322,189)
{
@Hint=#22:Запрос NamePC Name Bit|
@Color=16777130
WorkPoints=#3:do1|3:do2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: on1, on2: THI_Event;|48: procedure do1(var _Data:TData; Index:word);|48: procedure do2(var _Data:TData; Index:word);|5: end;|0:|0:|14:implementation|0:|5:const|102: _mdown:array[1..3]of cardinal = (MOUSEEVENTF_LEFTDOWN,MOUSEEVENTF_RIGHTDOWN,MOUSEEVENTF_MIDDLEDOWN);|94: _mup:array[1..3]of cardinal = (MOUSEEVENTF_LEFTUP,MOUSEEVENTF_RIGHTUP,MOUSEEVENTF_MIDDLEUP);|2: |0:|0:|0:|26:procedure THiAsmClass.do1;|0:|11:var b:byte;|86: inp: TInput; //test|86: mi: TMouseInput; //test|5:begin|10: b := 1;|86: ZeroMemory(@mi, sizeof(mi)); //test|86: ZeroMemory(@inp, sizeof(inp)); //test|86: mi.dwFlags:= _mdown[b]; //test|86: inp.mi := mi; //test|86: SendInput(b,inp,sizeof(inp)); //test|86: mi.dwFlags:= _mup[b]; //test|86: inp.mi := mi; //test|86: SendInput(b,inp,sizeof(inp)); //test|0:|4:end;|0:|0:|26:procedure THiAsmClass.do2;|0:|3:var|0:|11:TI: TInput;|0:|16:KI: TKeybdInput;|0:|0:|5:begin|0:|0:|0:|27:TI.Itype := INPUT_KEYBOARD;|0:|0:|0:|88:// ZeroMemory(@KI, sizeof(KI)); //test|86: // ZeroMemory(@TI, sizeof(TI)); //test|0:|16: KI.wVk := 49;|0:|19: KI.dwFlags := 0;|0:|15: TI.ki := KI;|0:|32: SendInput(1, TI, SizeOf(TI));|0:|33: KI.dwFlags := KEYEVENTF_KEYUP;|0:|15: TI.ki := KI;|0:|32: SendInput(1, TI, SizeOf(TI));|0:|0:|4:end;|0:|0:|4:end.|
}

карма: 2

0
Ответов: 4628
Рейтинг: 749
#2: 2021-02-08 12:28:30 ЛС | профиль | цитата
А если скомпилировать компилятором FPC (старым или новым)? /topic/64664/0#p273347

Добавь
const
INPUT_KEYBOARD = 1;


Редактировалось 1 раз(а), последний 2021-02-08 12:29:20
карма: 26

0
Ответов: 1343
Рейтинг: 31
#3: 2021-02-08 13:40:27 ЛС | профиль | цитата
Netspirit писал(а):
const
INPUT_KEYBOARD = 1;



странно, вроде константа прописана в windows.pas, IC подхватывает её, но не работает, а если прям в IC прописать, то работает, причём тот же самый KEYEVENTF_KEYUP подхватывает из того же windows.pas


Netspirit писал(а):
А если скомпилировать компилятором FPC (старым или новым)? /topic/64664/0#p273347



да, на этот пост обратил внимание и предварительно поменял местами значения констант, эффекта не дало

обычный FPC ругается на отсутствие SendInput, а новые 32 и 64 просто схема не работает, но компилируется



----------------------------------------------------------------------------------

оказывается я менял файл windows.pas который от FPC обычного), а включения windows у дельфи нету исходника)


--------------------------------------------

зачем то для FPC обычного затёрли SendInput, вернул обратно, компилирует, работает

в итоге FPC и Delphi работают, а вот новые FPC пока не хочет
карма: 2

0
Ответов: 4628
Рейтинг: 749
#4: 2021-02-08 14:13:26 ЛС | профиль | цитата

procedure EmulateKeyPress(VKCode: Byte);
var
inp: packed array [0..1] of TInput;
begin
//FillChar(inp[0], SizeOf(TInput), 0);
//FillChar(inp[1], SizeOf(TInput), 0);

inp[0].Itype := INPUT_KEYBOARD;
inp[0].ki.wVk := VKCode;
inp[0].ki.dwFlags := 0;

inp[1].Itype := INPUT_KEYBOARD;
inp[1].ki.wVk := VKCode;
inp[1].ki.dwFlags := KEYEVENTF_KEYUP;

SendInput(2, inp[0], SizeOf(TInput));
end
карма: 26

0
Ответов: 1343
Рейтинг: 31
#5: 2021-02-08 14:21:38 ЛС | профиль | цитата
Netspirit писал(а):

procedure EmulateKeyPress(VKCode: Byte);
var
inp: packed array [0..1] of TInput;
begin
//FillChar(inp[0], SizeOf(TInput), 0);
//FillChar(inp[1], SizeOf(TInput), 0);

inp[0].Itype := INPUT_KEYBOARD;
inp[0].ki.wVk := VKCode;
inp[0].ki.dwFlags := 0;

inp[1].Itype := INPUT_KEYBOARD;
inp[1].ki.wVk := VKCode;
inp[1].ki.dwFlags := KEYEVENTF_KEYUP;

SendInput(2, inp[0], SizeOf(TInput));
end



под новыми FPC не работает
карма: 2

0
Ответов: 4628
Рейтинг: 749
#6: 2021-02-08 14:35:16 ЛС | профиль | цитата
В файле HiAsm\compiler\FPC2\src\packages\KOL\KOL_FPC.inc поправь строку 85 (либо скопируй в свой код в секцию type):
function SendInput(cInputs: UINT; var pInputs: TInput; cbSize: Integer): UINT; stdcall; external 'user32' name 'SendInput';

После исправления выполни файлы
HiAsm\compiler\FPC2\src\_make_KOL_A.bat
HiAsm\compiler\FPC2\src\_make_KOL_U.bat
карма: 26

0
Ответов: 1343
Рейтинг: 31
#7: 2021-02-09 00:16:14 ЛС | профиль | цитата
Netspirit писал(а):
либо скопируй в свой код в секцию type


тааак, новый FPC x32 заработал, а вот x64 нет
карма: 2

0
Ответов: 4628
Рейтинг: 749
#8: 2021-02-10 12:36:22 ЛС | профиль | цитата
Вот поправленный KOL_FPC.inc - замени и выполни выше указанные скрипты для пересборки.
карма: 26

0
файлы: 1KOL_FPC.inc_fix_2021-02-10.zip [964B] [385]
Ответов: 1343
Рейтинг: 31
#9: 2021-02-10 23:20:28 ЛС | профиль | цитата
Netspirit писал(а):
Вот поправленный KOL_FPC.inc - замени и выполни выше указанные скрипты для пересборки.



спасибо, работает
карма: 2

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