Форум: "WinAPI";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];
ВнизПрограммная всатка символа Найти похожие ветки
← →
RustiK (2003-09-12 15:34) [0]Помогите пожалуйста с проблемой.
Я поставил хук на нажатие клавиши. Например на букву X. А теперь мне нужно закодить так чтобы после нажатия буквы Х у меня выводилась не Х, a например W.
Я писал так
h:=GetForegroundWindow;
sendMessage(h, WM_char, Ord("W"),0);
подскажите пожалуйста что не так.
← →
AGAMEMNUM (2003-09-12 18:11) [1]:) - тот эдит в который производится ввод это чилд на фореграундвиндов
← →
SPeller (2003-09-13 02:31) [2]А лучше использовать keybd_event чтобы не геморроиться с чайлдами.
← →
RustiK (2003-09-13 11:12) [3]Сасибо я попробовал keybd_event ПОМОГЛО. А если мне надо ввести русскую букву или непечатаемый символ? Тогда что делать?
← →
guest (2003-09-13 14:25) [4]set another hook (this hook can"t change key value)
see MSDN
← →
SPeller (2003-09-13 15:10) [5]А если bVk = код символа, а bScan = 0?
← →
RustiK (2003-09-13 17:58) [6]кстати я нашел как эмулировать нажатие клавишь 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
← →
RustiK (2003-09-13 17:59) [7]keybd_event(VK_BACK,0,0,0);
пишу потомучто ловушка стоит на событее клавиатуры
← →
SPeller (2003-09-14 10:34) [8]При приёме сообщения о клавиатурном событии при нажатии Х где-то в параметрах есть информация о состоянии управляющих клавиш Shift, Ctrl и Alt. Не пропускай Х и получится, что нажали просто Alt.
← →
RustiK (2003-09-14 10:45) [9]А в том то и дело мне надо что бы хук срабатывал только при нажатии Alt и X. Именно двух этих клавишь нажатых одновременно
← →
SPeller (2003-09-14 16:46) [10]Если нажали альт - то нажали, это ты не исправишь, а вот Х отфильтровать запросто. Сработает у тебя хук только если нажали Х, а перед этим была нажа ещё и альт.
← →
livid (2003-09-14 18:29) [11]А не судьба хоткей поставить?
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 альт не нажат.
← →
RustiK (2003-09-15 09:49) [12]Подскажите пожалуйста синтаксис проверки
lParam(29)=1 или как?
← →
RustiK (2003-09-15 09:50) [13]Простите за тупой вопрос как извлечь из lParam этот бит?
← →
pasha_676 (2003-09-15 10:06) [14]
> Простите за тупой вопрос как извлечь из lParam этот бит?
Маска + логические операции.
← →
novenkiy (2003-09-15 10:30) [15]Все ребята темя закрыта я нашел выход.
До того как отловить какая нажаты была клавиша я проверяю былали нажата 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;
Все проблема решена всем бальшое СПАСИБО за то, что откликнулись.
← →
Livid (2003-09-17 18:52) [16]Бит извлечь доволтно легоко.
(lParam and $10000000)
← →
novenkiy (2003-09-25 15:56) [17]Удалено модератором
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c