![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программная всатка символа
RustiK © (2003-09-12 15:34:00)
Помогите пожалуйста с проблемой.
Я поставил хук на нажатие клавиши. Например на букву X. А теперь мне нужно закодить так чтобы после нажатия буквы Х у меня выводилась не Х, a например W.
Я писал так
h:=GetForegroundWindow;
sendMessage(h, WM_char, Ord("W"),0);
подскажите пожалуйста что не так.
novenkiy (2003-09-25 15:56:00) [1]
Удалено модератором
Livid (2003-09-17 18:52:00) [2]
Бит извлечь доволтно легоко.
(lParam and$10000000)
novenkiy (2003-09-15 10:30:00) [3]
Все ребята темя закрыта я нашел выход.
До того как отловить какая нажаты была клавиша я проверяю былали нажата Alt, т.е. ставлю проверку примерно так:
if GetAsyncKeyState(VK_menu) <> 0 then;
а дальше если нажата идет обработка самих клавиш на отлов
код получается такой
function KeyboardProc(c0de, wm_char, lParam : integer): Lresult; stdcall;
begin
if (c0de =HC_ACTION) then
begin
if GetAsyncKeyState(VK_menu) <> 0 then
case wm_char of
ord("X"):
begin
hw:=GetForegroundWindow;
SetWindowText(hw,"Alt+Z");
end;
ORD("Z"):
begin
hw:=GetForegroundWindow;
SetWindowText(hw,"Alt+Z");
end;
end;
end else
begin
result := CallNextHookEx(H, c0de, wm_char, lParam);
exit;
end;
result := CallNextHookEx(H, c0de, wm_char, lParam);
end;
Все проблема решена всем бальшое СПАСИБО за то, что откликнулись.
pasha_676 (2003-09-15 10:06:00) [4]
> Простите за тупой вопрос как извлечь из lParam этот бит?
Маска + логические операции.
RustiK (2003-09-15 09:50:00) [5]
Простите за тупой вопрос как извлечь из lParam этот бит?
RustiK (2003-09-15 09:49:00) [6]
Подскажите пожалуйста синтаксис проверки
lParam(29)=1 или как?
livid (2003-09-14 18:29:00) [7]
А не судьба хоткей поставить?
BOOL RegisterHotKey(
HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code
);
или на худой конец, если уж с хуком, то юзай процедуру
function KeybHook(Code: Integer;
wParam: WPARAM; //virtual key
lParam: LPARAM //Misc
): LRESULT; stdcall;
а из lParam извлекай бит 29. Если 1, то альт нажат, если 0 альт не нажат.
SPeller (2003-09-14 16:46:00) [8]
Если нажали альт - то нажали, это ты не исправишь, а вот Х отфильтровать запросто. Сработает у тебя хук только если нажали Х, а перед этим была нажа ещё и альт.
RustiK (2003-09-14 10:45:00) [9]
А в том то и дело мне надо что бы хук срабатывал только при нажатии Alt и X. Именно двух этих клавишь нажатых одновременно
SPeller (2003-09-14 10:34:00) [10]
При приёме сообщения о клавиатурном событии при нажатии Х где-то в параметрах есть информация о состоянии управляющих клавиш Shift, Ctrl и Alt. Не пропускай Х и получится, что нажали просто Alt.
RustiK (2003-09-13 17:59:00) [11]
keybd_event(VK_BACK,0,0,0);
пишу потомучто ловушка стоит на событее клавиатуры
RustiK (2003-09-13 17:58:00) [12]
кстати я нашел как эмулировать нажатие клавишь Alt+0156 например
keybd_event(VK_BACK,0,0,0);
keybd_event(vk_menu,0,0,0);
keybd_event( VK_NUMPAD0, MapVirtualKey(Vk_NumPad0,0), 0, 0 );
keybd_event( VK_NUMPAD0, MapVirtualKey(Vk_NumPad0,0), KEYEVENTF_KEYUP, 0 );
keybd_event( VK_NUMPAD1, MapVirtualKey(Vk_NumPad1,0), 0, 0 );
keybd_event( VK_NUMPAD1, MapVirtualKey(Vk_NumPad1,0), KEYEVENTF_KEYUP, 0 );
keybd_event( VK_NUMPAD5, MapVirtualKey(Vk_NumPad5,0), 0, 0 );
keybd_event( VK_NUMPAD5, MapVirtualKey(Vk_NumPad5,0), KEYEVENTF_KEYUP, 0 );
keybd_event( VK_NUMPAD6, MapVirtualKey(Vk_NumPad6,0), 0, 0 );
keybd_event( VK_NUMPAD6, MapVirtualKey(Vk_NumPad6,0), KEYEVENTF_KEYUP, 0 );
keybd_event(vk_menu,0,KEYEVENTF_KEYUP,0);
Но вот другая проблема, теперь мне надо отследить двойное нажатие клавиш например: Alt+X
SPeller (2003-09-13 15:10:00) [13]
А если bVk = код символа, а bScan = 0?
guest (2003-09-13 14:25:00) [14]
set another hook (this hook can"t change key value)
see MSDN
RustiK (2003-09-13 11:12:00) [15]
Сасибо я попробовал keybd_event ПОМОГЛО. А если мне надо ввести русскую букву или непечатаемый символ? Тогда что делать?
SPeller (2003-09-13 02:31:00) [16]
А лучше использовать keybd_event чтобы не геморроиться с чайлдами.
AGAMEMNUM (2003-09-12 18:11:00) [17]
:) - тот эдит в который производится ввод это чилд на фореграундвиндов