

Win7 32b, softwarové ovládání DOSovské aplikace...
Zdar borci!
Původně jsem chtěl napsat nadpis jako:
Život není lehký
nebo
Hardcore porno
Ale tak bych mohl zahrát na nervy administrátorům. A teď k věci. Jestli tohle vyřeší nějaký borec, tak bude lepší, než já.
Jde o tohle. Pokud chcete posílat klávesové výstupy("z klávesnice") nějaké aplikaci ve Windows, je nejjednodušší řešení
použit prográmek .NET, kde zavoláte něco na způsob:
...
System.Windows.Forms.Sendkeys.Sendwait("{ENTER}");
...
Stačí si defakto ošéfovat, aby daná aplikace měla focus a jste na koni...
Jenže....
Život není lehký
nebo
Hardcore porno
Tyto .NETovské legrace kompletně ztrácí úplný význam, pokud jde o DOS aplikaci.
V lepším případě na tyto "povely" nereagují, nebo se aplikace ukončí.....
Podle mého testování to vypadá, že cesta vede skrz nativní "user32.dll" ......
Je však potřeba mimo jiné v programu získat pointer na DOSovský proces.
Ukázka z fce Main v přiloženém kódu:
int procesId = YourEnumerateClass.Enum16BitProcesses();
Process processes = Process.GetProcessById(procesId);
if (processes == null)
throw new Exception("Could not find the process; is running?");
IntPtr WindowHandle = processes.MainWindowHandle;
PressKey('a', true); // druhý parametr určuje stisknuto/odstisknuto
System.Threading.Thread.Sleep(100);
PressKey('a', false);
Testuju to na starém M602 a bohužel program žádnou chybu nehlásí, ale nefunguje to (nedělá to opticky nic).
V příloze přikládám samostatný consolový, kompilovatelný projekt.
Předem díky za cenné rady, soudruzi.....
Uffff.
Podporujeme dinosaury (TM).
Testoval jsem jak tu slavnou knihovnu pro simulaci kláves, tak keybd_event.
Nefungovalo nic.
Zkoušel jsem všechny návrhy, ale zafungovalo mi až jediné řešení.
Tak jsem to úplně haluzácky pořešil.
Win32 API se moc nechytá, protože pokud nemá okno focus, tak snad není ani aktivní pro příjem podle některých zdrojů.
Našel jsem List of Virtual Key Codes.
Ale obecně to funguje všelijak. V závislosti na Windows a DOSovské aplikaci.
Někde například nefunguje směrová šipka dolů, jinde zase pomůže deaktivovat Num lock na klávesnici a podobně.
Prostě vzrůšo.
V podstatě stačí nastavit virtuální ScanKey2 a je vymalováno.
Bez zajímavosti také není, že aplikace se chová úplně jinak na 32b Windows a úplně jinak na 64b.
Například tentýž kód způsobuje v jednom případě odeslání Enteru a ve druhém případě key_down.
Navíc se to, jak jsem již psal chová odlišně v různých DOSovských aplikacích.
keby si posielal wm_keydown a wm_keyup message jak som pisal tak by IMHO fungovalo vsetko vzdy. Nechapem preco furt kazdy chce lepit nejake cudzie kniznice
P.S. a pracuj rovno so scan kodmi, a ne s ascii a lepit cosi s konverznymi fciami ktore pisal nejaky pako v MS. Klavesnica neposiela ziadne ascii. Viz MSDN WM_KEYDOWN