Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

keybd_event и GetKeyStatus отказываются работать в терминальном   Найти похожие ветки 

 
Still Swamp   (2005-09-23 14:59) [0]

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

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

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


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

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


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

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


 
ANB ©   (2005-09-23 17:07) [3]

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


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


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


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

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

Что делать?


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

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


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

Вот оно...

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;



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
2-1131451140
Fast2
2005-11-08 14:59
2005.11.27
Как элементы листбокса разместить в одну строку через зяпятую?


5-1112337769
Viva
2005-04-01 10:42
2005.11.27
Текст опубликованного в компоненте события


14-1130941463
den303
2005-11-02 17:24
2005.11.27
Польская инверсная запись


2-1131558243
San1
2005-11-09 20:44
2005.11.27
MP3


14-1130924024
stone
2005-11-02 12:33
2005.11.27
ОЕМ-версия