Вверх ↑
Этот топик читают: Гость
Ответов: 26
Рейтинг: 1
#1: 2018-02-18 01:47:54 ЛС | профиль | цитата
Столкнулся с такой проблемой, что не могу найти не громоздкий способ сделать такое преобразование. Есть ли какое нибудь решение?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8886
Рейтинг: 823
#2: 2018-02-18 11:02:32 ЛС | профиль | цитата
hajikov, а разные языки, а нажатые Shift..., да и клавиши дополнительные
Вот схемка, составьте таблицу соответствия, а потом решите, нужно-ли
Коды


Add(MainForm,2953706,329,112)
{
Width=427
Point(Handle)
Point(onChar)
link(onChar,15338376:doEvent1,[])
}
Add(KeyEvent,15110300,329,224)
{
Point(Ctrl)
Point(Alt)
Point(Shift)
link(Handle,2953706:Handle,[])
link(Ctrl,1779192:Checked,[(349,204)(258,204)])
link(Alt,10967552:Checked,[(356,196)(300,196)])
link(Shift,10319674:Checked,[])
}
Add(FormatStr,16635988,476,140)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,15575696:doAdd,[])
link(Str1,1562305:Count,[(482,131)(468,131)(468,264)(202,264)])
link(Str3,10076623:Value,[])
}
Add(Button,7834769,133,217)
{
Left=5
Top=30
Width=45
Caption="Далее"
link(onClick,1562305:doNext,[])
}
Add(CheckBox,1779192,252,154)
{
Left=10
Top=60
Caption="Ctrl"
}
Add(CheckBox,10967552,294,154)
{
Left=10
Top=85
Caption="Alt"
}
Add(CheckBox,10319674,357,154)
{
Left=10
Top=115
Caption="Shift"
}
Add(Counter,1562305,196,217)
{
Max=255
link(onNext,14567257:doEvent1,[])
}
Add(Hub,14567257,252,217)
{
link(onEvent1,1124627:doText,[(277,223)(277,209)(186,209)(186,160)])
link(onEvent2,15110300:doPress,[])
}
Add(Label,1124627,196,154)
{
Left=50
Top=35
Width=35
}
Add(Hub,15338376,399,133)
{
link(onEvent1,14428406:doConvert,[(424,139)(424,90)])
link(onEvent2,16635988:doString,[])
}
Add(Convertor,14428406,441,84)
{
Mode=3
link(onResult,10076623:doValue,[])
}
Add(Memory,10076623,490,84)
{
}
Add(StringTable,15575696,532,140)
{
Left=80
Top=5
Width=325
Height=255
Columns=#12:Код клав=100|10:Символ=100|12:Код симв=100|
Grid=0
}
Add(Button,13717972,420,203)
{
Left=5
Top=210
Width=70
Caption="Сохранить"
link(onClick,2366596:doExecute,[])
}
Add(SDialog,2366596,476,203)
{
link(onExecute,15575696:doSave,[(515,209)(515,174)])
}

карма: 19

0
Ответов: 26
Рейтинг: 1
#3: 2018-02-18 13:19:19 ЛС | профиль | цитата
составьте таблицу соответствия, а потом решите, нужно-ли

Вот и у меня тоже единственное решение было через таблицу соответствия, поэтому и задавал вопрос(

Попробую описать поподробнее что я хочу. Есть программка, в которую доступен только ввод с клавиатуры (вставка через буфер обмена не работает). Хочу написать программу, которая бы помогла мне заполнять данные, то есть нужно чтобы символы из строки я смог ввести в ту программу посимвольно. Как я понимаю, чтобы сделать, единственный вариант это использование KeyEvent. Все беда в том, что он принимает только код клавиши клавиатуры, поэтому и встал вопрос преобразование одного кода в другой.
карма: 0

0
Ответов: 1924
Рейтинг: 172
#4: 2018-02-18 15:57:20 ЛС | профиль | цитата
hajikov, такое не сработает?

Add(SendMessage,15421399,420,343)
{
Message=10
link(Handle,15564417:Handle,[])
link(LParam,14189995:Memory,[])
}
Add(MemoryStream,14189995,420,147)
{
Point(Memory)
Point(doSize)
}
Add(DataToFile,13414976,420,196)
{
Type=6
link(Stream,14189995:Stream,[])
}
Add(MouseEvent,15564417,406,280)
{
Point(Handle)
}
Add(MainForm,10155007,252,315)
{
Left=20
Top=105
Width=451
Height=121
Point(onClose)
link(onCreate,2317400:SetHook,[])
link(onClose,2317400:UnHook,[])
}
Add(InlineCode,2317400,301,329)
{
@Hint=#49:Глобальный перехват клавиатуры (Вариант от Ivann)|
WorkPoints=#7:SetHook|6:UnHook|
EventPoints=#7:onKeyUp|9:onKeyDown|10:onSysKeyUp|12:onSysKeyDown|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,Windows,Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|40: procedure onKey(param,code:integer);|9: public|56: onKeyUp,onKeyDown,onSysKeyUp,onSysKeyDown:THI_Event;|4: |46: procedure SetHook(var dt:TData; Idx:WORD);|45: procedure UnHook(var dt:TData; Idx:WORD);|5: end;|0:|14:implementation|0:|5:const|21: WH_KEYBOARD_LL = $D;|0:|4:var |12: Hook:HHOOK;|45: ret:procedure(param,code:integer) of object;|0:|82:function HookProc(Code: integer; wParam:integer;lParam: LongInt): HRESULT;stdcall;|5:begin|35: ret(wParam,PInteger(lParam)^); |55: result := CallNextHookEx(Hook, Code, wParam , lParam);|4:end;|0:|30:procedure THiAsmClass.SetHook;|5:begin|12: ret:=onKey;|64: Hook := SetWindowsHookEx(WH_KEYBOARD_LL,@HookProc,HInstance,0);|4:end;|0:|28:procedure THiAsmClass.onKey;|5:begin|16: Case Param of|45: WM_KEYDOWN :_hi_OnEvent(onKeyDown,code);|43: WM_KEYUP :_hi_OnEvent(onKeyUp,code);|48: WM_SYSKEYDOWN:_hi_OnEvent(onSysKeyDown,code);|46: WM_SYSKEYUP :_hi_OnEvent(onSysKeyUp,code);|9: end; |4:end;|68:{Сообщение WM_SYSKEYDOWN посылается окну с фокусом клавиатуры тогда,|83:когда пользователь удерживает нажатой клавишу ALT, а затем нажимает другую клавишу.|92:Это происходит также тогда, когда никакое окно в настоящее время не имеет фокуса клавиатуры;|65:в этом случае сообщение WM_SYSKEYDOWN посылается активному окну.}|0:|29:procedure THiAsmClass.UnHook;|5:begin|27: UnhookWindowsHookEx(Hook);|4:end;|0:|4:end.|
link(onKeyDown,4499858:doCase,[])
}
Add(Case,4499858,350,336)
{
Value=Integer(162)
link(onTrue,15421399:doSendMessage,[])
}
Add(Edit,7331696,266,154)
{
Width=265
Text=""
link(onChange,15267767:doEvent1,[])
}
Add(Hub,15267767,322,154)
{
OutCount=3
link(onEvent1,14189995:doClear,[])
link(onEvent2,9265308:doData,[])
link(onEvent3,13414976:doPut,[(378,174)(378,202)])
}
Add(DoData,9265308,357,161)
{
Data=Integer(100000)
link(onEventData,14189995:doSize,[])
}

Просто пишешь нужный текст в поле, подводишь мышь к тому полю, куда нужно записать текст, нажимаешь Ctrl.
карма: 9
0
Ответов: 26
Рейтинг: 1
#5: 2018-02-18 21:58:18 ЛС | профиль | цитата
hajikov, такое не сработает?

К сожалению тоже данные не хочет принимать таким образом.
карма: 0

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