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.
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
[DllImport("user32.dll")]
static extern int MapVirtualKey(uint uCode, uint uMapType);
public static void Main()
{
const byte KEYEVENTF_KEYUP = 2;
int ScanKey2 = MapVirtualKey( 0x09, 0); // 0x09 = tabulátor
Console.WriteLine("int kode:{0} "+ ScanKey2);
System.Threading.Thread.Sleep(3000);
keybd_event(0x28, (byte)ScanKey2, 0, 0);
keybd_event(0x28, (byte)ScanKey2, KEYEVENTF_KEYUP, 0);
}
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.
MISSION ACCOMPLISHED