Wysyłanie klawiszy do okna DosBOX'a

0

Witam. Jeśli coś podobnego już było to proszę o link do odpowiedniego tematu, bo nie znalazłem.
Otóź męcze się z jedną rzeczą. Nie wiem jak wysłać "wciśnięcie" jakiegokolwiek klawisza, do
aktywnego okna emulatora Dosa - DosBOX'a. Próbowałem komponentem SendKeys z torry (jest na:
http://www.torry.net/vcl/system/keys/sssendkeys.zip), dla notatnika działą dla DosBox'a - w
ogóle nie działa. Próbowałem też programem AutoApp wysłać polecenie do okna DosBox'a, także
bez powodzenia (program jest na: http://www.torry.net/apps/system/tasks/autoapp.zip) wysłać
chciałem poleceniem: send "cosik {ENTER}". Dla okna cmd działa, dla DosBox'a, niestety nie.
Próbowałem też poniższym kodem, ustalając wcześniej programem TDWinInfo.exe, że nazwa klasy
okna DosBox'a to 'SDL_app'. I dla tego okna WM_CLOSE działa, ale wysyłanie klawiszy w ogóle
nie teaguje. Próbowałem PostMessage, SendMessage i różne WM z kodami klawiszy i nic. Jeżeli
ktoś ma jakiś pomysł żeby wysłać do DosBox'a na przykłąd klawisz enter - to proszę piszcie.

var
   HWND : THandle;
begin
   HWND := FindWindow('SDL_app', nil);
   setforegroundwindow(HWND);
   PostMessage(HWND, WM_KeyDown, VK_RETURN , $00020001);
   PostMessage(HWND, WM_KeyUp, VK_RETURN, $C0020001);
end;
0

Poszukaj o funkcji SendInput.

0
Szczawik napisał(a)

Poszukaj o funkcji SendInput.

Dziękuję za podpowiedź, kobminuje z tą funkcją, ale DosBOX jest nieugiety i w ogóle nie reaguje :(
Robie to tak jak poniżej, ale nie reaguje ani Notepad ani DosBox, na kórym mi zależy. Co robię źle?

var
   H : HWND;
   KeyInput : array [0..1] of TagInput;
begin
   H := FindWindow('SDL_app', nil);
   ZeroMemory(@KeyInput, sizeof(KeyInput));
   KeyInput[0].Itype := INPUT_KEYBOARD;
   KeyInput[0].ki.wVk := ord('D');
   KeyInput[1].Itype:=INPUT_KEYBOARD;
   KeyInput[1].ki.wVK:=ord('D');
   KeyInput[1].ki.dwFlags:=KEYEVENTF_KEYUP;
   SetForegroundWindow(H);
   SendInput(H, KeyInput[0], Sizeof(KeyInput[0]));
   SendInput(H, KeyInput[1], Sizeof(KeyInput[1]));
end;

Dodam, że okno ustawia się jako aktywne czyli uchwyt jest prawidłowy, ale na SendInput nie reaguje.

EDIT: coś jednak pokręciłem, chyba w nazwie okna wcześniej bo komponent TSendKey działą.
Wystarczył taki kod jak poniżej, ale jak ktoś ma działający przykład, bez użycia żadnego
komponnetu, a jedynie na SendInput to prosiłbym o odpowiedź albo link do przykładu.

var
H: HWND;
SendKey1 : TSendKey;
begin
SendKey1 := TSendKey.Create(Self);
H := FindWindow('SDL_app', nil);
Caption := IntToStr(H);
if IsWindow(H) then
begin
SetForegroundWindow(H);
Sendkey1.Keys:= '12345';
SendKey1.execute;
end;
end;

A i zauważyłem, że DosBOX po poniższym kodzie odbiera tylko klawisze 2345 bez pierwszego.
Pewnie dlatego miałem kłopoty z wysyłaniem klawiszy, bo pierwszy znak nigdy nie docietał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1