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

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

keybd_event и GetKeyStatus отказываются работать в терминальном [D7, WinXP]


Still Swamp ©   (2005-09-23 14:59:00) 

keybd_event и GetKeyStatus  отказываются работать в терминальном режиме.Вот такая беда.

Написал экранную клавиатуру. Она славно работает вконсоле, но напроч отказывается работать втерминалке.

Ктоподскажет - как с этим бороться. Если можно, без SendMessage.


Still Swamp   (2005-09-24 01:21:00) [1]

Вот оно...

procedure TForm1.Panel31MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
TempActiveWindow:integer;
begin
Beep(1500,20);
FASCII:=(Sender as TPanel).Tag;

// keybd_event(FASCII, 0, 0, 0);

TempActiveWindow:=GetForegroundWindow;
Caption:='Self:'+IntToStr(Handle)+' Active:'+IntToStr(TempActiveWindow);
FillChar(Rec, SizeOf(Rec), 0);
Rec.Count:=1;
Rec.Scan:=FASCII;

if ((Sender as TPanel).Tag>=$30)and((Sender as TPanel).Tag<=$39)or((Sender as TPanel).Tag>=$41)and((Sender as TPanel).Tag<=$5A) then begin
 Rec.Flag:=0;
 SendMessage(TempActiveWindow, WM_CHAR, FASCII, LongInt(Rec));
end else begin
 Rec.Flag:=1;
 SendMessage(TempActiveWindow, WM_KEYDOWN, FASCII, LongInt(Rec));
end;
end;


Still Swamp   (2005-09-24 01:18:00) [2]

И еще.... у меня не доходят мессэджи до окон. Скажем - Far принимаетмесседжи иуспешно управляется, а вот Word нет... :( Handle окон я проверил. Ну с калвиатуры мессаги естно успешно в тех приложениях доходят.


Still Swamp   (2005-09-24 01:02:00) [3]

Хорошо... раз такое дело...
Я написал вариант на месседжах.
Грабли следующие...
Где взять SCAN код. Как я понимаю, его надо передавать, иначе не работает если не передавать этот параметр. С ASCII он не совпадает. Можно его поймать с клавы, но он на разных клавах будет разным.

Что делать?


ANB   (2005-09-23 17:09:00) [4]


> Still Swamp   (23.09.05 15:37) [2]
- у тебя, похоже, не то окно активно. Попробуй на других диалогах или вставь большие паузы между кнопками и кнопок побольше и в процессе работы шелкни мышей по полю ввода пароля.
ЗЫ. Это поле можно сделать обычным (с видимыми буквами).


ANB   (2005-09-23 17:07:00) [5]

А что такое терминалка ?
Имхо - Send/Post Message намного удобнее, я сам долго парился, чтобы от keybd_event отказаться.


Still Swamp   (2005-09-23 15:37:00) [6]

Еще одно уточнение!!! Не работатает keybd_event  только при открытом диалоге ввода логина пароля. Те сами по себе события от клавы я отправляю нормально. Только вот их кто то ловит и давит. Может джина может еще кто. Подозреваю что это каверза по безопасности. Как ее обойти?


Still Swamp   (2005-09-23 15:07:00) [7]

Уточнение GetKeyState не работает в w2k под XP все пучком... что это может быть?


Наверх

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