Форум: "WinAPI";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизЭмуляция нажатия клавиш в DOS-приложениях Найти похожие ветки
← →
Kasalex (2002-07-29 11:20) [0]Нужно передавать нажатия клавиш активному DOS-приложению. Keybd_event() для таких приложений, к сожалению, не срабатывает. Помогите, пожалуйста!
← →
Song (2002-07-29 13:34) [1]WM_CHAR
PostThreadMessage()
← →
Kasalex (2002-07-29 15:23) [2]
> Song © (29.07.02 13:34)
> WM_CHAR
> PostThreadMessage()
Не получается. Может я не так делаю?
ThID:=GetWindowThreadProcessId(GetForegroundWindow,nil);
PostThreadMessage(ThID,WM_Char,Ord("A"),0);
Application.ProcessMessages;
← →
Kasalex (2002-07-30 08:21) [3]Никто не поможет?
← →
Song (2002-07-30 09:24) [4]Нет я имел ввиду или-или
Можете передавать WM_CHAR обычным способом через SendMessage()
← →
Kasalex (2002-07-30 11:48) [5]> передавать WM_CHAR обычным способом через SendMessage()
Эх, все равно не получается... ПростоSendMessage(FindWindow(nil,"nc - NCMAIN"),WM_Char,Ord("a"),0)
не работает. Не работает и такая конструкция:
HWin:=FindWindow(nil,"nc - NCMAIN");
If HWin=0 Then ShowMessage("0!!!") Else
Begin
CThID:=GetCurrentThreadId;
ThID:=GetWindowThreadProcessId(HWin,nil);
If CThID=ThId Then HWin:=GetFocus
Else
If AttachThreadInput(CThID,ThID,True)=False Then
Begin
HWin:=0;
ShowMessage("Attach Failed!");
End // If Fail
Else HWin:=GetFocus;
If HWin<>0 Then
Begin
SendMessage(HWin,WM_Char,Ord("a"),0);
Application.ProcessMessages;
AttachThreadInput(CThID,ThID,False);
End; // If HWin<>0
End; // Else
Может кто подскажет в чем дело?
← →
Adder (2002-07-30 16:00) [6]Ну... за неимением NC поиграем с DN ;)
Проверки не пишу....лень 8)
procedure TForm1.Button1Click(Sender: TObject);
var h,h_old:HWND;
begin
h:= FindWindow ("ConsoleWindowClass","C:\DN\DN.COM") ;
h_old:= GetForegroundWindow();
SetForegroundWindow(h);
keybd_event(0,32,0,0);
keybd_event(0,24,0,0);
keybd_event(0,31,0,0);
SetForegroundWindow(h_old);
end;
← →
Adder (2002-07-30 17:04) [7]Немного поправлю код:
procedure TForm1.Button1Click(Sender: TObject);
var h,h_old:HWND;
begin
h:= FindWindow ("ConsoleWindowClass","C:\DN\DN.COM") ;// Win NT
// h:= FindWindow ("tty","DN - DN") ;// Win98
h_old:= GetForegroundWindow();
SetForegroundWindow(h);
ShowWindow(h,SW_SHOWNORMAL);
keybd_event(0,32,0,0);
keybd_event(0,24,0,0);
keybd_event(0,31,0,0);
ShowWindow(h,SW_HIDE);
SetForegroundWindow(h_old);
end;
Для DOS-программы в оконном режиме работает.
← →
Adder (2002-07-30 17:04) [8]Немного поправлю код:
procedure TForm1.Button1Click(Sender: TObject);
var h,h_old:HWND;
begin
h:= FindWindow ("ConsoleWindowClass","C:\DN\DN.COM") ;// Win NT
// h:= FindWindow ("tty","DN - DN") ;// Win98
h_old:= GetForegroundWindow();
SetForegroundWindow(h);
ShowWindow(h,SW_SHOWNORMAL);
keybd_event(0,32,0,0);
keybd_event(0,24,0,0);
keybd_event(0,31,0,0);
ShowWindow(h,SW_HIDE);
SetForegroundWindow(h_old);
end;
Для DOS-программы в оконном режиме работает.
← →
Kasalex (2002-07-31 11:12) [9]> Adder
Да, работает. Правда не совсем понятно как... Как бы получается, что передавая Virtual Key равным 0, мы на самом деле передаем скан-код Alt+буква? Т.е. чтобы "написать" "dos" надо передать 3 скан-кода "Alt+d" "Alt+o" "Alt+s"? Причем даже "отжатие" клавиш не эмулируется... А если мне надо, например, передать DOS-программе комбинацию клавиш типа "Alt+..."? Может я все не так понял? Поясни пожалуйста!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c