Вверх ↑
Ответов: 94
Рейтинг: 2
#1: 2017-02-16 19:50:57 ЛС | профиль | цитата
nesco писал(а):
тк используется API-функция RegisterHotKey

Читал о ней. Я так и подумал, что компонент на ней работает. Тогда вопрос: как обойти это? Программа Auto Hot Key (и ее аналоги) это обходит и сколько я не перечитывал форумов и статей - никто с подобной проблемой не сталкивался.
Да и тут даже вопрос не в этом. Просто откройте блокнот и нажмите Alt: фокус упадет на верхнее меню - в этом вся проблема. Alt в большинстве программ уже выполняет функцию.

Попробуйте так:
Add(MainForm,3267288,742,322)
{
Height=105
link(onCreate,7036869:doEvent1,[])
}
Add(GHotKey,13842337,819,336)
{
Alt=1
Key=49
link(onEventHotKey,13399088:doWork2,[])
}
Add(InlineCode,11970995,875,336)
{
WorkPoints=#61:doKeyStroke=Симулировать набор на клавиатуре указанной строки
EventPoints=#8:onResult|
DataPoints=#3:Str|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|4:uses|29: KOL, Share, Debug, Windows;|0:|0:|4:type|1: |29: PMouseInput = ^TMouseInput;|31: tagMOUSEINPUT = packed record|16: dx: Longint;|16: dy: Longint;|21: mouseData: DWORD;|19: dwFlags: DWORD;|16: time: DWORD;|23: dwExtraInfo: DWORD;|6: end;|30: TMouseInput = tagMOUSEINPUT;|0:|29: PKeybdInput = ^TKeybdInput;|31: tagKEYBDINPUT = packed record|14: wVk: WORD;|16: wScan: WORD;|19: dwFlags: DWORD;|16: time: DWORD;|23: dwExtraInfo: DWORD;|6: end;|30: TKeybdInput = tagKEYBDINPUT;|0:|35: PHardwareInput = ^THardwareInput;|34: tagHARDWAREINPUT = packed record|16: uMsg: DWORD;|18: wParamL: WORD;|18: wParamH: WORD;|6: end;|36: THardwareInput = tagHARDWAREINPUT;|0:|19: PInput = ^TInput;|26: tagINPUT = packed record|17: Itype: DWORD;|19: case Integer of|27: 0: (mi: TMouseInput);|27: 1: (ki: TKeybdInput);|30: 2: (hi: THardwareInput);|6: end;|20: TInput = tagINPUT;|0:|0:|0:|29: THiAsmClass = class(TDebug)|11: private|0:|10: public|21: Str: THI_Event;|29: onResult: THI_Event; |59: procedure doKeyStroke(var _Data: TData; Index: Word);|6: end;|2: |129: function SendInput(cInputs: UINT; var pInputs: TInput; cbSize: Integer): UINT; stdcall; external 'user32.dll' name 'SendInput';|0:|5:const|18: INPUT_MOUSE = 0;|21: INPUT_KEYBOARD = 1;|21: INPUT_HARDWARE = 2;|2: |32: KEYEVENTF_EXTENDEDKEY = $0001;|26: KEYEVENTF_KEYUP = $0002;|28: KEYEVENTF_UNICODE = $0004;|29: KEYEVENTF_SCANCODE = $0008;|2: |22: MAPVK_VK_TO_VSC = 0;|22: MAPVK_VSC_TO_VK = 1;|23: MAPVK_VK_TO_CHAR = 2;|25: MAPVK_VSC_TO_VK_EX = 3;|2: |2: |14:implementation|0:|0:|0:|42:procedure SimulateKeyPress(Key: WideChar);|3:var|31: Input: array[0..1] of TInput;|5:begin|36: FillChar(Input, SizeOf(Input), 0);|18: with Input[0] do|7: begin|28: Itype := INPUT_KEYBOARD;|14: with ki do|9: begin|25: wScan := Word(Key);|34: dwFlags := KEYEVENTF_UNICODE|8: end;|6: end;|18: with Input[1] do|7: begin|28: Itype := INPUT_KEYBOARD;|14: with ki do|9: begin|25: wScan := Word(Key);|54: dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;|8: end;|6: end;|53: SendInput(Length(Input), Input[0], SizeOf(TInput));|4:end;|0:|0:|66:procedure THiAsmClass.doKeyStroke(var _Data: TData; Index: Word); |3:var|16: S: WideString;|13: I: Integer;|5:begin|34: S := ReadString(_Data, Str, '');|2: |28: for I := 1 to Length(S) do|7: begin|27: SimulateKeyPress(S[I]);|6: end;|39: _hi_CreateEvent(_Data, @onResult, 0);|4:end;|0:|0:|4:end.|
link(Str,13116176:Text,[])
}
Add(Edit,13116176,875,287)
{
Left=10
Top=5
Width=365
Text="абвгде"
}
Add(Edit,5979537,931,287)
{
Left=10
Top=35
Width=365
Text=""
}
Add(GHotKey,12791665,819,371)
{
Ctrl=1
Key=49
link(onEventHotKey,13399088:doWork3,[(865,377)])
}
Add(Hub,7036869,791,336)
{
link(onEvent1,13842337:doStartHotKey,[])
link(onEvent2,12791665:doStartHotKey,[(812,349)(812,377)])
}
Add(HubEx,13399088,861,336)
{
link(onEvent,11970995:doKeyStroke,[])
}
Так ведь должно работать?
карма: 0

0
Редактировалось 2 раз(а), последний 2017-02-16 20:17:49