Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2008, 22:00   #1
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию Как получить символ?(Delphi)

Здравствуйте, такой вопрос. Как lParam сообщения WM_KEYDOWN перевести в символ. Учитывая при этом раскладку. Т.е. чтобы 'A' не стало вдруг 'Ф' и наоборот. Заранее благодарю
Прогрессирующий чайник..
The_Darkness вне форума Ответить с цитированием
Старый 18.07.2008, 07:32   #2
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Неужели никто не знает? А нельзя пересылать полученное сообщение в свою форму, а в форме обрабатывать его в OnKeyDown? Там ведь оно сразу транслируется в символ.

Ну или хотябы объясните почему
Код:
  retcode := ToAscii(vkey,MapVirtualKeyEx(vkey, 0,keyb),keystate, @Result[1],0);
  {Vkey - lparam;keyb - текущая раскладка клавиатуры;keystate - getKeyboardState;Result - string}
Переводит только в русский?

вот написал так
Код:
  Case Word(GetKeyboardLayout(GetWindowThreadProcessID(GetForegroundWindow))) of
   $409:keyb:=LoadKeyboardLayout('00000409',KLF_ACTIVATE);
   $419:keyb:=LoadKeyboardLayout('00000419',KLF_ACTIVATE);
  End;
  retcode := ToAscii(vkey,MapVirtualKeyEx(vkey, 0,keyb),keystate, @Result[1],0);
Работает вроде, но:
1)По-моему это не лучший вариант
2)В окне компилятора делфи при нажатии кнопки на клаве винда виснет, пока не тыкнешь Ctrl+Alt+Del, с чем это связано? И как исправить? ХЕЛП кто нибдуь
Прогрессирующий чайник..

Последний раз редактировалось Stilet; 18.07.2008 в 08:25.
The_Darkness вне форума Ответить с цитированием
Старый 18.07.2008, 08:28   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты хук делаешь? Клавшпиёна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2008, 08:36   #4
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Да, тока клавишпиеном эту кривую конструкцию трудно назвать по следующим причинам:
1)Не делает разницы между русскими и англицкими буквами
2)Если нажать Ctr+Alt+Del и вылазит окошко безопасность виндовс, хук перестает работать, почему я не знаю.Есть способ проверить работает ли хук? Мне в голову пришел только один, послать своему окну WM_KEYDOWN с каким нить символом, и если хук не отловит, значит не работает
3)Вместо Esc,Alt и прочих кнопок вылазит непонятно что.
Пожалйста помогите, кто нить. Не хочу бараном вырасти

Вот нашел насчет этого
Цитата:
2)Если нажать Ctr+Alt+Del и вылазит окошко безопасность виндовс, хук перестает работать, почему я не знаю.Есть способ проверить работает ли хук? Мне в голову пришел только один, послать своему окну WM_KEYDOWN с каким нить символом, и если хук не отловит, значит не работает
-
Цитата:
An application that has installed a JournalRecordProc hook procedure should watch for the VK_CANCEL virtual key code (which is implemented as the CTRL+BREAK key combination on most keyboards). This virtual key code should be interpreted by the application as a signal that the user wishes to stop journal recording. The application should respond by ending the recording sequence and removing the JournalRecordProc hook procedure. Removal is important. It prevents a journaling application from locking up the system by hanging inside a hook procedure.

This role as a signal to stop journal recording means that a CTRL+BREAK key combination cannot itself be recorded. Since the CTRL+C key combination has no such role as a journaling signal, it can be recorded. There are two other key combinations that cannot be recorded: CTRL+ESC and CTRL+ALT+DEL. Those two key combinations cause the system to stop all journaling activities (record or playback), remove all journaling hooks, and post a WM_CANCELJOURNAL message to the journaling application.
В общем надо отловить это сообщение и снова запустить хук(я использую WH_JOURNALRECORD)
Всем спасибо В особенности Stilet
Прогрессирующий чайник..

Последний раз редактировалось Stilet; 18.07.2008 в 12:51.
The_Darkness вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из delphi вставить символ в word? Sony Общие вопросы Delphi 10 04.09.2014 19:51
Преобразование VK в символ Minimus Win Api 10 02.06.2009 01:37
Как получить имя нажимаемых системных клавиш(Delphi) The_Darkness Помощь студентам 2 18.07.2008 18:31
Потоки и символ конца строки Deatz Общие вопросы C/C++ 3 07.05.2008 20:02
Получить HTML код страницы в Delphi Job Работа с сетью в Delphi 3 15.08.2007 11:29