Вверх ↑
Этот топик читают: Гость
Ответов: 204
Рейтинг: 2
#1: 2015-03-28 01:12:15 ЛС | профиль | цитата
Есть у нас компонент KeyHook который перехватывает нажатие клавиш. Однако данный компонент вызывает стойкий паркинсон у 99% антивирусов! о чем написано даже в справке к этому компоненту!
Так же есть компонент keyboard который не вызывает никаких нареканий со стороны антивирусов, но вот с помощью этого компонента можно причитать состояние только одной, отдельно взятой кнопки! И вот меня мучает вопрос, а как можно перехватывать нажатие клавиш без срабатывания антивируса? KeyHook сразу понятно не наш вариант, но и запускать одновременно 101 компонент keyboard будет несколько глупо!
Как быть? Какие могут быть варианты???
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#2: 2015-03-28 01:23:39 ЛС | профиль | цитата
ogrif писал(а):
можно причитать состояние только одной, отдельно взятой кнопки!

Это кто такое сказал, а это для чего тогда

Keys=Содержит массив из 256 элементов для всех клавиш. Если элемент массива равен 1, то соответствующая ему клавиша нажата, если 0 - отпущена|3|13
карма: 22

0
Ответов: 204
Рейтинг: 2
#3: 2015-03-28 10:36:13 ЛС | профиль | цитата
nesco писал(а):
Это кто такое сказал, а это для чего тогда

Keys=Содержит массив из 256 элементов для всех клавиш. Если элемент массива равен 1, то соответствующая ему клавиша нажата, если 0 - отпущена|3|13

А ведь и правда! Вот ведь!!!
Неоднократно пользовался этим компонентом и не замечал! Наверно старею!
Спасибо!
------------ Дoбавленo в 10.36:
nesco писал(а):
Keys=Содержит массив из 256 элементов для всех клавиш. Если элемент массива равен 1, то соответствующая ему клавиша нажата, если 0 - отпущена|3|13


Сегодня поэкспериментировал с этой точкой и что-то у меня ничего не выходит! В справке примера работы с этой точкой тоже нет.
Что не так я делаю?


Add(MainForm,2953706,161,112)
{
Width=211
Height=126
}
Add(Keyboard,4729750,301,224)
{
link(onReadKey,8326209:doEvent1,[])
}
Add(Timer,5635047,238,224)
{
Interval=250
Enable=1
link(onTimer,4729750:doReadKey,[])
}
Add(Label,2382502,406,224)
{
Left=105
Top=55
Width=70
Color=-16777196
Caption=""
AutoSize=1
link(Text,4729750:Keys,[(412,212)(342,212)(342,268)(307,268)])
}
Add(Button,15425444,42,224)
{
Left=30
Top=50
link(onClick,16504578:doNext,[])
}
Add(IndexToChanel,7899821,147,224)
{
link(onEvent1,5635047:doTimer,[])
link(onEvent2,2430066:doEvent1,[])
}
Add(Hub,8326209,357,224)
{
link(onEvent1,2382502:doText,[])
link(onEvent2,15890454:doChangeValue,[])
}
Add(LED,15890454,469,231)
{
Left=85
Top=5
}
Add(CounterEx,16504578,91,224)
{
Max=1
Default=1
link(onNext,7899821:doEvent,[])
}
Add(Hub,2430066,203,231)
{
link(onEvent1,5635047:doStop,[])
link(onEvent2,15890454:doOff,[])
}

карма: 1

0
Ответов: 8930
Рейтинг: 823
#4: 2015-03-28 10:54:03 ЛС | профиль | цитата
ogrif, code_35389.txt
карма: 19

0
файлы: 1code_35389.txt [3.8KB] [271]
Ответов: 204
Рейтинг: 2
#5: 2015-03-28 11:01:42 ЛС | профиль | цитата
Леонид,
Ага, спасибо!
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#6: 2015-03-28 12:35:07 ЛС | профиль | цитата
code_35390.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_35390.txt [1KB] [256]
Ответов: 204
Рейтинг: 2
#7: 2015-03-28 12:58:11 ЛС | профиль | цитата
Леонид,
А как по этой схеме прочитать нажатие и отпускание кнопки?
Я пробовал вызывать событие по условию, что если текущий элемент массива = 1 то это нажатие. Но что-то не выходит.

Add(Keyboard,2077171,294,154)
{
}
Add(ArrayEnum,11951596,294,210)
{
link(onItem,383006:doCompare,[])
link(Array,2077171:Keys,[])
}
Add(IntegerArray,11374726,462,140)
{
IntArray=['0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0]
}
Add(ArrayRW,7165902,462,210)
{
link(onRead,6503619:doOperation,[])
link(Array,11374726:Array,[])
link(Index,11066921:Var2,[])
link(Value,13436457:Var2,[])
}
Add(Hub,579552,434,210)
{
link(onEvent1,7165902:doRead,[])
link(onEvent2,7165902:doWrite,[])
}
Add(Math,6503619,504,210)
{
OpType=2
Op2=2
ResultType=0
link(onResult,13041990:doOperation,[])
}
Add(Math,13041990,546,210)
{
link(onResult,13522491:doCase,[])
link(Op2,5098092:Var2,[])
}
Add(GetDataEx,13436457,476,189)
{
Angle=3
link(Data,11951596:Item,[(338,194)(338,258)(300,258)])
}
Add(Case,13522491,588,210)
{
Value=Integer(2)
link(onTrue,604346:doCompare,[])
}
Add(GetDataEx,11066921,469,182)
{
Angle=3
link(Data,16501493:Var3,[])
}
Add(Thread,2066480,203,203)
{
Delay=24
link(onSyncExec,11951596:doEnum,[])
}
Add(If_else,383006,392,210)
{
Type=2
Op2=Integer(31)
link(onTrue,579552:doEvent1,[])
link(Op1,16501493:Var2,[])
}
Add(GetDataEx,16501493,392,182)
{
Angle=3
link(Data,11951596:Index,[(333,187)(333,253)(307,253)])
}
Add(FormatStr,2678100,735,217)
{
Mask="%1;%2"
link(onFString,7235543:doAdd,[])
link(Str1,11066921:Var3,[(741,187)])
link(Str2,11068749:Value,[])
}
Add(StringTable,7235543,833,217)
{
Left=26
Top=71
Width=355
Height=255
FileName="shpik.txt"
Columns=#6:а?аОаД|15:а?б?аЕаМб?=100||
Grid=0
}
Add(Button,4879642,91,203)
{
Left=165
Top=35
link(onClick,2066480:doStart,[])
}
Add(If_else,604346,637,217)
{
Op2=Integer(1)
link(onTrue,11068749:doValue,[(705,223)(705,174)])
link(Op1,5098092:Var3,[(643,194)])
}
Add(GetDataEx,5098092,553,189)
{
Angle=3
link(Data,13436457:Var3,[])
}
Add(Memory,11068749,742,168)
{
link(onData,2678100:doString,[(786,174)(786,191)(723,191)(723,223)])
}






карма: 1

0
Ответов: 8930
Рейтинг: 823
#8: 2015-03-28 13:29:29 ЛС | профиль | цитата
ogrif, вы же видите, что в массиве записывается ПРЕДЫДУЩЕЕ состояния клавиш, соответственно "предыдущее/текущее"="01" нажатие, "10" отпускание code_35393.txt
карма: 19

0
файлы: 1code_35393.txt [3.6KB] [258]
Ответов: 204
Рейтинг: 2
#9: 2015-03-28 14:00:40 ЛС | профиль | цитата
Леонид писал(а):
ogrif, вы же видите, что в массиве записывается ПРЕДЫДУЩЕЕ состояния клавиш, соответственно "предыдущее/текущее"="01" нажатие, "10" отпускание code_35393.txt


кажется сообразил! Спасибо!! ))
карма: 1

0
Ответов: 204
Рейтинг: 2
#10: 2015-04-15 18:18:11 ЛС | профиль | цитата
Прикрутил к схеме определение координат мышки и сохранение в файл. Но вот столкнулся с тем что не знаю как воспроизвести записаную последовательность??!!
Время отчета таймера 24мс. но строчки пишутся только когда нажата кнопка или происходит движение мышкой. что-то я совсем запутался! ничего вообще не приходит на ум.


Как мне воспроизвести все те клики что я записал???


Add(MainForm,8145307,133,105)
{
Width=610
Height=565
}
Add(Keyboard,2077171,378,112)
{
}
Add(ArrayEnum,11951596,378,168)
{
link(onItem,579552:doEvent1,[])
link(Array,2077171:Keys,[])
}
Add(IntegerArray,11374726,462,98)
{
IntArray=['0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0,'0'=0]
}
Add(ArrayRW,7165902,462,168)
{
link(onRead,6192302:doCompare,[])
link(Array,11374726:Array,[])
link(Index,15554606:Var2,[])
link(Value,13436457:Var2,[])
}
Add(Hub,579552,434,168)
{
link(onEvent1,7165902:doRead,[])
link(onEvent2,7165902:doWrite,[])
}
Add(GetDataEx,13436457,476,147)
{
Angle=3
link(Data,11951596:Item,[(422,152)(422,216)(384,216)])
}
Add(Thread,2066480,329,161)
{
Delay=24
link(onSyncExec,11951596:doEnum,[])
}
Add(Button,4879642,140,231)
{
Left=10
Top=35
Caption="rec"
Point(doVisible)
link(onClick,8300624:doEvent1,[])
}
Add(If_else,6192302,511,168)
{
Type=5
link(onTrue,16263899:doCompare,[])
link(Op1,13436457:Var3,[(517,152)])
}
Add(If_else,16263899,560,168)
{
Op2=Integer(1)
link(onTrue,9007692:doStrCat,[])
link(onFalse,11916442:doStrCat,[(599,181)(599,223)])
}
Add(StrCat,9007692,616,168)
{
Str2="=Down"
link(onStrCat,15507356:doWork2,[])
link(Str1,5895056:Var3,[(622,145)])
}
Add(StrCat,11916442,616,217)
{
Str2="=Up"
link(onStrCat,15507356:doWork3,[(662,223)])
link(Str1,5895056:Var2,[(622,208)(608,208)])
}
Add(GetDataEx,15554606,469,140)
{
Angle=3
link(Data,11951596:Index,[(417,145)(417,211)(391,211)])
}
Add(GetDataEx,5895056,602,140)
{
Angle=3
link(Data,15554606:Var3,[])
}
Add(HubEx,15507356,658,168)
{
link(onEvent,7564902:doWork2,[(696,174)(696,244)])
}
Add(ListBox,9958933,917,238)
{
Left=95
Top=20
Width=475
Height=490
AddType=1
}
Add(Timer,678672,309,385)
{
Interval=24
Enable=1
link(onTimer,658370:doStrCatDlm,[])
}
Add(MouseEvent,7491632,400,329)
{
}
Add(StrCatDelim,658370,386,385)
{
Str1="mouseX - "
Str2=" mouseY - "
Point(Delimiter)
link(onStrCatDlm,2048296:doStrCatDlm,[])
link(Delimiter,7491632:MouseX,[])
}
Add(StrCatDelim,2048296,435,385)
{
Str2=" == "
Point(Delimiter)
link(onStrCatDlm,10026908:doCompare,[])
link(Str1,658370:Result,[(441,375)(423,375)(423,429)(392,429)])
link(Delimiter,7491632:MouseY,[(455,373)(413,373)])
}
Add(If_else,10026908,505,385)
{
link(onFalse,12525211:doData,[(549,398)(549,391)])
link(Op2,5502883:Value,[(518,362)(558,362)(558,429)(623,429)])
}
Add(Memory,5502883,617,385)
{
link(onData,7564902:doWork3,[(732,391)])
}
Add(DoData,12525211,568,385)
{
link(onEventData,5502883:doValue,[])
link(Data,2048296:Result,[(574,373)(490,373)(490,429)(441,429)])
}
Add(HubEx,7564902,728,238)
{
link(onEvent,4589388:doValue,[])
}
Add(Hub,8300624,238,231)
{
OutCount=4
link(onEvent1,2066480:doStart,[(290,237)(290,167)])
link(onEvent2,678672:doTimer,[(280,244)(280,391)])
link(onEvent3,13039847:doWork1,[(264,251)(264,279)(44,279)(44,307)])
link(onEvent4,6163725:doTimer,[(256,258)(256,538)])
}
Add(Button,7218088,132,364)
{
Left=10
Top=35
Visible=1
Caption="stop"
Point(doVisible)
link(onClick,13326357:doEvent1,[])
}
Add(MultiElement,13039847,63,301)
{
link(onEvent1,4879642:doVisible,[(117,307)(117,237)])
link(onEvent2,7218088:doVisible,[(117,314)(117,370)])
}
BEGIN_SDK
Add(EditMulti,11788551,21,21)
{
EventCount=2
WorkCount=2
Width=559
Height=522
link(doWork1,12389071:doEvent1,[(133,27)(133,174)])
link(doWork2,4194839:doEvent1,[(119,34)(119,293)])
}
Add(DoData,1662258,245,168)
{
Data=Integer(0)
link(onEventData,2504578:doWork2,[])
}
Add(DoData,8116170,301,217)
{
Data=Integer(1)
link(onEventData,8389973:doWork2,[])
}
Add(DoData,3098572,217,287)
{
Data=Integer(1)
link(onEventData,2504578:doWork3,[(429,293)])
}
Add(DoData,4731833,273,336)
{
Data=Integer(0)
link(onEventData,8389973:doWork3,[(457,342)])
}
Add(Hub,12389071,203,168)
{
link(onEvent1,1662258:doData,[])
link(onEvent2,8116170:doData,[(229,181)(229,223)])
}
Add(HubEx,2504578,425,168)
{
Angle=3
link(onEvent,11788551:onEvent1,[(429,27)])
}
Add(HubEx,8389973,453,217)
{
Angle=3
link(onEvent,11788551:onEvent2,[(457,34)])
}
Add(Hub,4194839,161,287)
{
link(onEvent1,3098572:doData,[])
link(onEvent2,4731833:doData,[(198,300)(198,342)])
}
END_SDK
Add(Hub,13326357,182,364)
{
OutCount=5
link(onEvent1,13039847:doWork2,[(226,370)(226,342)(44,342)(44,314)])
link(onEvent2,2066480:doStop,[(293,377)(293,174)])
link(onEvent3,678672:doStop,[(226,384)(226,398)])
link(onEvent4,6163725:doStop,[(218,391)(218,545)])
link(onEvent5,9666161:doTimer,[(209,398)(209,587)])
}
Add(Button,13620493,779,343)
{
Left=15
Top=480
Caption="save"
link(onClick,4153593:doExecute,[])
}
Add(SDialog,4153593,836,343)
{
Filter="*.txt"
FileName=".txt"
link(onExecute,9958933:doSave,[(877,349)(877,279)])
}
Add(Timer,6163725,371,532)
{
Interval=24
Enable=1
link(onTimer,14322882:doOperation,[])
}
Add(Math,14322882,434,532)
{
Op2=1
link(onResult,5055934:doValue,[])
link(Op1,9585113:Var1,[(440,520)(475,520)(475,576)])
}
Add(Memory,5055934,511,532)
{
Default=Integer(0)
link(onData,6877362:doStrCat,[])
}
Add(StrCatDelim,10161639,637,532)
{
Str1="("
Str2=")"
Point(Delimiter)
link(Delimiter,6877362:Result,[(657,520)(615,520)(615,576)(573,576)])
}
Add(GetDataEx,9585113,511,571)
{
link(Data,5055934:Value,[])
}
Add(Timer,9666161,434,581)
{
Interval=25
Enable=1
AutoStop=1
link(onTimer,5055934:doClear,[(488,587)(488,545)])
}
Add(StrCat,11411558,840,238)
{
link(onStrCat,9958933:doAdd,[])
link(Str1,4589388:Value,[(846,226)(808,226)(808,282)(769,282)])
link(Str2,10161639:Result,[(853,226)(893,226)(893,569)(643,569)])
}
Add(Memory,4589388,763,238)
{
link(onData,11411558:doStrCat,[])
}
Add(StrCat,6877362,567,532)
{
Str2="ms"
link(onStrCat,10161639:doStrCatDlm,[])
link(Str1,9585113:Var3,[(573,520)(556,520)(556,576)])
}

карма: 1

0
Ответов: 1343
Рейтинг: 31
#11: 2015-04-15 19:54:15 ЛС | профиль | цитата
ogrif, для начала лучше привести то что выходит в разбираемый формат (если тебе нравятся подписи надписи... делай таблицу с калонками, и дели по калонкам делиметром, предположим это эдитор такой)
------------ Дoбавленo в 19.54:
что то не понятно накой.... там время такое нарастающее без сброса????
карма: 2

0
Ответов: 8930
Рейтинг: 823
#12: 2015-04-15 19:59:00 ЛС | профиль | цитата
ogrif, совсем не обязательно постоянно записывать положение мыши, достаточно только при клике, да и интервал времени зачем нужен Коллега Rysik правильно заметил, что надо продумать формат записи для лёгкой расшифровки.
Пример записи: code_35498.txt
Пример расшифровки: code_35499.txt
карма: 19

0
файлы: 2code_35498.txt [4.7KB] [224], code_35499.txt [1.8KB] [255]
Ответов: 1343
Рейтинг: 31
#13: 2015-04-15 20:13:12 ЛС | профиль | цитата
вот примерно так выглядит записывающий софт:

code_35500.txt

только доделай систему выдачи времени на клики
------------ Дoбавленo в 20.13:
Леонид писал(а):
не обязательно постоянно записывать положение мыши, достаточно только при клике, да и интервал времени зачем нужен


вот тут уже могу поспорить... время всётаки надо, ибо скажем есть у нас в интернете мануалы всякие где к примеру заранее записывают движения мышки и потом воспроизводят, юзер просто неуспеет всё углядеть за долю секунды как произойдёт 100 эмуляций и перемещений а вот со временем мы уложимся так как и записывали
карма: 2

0
файлы: 1code_35500.txt [5.4KB] [261]
Ответов: 5227
Рейтинг: 587
#14: 2015-04-16 11:49:52 ЛС | профиль | цитата
Идея не плоха сделать макрорекордер (типа визуальные подсказки для ПО и т.п) и сделать бы ЭТО на хуках НО, в Win-7/8 SetWindowsHookEx не пашет. Вот пример для ХР recorder_.zip
Может кто сможет сиё заставить работать в семёрке
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1recorder_.zip [3.4KB] [260]
Ответов: 4631
Рейтинг: 749
#15: 2015-04-16 11:58:45 ЛС | профиль | цитата
Попробуй
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @RecordProc, HInstance, GetCurrentThreadId);

карма: 26

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