Форум: "WinAPI";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c