![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как включить верхний регистр в чужом процессе ? [D7, Win2k, WinXP]
ANB © (2005-08-29 14:39:00)Чтобы напечатать строго большую или маленькую букву независимо от текущего состояния. Попробовал вот так - не помогает. :
- всегда печатает маленькими. Пробовал вместо FF - 1, никакого эффекта.
// Установим регистр
ThreadFrom := GetCurrentThreadId;
ThreadTo := GetWindowThreadProcessId(hWindow, nil);
AttachThreadInput(ThreadFrom, ThreadTo, True);
GetKeyBoardState(KeyBoardState);
KeyBoardState[VK_CAPITAL] := 0;
if (bUpper) then begin
KeyBoardState[VK_SHIFT] := $FF;
KeyBoardState[VK_LSHIFT] := $FF;
end else begin
KeyBoardState[VK_SHIFT] := $FF;
KeyBoardState[VK_LSHIFT] := $FF;
end;
SetKeyBoardState(KeyBoardState);
// Эмулируем нажатие клавиши
keybd_event(dwVK, bScanCode, dwFlags, 0);
AttachThreadInput(ThreadFrom, ThreadTo, False);
alpet (2005-08-29 17:09:00) [61]ANB © (29.08.05 17:07) [16]
У меня ее нет. Попробуй ее отладчиком помучать - если использует *KeyState функции - будут срабатывать бряки (если конечно можешь работать с окном CPU).
ANB (2005-08-29 17:07:00) [62]
> alpet © (29.08.05 16:51) [15]
- я по всякому изгалился. В обычных делфовых программах хватает DOWN+CHAR+UP. В этой - нет. Чего туда еще запихать я уже не смог придумать. Через keyb_event работает. Может через GetKeyboardState кнопки достают, черт их знает. Вообще, глючная штука, израильтяне писали. Повбывав бы.
alpet (2005-08-29 16:51:00) [63]ANB © (29.08.05 16:47) [14]
Как же тогда раскладка переключается в ней? Сообщения обрабатываются в ней, без этого никак - попробуй поставить ловушку на сообщения, блокирующую ввод некоторых клавиш - в программе они не будут соответственно действовать. А про SetKeyboardState таки забудь, не для этого она придумана.
ANB (2005-08-29 16:47:00) [64]
> alpet © (29.08.05 16:46) [12]
- с программами на Magic. Он вообще игнорит обычные виндовые сообщения.
ANB (2005-08-29 16:46:00) [65]
> alpet © (29.08.05 16:45) [10]
- ради такой простой задачи писать внедрение как то не очень охота. Еще сломаю чего нибудь.
alpet (2005-08-29 16:46:00) [66]ANB © (29.08.05 16:45) [11]
Не работает с чем?
ANB (2005-08-29 16:45:00) [67]
> begin...end © (29.08.05 16:10) [9]
- дык знаю я. В справке по атачу написано, что ее надо использовать, чтобы обмануть SetKeyboardState. А не работает. Сделал уже через нажатие шифта с учетом капслука и поддержкой символов над цифрами (!@#$). Млин. Не нравится мне через keyb_event, а по другому не работает.
alpet (2005-08-29 16:45:00) [68]ANB © (29.08.05 16:00) [8]
Внедрение кода в поток разве что, но зачем это нужно?
begin...end (2005-08-29 16:10:00) [69]> ANB © (29.08.05 16:00) [8]
> чтобы символы печатать над цифрами.
Не понял я.
> А нету способа заставить SetKeyboardState работать ?
Так она ж, вроде бы, только для текущего потока.
ANB (2005-08-29 16:00:00) [70]
> begin...end © (29.08.05 15:55) [7]
- чтобы символы печатать над цифрами. Хотя можно это отдельно поанализировать. А нету способа заставить SetKeyboardState работать ?
begin...end (2005-08-29 15:55:00) [71]> ANB © (29.08.05 15:53) [6]
А если нажат, то зачем нажимать Shift?
ANB (2005-08-29 15:53:00) [72]А если нажат, то придется и его эмулировать ?
alpet (2005-08-29 15:46:00) [73]begin...end © (29.08.05 15:44) [3]
Вобщем симметрично ☺
alpet (2005-08-29 15:45:00) [74]ANB © (29.08.05 15:40) [2]
GetKeyState (VK_CAPITAL)?
begin...end (2005-08-29 15:44:00) [75]> ANB © (29.08.05 15:40) [2]
GetKeyState, VK_CAPITAL ?
ANB (2005-08-29 15:40:00) [76]
> alpet © (29.08.05 15:35) [1]
- а как узнать, что CAPS не нажат ?
alpet (2005-08-29 15:35:00) [77]Сначала VK_SHIFT, потом код символа, потом опять VK_SHIFT но с флажоком KEYEVENTF_KEYUP.