Page 4 of 29

Re: Вопрос

Posted: Sun Nov 22, 2015 2:23 pm
by ALEXS1983
Функция 2 - получить код нажатой клавиши.
Существует ли описание кодов клавиш?... скажем в виде простой таблицы или чего-то подобного .

Re: Вопрос

Posted: Sun Nov 22, 2015 2:30 pm
by paulcodeman
[quote="ALEXS1983"]Функция 2 - получить код нажатой клавиши.
Существует ли описание кодов клавиш?... скажем в виде простой таблицы или чего-то подобного .[/quote]
Не находил, я использую программу SCANCODE, которая есть в дистрибутиве.

Re: Вопрос

Posted: Sun Nov 22, 2015 5:01 pm
by ALEXS1983
[quote="pavelyakov"]Не находил, я использую программу SCANCODE, которая есть в дистрибутиве.[/quote]
да про SCANCODE я знаю. Не очень-то удобна для реализации того что я хочу. :-)

Posted: Sun Nov 22, 2015 8:08 pm
by punk_joker
А что именно хотите?

Re:

Posted: Sun Nov 22, 2015 8:42 pm
by ALEXS1983
[quote="punk_joker"]А что именно хотите?[/quote]
Хочу создать модуль DLL который эмулирует сис.функции КОС. В частности хочу реализовать Функция 2 - получить код нажатой клавиши
Об этом если хочешь, можешь почитать здесь:
http://kolibriosandfasm.mybb.ru/viewtopic.php?id=13
Если влом читать всё, то читай со слов: "Так родилась идея создания DLL-модуля, который будет выполнять роль визуализатора результатов. "

Re: Вопрос

Posted: Sun Nov 22, 2015 10:22 pm
by Pathoswithin
"Как можно предсказать всевозможные вопросы, которые могут возникнуть у кого-то?"
Иногда можно (в идеале), или почти все, в этом и заключается талант учителя. Знаешь, когда детям говорят, что чего-то нельзя, но не объясняют почему, то их это не особо вразумляет. Хотя, твои уроки больше напоминают блог.

"Дельфи очень хорошая среда для программирования по сравнению Fasm"
Fasm это вообще не среда программирования.

Сканкоды преобразуются в кодировку cp866 с учётом раскладки клавиатуры. Таблицы есть на википедии.

Re: Вопрос

Posted: Sun Nov 22, 2015 11:16 pm
by punk_joker
[quote="Pathoswithin"]
Сканкоды преобразуются в кодировку cp866 с учётом раскладки клавиатуры. .[/quote]
Скан коды не зависят от раскладки, это ASCII коды от нее зависят

Re: Вопрос

Posted: Mon Nov 23, 2015 12:59 am
by Pathoswithin
Ну я это и написал.

Re: Вопрос

Posted: Mon Nov 23, 2015 7:18 am
by XProger
[b]ALEXS1983[/b],
Забавная идея, по поводу Virus Total и Delphi 7 приложений, была такая мразота - W32/Induc.A, которая внедряла свой код в системные dcu Delphi <= 7 версии.

Re: Вопрос

Posted: Mon Nov 23, 2015 2:32 pm
by paulcodeman
ALEXS1983, может ты на youtube видеоуроки позаписываешь?

Re: Вопрос

Posted: Mon Nov 23, 2015 10:52 pm
by ALEXS1983
[quote="pavelyakov"]ALEXS1983, может ты на youtube видеоуроки позаписываешь?[/quote]
Шутишь однако :-)

Re: Вопрос

Posted: Thu Nov 26, 2015 6:20 pm
by ALEXS1983
В асм вставках дельфи есть такая команда как "ret $000c", при переносе процедуры в Fasm, там команда не работает, а обычной "ret" не отделаешься.
Что эта команда "ret $000c" значит? и как быть ? Чем её заменить или как её обойти ?
Похоже что она очень по существу, так как процедура в асм-вставках дельфи работает нормально только при ней, а не при Ret

Re: Вопрос

Posted: Thu Nov 26, 2015 6:27 pm
by IgorA
Скорее всего там при возвращении сдвигается указатель стека (регистр esp)
Так как число c(16) = 12(10) то попробуй написать:
ret 12
может и заработает

Re: Вопрос

Posted: Thu Nov 26, 2015 6:44 pm
by ALEXS1983
[quote="IgorA"]Скорее всего там при возвращении сдвигается указатель стека (регистр esp)
Так как число c(16) = 12(10) то попробуй написать:
ret 12
может и заработает[/quote]
Заработать то не заработало, так как надо, но БОЛЬШОЕ СПАСИБО, видимо так оно и есть (насчёт сдвига) стека. Так как меня очень удивило что в скомпилированной процедуре 7 "пуш" и 6 "поп" и она нормально работает в асм-вставках дельфи

Procedure DrawXLineA1;
Begin
asm

@START: {передача параметров через стек и регистры}
push $00ff34ff
push $05
push $01
mov ecx,$0000000a
mov edx,$0000000a
mov eax,$0000000a
call @DrawXLineA
ret


@DrawXLineA: {сама процедура}
push ebp
mov ebp,esp
add esp,-$08
push ebx
push esi
push edi
.....

..........
pop edi
pop esi
pop ebx

pop ecx
pop ecx
pop ebp
ret $000c
end;

end;

Re: Вопрос

Posted: Thu Nov 26, 2015 6:56 pm
by paulcodeman
Пример вызова ф-ции си в асме.
Например ф-ция в си:
[code]
void func(int a,int b)
{

}
[/code]
Чтобы вызвать в fasm
[code]
push 1
push 2
call func
add esp,8
[/code]
к примеру,то аргумент в Си a=>2, b=>1
если 2 аргумента int то размер int 4 байта, а их 2 то 4*2 = 8