Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программная всатка символа


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]

:) - тот эдит в который производится ввод это чилд на фореграундвиндов


Наверх

Титульная страница Поиск, карта сайта Написать письмо