Форум: "Начинающим";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
ВнизПолучить код клавиш Найти похожие ветки
← →
FEV (2009-04-20 09:42) [0]Знаете ли вы какую-нибудь функцию для однозначного определения некого кода клавиш, мне не нужно чего то вроде VK_TAB, мне нужны сами коды, которые подставив можно было бы получить однозначный код клавиши.
Дело в том, что на клавиатуре (Genius KB-16e) имеется несколько доп. клавиш. Мне необходимо их задействовать в отдельной программе. Причем без использования этих глючных дров на клаву... Клавиши и без дров определяются.
Используя функцию:function GetCharFromVKey(vkey: Word): string;
var
keystate: TKeyboardState;
retcode: Integer;
begin
Win32Check(GetKeyboardState(keystate));
SetLength(Result, 2);
retcode := ToAscii(vkey,
MapVirtualKey(vkey, 0),
keystate, @Result[1],
0);
case retcode of
0: Result := "";
1: SetLength(Result, 1);
2: ;
else
Result := "";
end;
end;
я получаю их отдельную функциональность... НО они работают как одна, т.к. тут выводится ASCII код, а на них его нет. т.е. все клавиши с ASCII кодом " " - будут считаться этими клавишами... Т.к у этих клавиш нет аски значения, поэтому они определяются одинаково. Но у каждой клавиши есть, свой уникальный код, вот мне нужна функция для получения этого кода. Любого(двоичного, шестнадцеричного и др.), только уникального! Заранее благодарен.
← →
easy © (2009-04-20 10:07) [1]http://dfc.com.ru/?sid=2&id=8&itemid=14
← →
palva © (2009-04-20 10:12) [2]Без драйвера клавиатуры работа Windows невозможна, ИМХО.
Или дрова - это что-то другое на вашем языке?
← →
FEV (2009-04-20 10:26) [3]Ну если реакция программы на нажатия клавиш есть, значит Windows получает коды какие-то... А раз получает, значит этот код можно получить и мне в Delphi...
То что клавиши работают без дров видно на многих прогах, просто на них нет текстового идентификатора, над чем мне и надо поработать.
← →
FEV (2009-04-20 17:56) [4]
> easy © (20.04.09 10:07) [1]
> http://dfc.com.ru/?sid=2&id=8&itemid=14
Я там это посмотрел... Но не всё понял.
Я понял что это так:APPCOMMAND_TREBLE_DOWN = 22;
APPCOMMAND_TREBLE_UP = 23;
FAPPCOMMAND_MOUSE = $8000;
А как исправить:#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))
???
#define GET_DEVICE_LPARAM(lParam) ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))
И есть ли где-нибудь исходник с рабочими этими кодами?
← →
FEV (2009-04-20 19:57) [5]Итак... В общем пошёл другим путём... Я получил коды нужных клавиш в виде:
nCode,wParam,lParam
через исходник одной dll и вызов ее функции, а именно:function KeyboardProc(nCode: Integer; wParam: wParam; lParam: lParam ): LParam; stdcall;
var
f:textfile;
begin
MessageBeep(0);
assignfile(f, "c:\hook.txt");
try append(f); except rewrite(f);
end; writeln(f, nCode,",",wParam,",",lParam);
close(f);
end;
и использование в программе:procedure TForm1.Button1Click(Sender: TObject);
var
hinstDLL: HINST;
hkprcKeyboard: TFNHookProc;
msg: TMsg;
begin
hinstDLL := LoadLibrary("KeyHook.dll");
hkprcKeyboard := GetProcAddress(hinstDLL, "KeyboardProc");
SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);
end;
Я просто не доезжаю, откуда KeyboardProc() получает эти входные данные... Кажется DLL они не передаются из программы, значит SetWindowsHookEx как-то их передает... А как не доганяю...
Вопрос в том, как мне эту функцию(или измененную) использовать прямо в программе (не используя dll) и результатом получить строку nCode+wParam+lParam??? или хотя бы wParam+lParam...
← →
FEV (2009-04-20 20:48) [6]Всё! Я завершил. Может кому пригодится:
Это упрошённый вид.//KeyHook.dpr
library KeyHook;
uses
shellapi,
windows,
sysutils;
var
g_hhk: HHOOK;
function KeyboardProc(nCode: Integer; wParam: wParam; lParam: lParam ): LParam; stdcall;
begin
Result := CallNextHookEx(g_hhk, nCode, wParam, lParam);
end;
exports
KeyboardProc;
begin
end.
используем где нибудь например:procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
hinstDLL: HINST;
hkprcKeyboard: TFNHookProc;
msg,ng: TMsg;
begin
hinstDLL := LoadLibrary("KeyHook.dll");
hkprcKeyboard := GetProcAddress(hinstDLL, "KeyboardProc");
SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);
GetMessage(msg, 0, 0, 0);
edit1.text:=inttostr(msg.message)+" "+inttostr(msg.wParam)+" "+inttostr(msg.lParam));
end;
Таким образом, можно нажимая кнопку, сверять с неким значением, если оно совпадает... Делать что хотим...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c