Napisałeś tak, że nie wiadomo do końca o co chodzi. Albo ja się w tym połapać nie mogę. Nie piszę w C++, ale w Delphi. Jednak z moich testów wynika, że powinno pomóc wysłanie przez PostMessage
. Oczywiście również z "puszczeniem" danego klawisza. A w ogóle do symulowania naciśnięć oraz "puszczeń" klawiszy, polecam taki jak poniżej sprawdzony kod w Delphi. Przetłumacz go sobie sam na C++.
procedure KeyDownUp(KeyToSend : Byte; KeyDown : boolean);
const
DownUp_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_KEYUP);
Extended_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_EXTENDEDKEY);
var
Input : TagINPUT;
KeyExtended : boolean;
begin
Input.Itype := INPUT_KEYBOARD;
Input.ki.wVK := KeyToSend;
Input.ki.wScan := MapVirtualKey(KeyToSend, 0);
KeyExtended := KeyToSend in [VK_CONTROL, VK_LCONTROL, VK_RCONTROL,
VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME, VK_END, VK_PRIOR,
VK_NEXT, VK_INSERT, VK_DELETE, VK_MENU];
Input.ki.dwFlags := DownUp_Flags_Arr[not KeyDown] or Extended_Flags_Arr[KeyExtended];
Input.ki.time := 0;
SendInput(1, Input, SizeOf(Input));
end;
EDIT: sprawdziłem uchwyt otwartego okna cmd.exe
i taki kod działa ok. Pewnie są też ważne sposoby w jaki sposób tworzysz okno konsoli i nadajesz jej atrybuty. Oczywiście na bazie funkcji WinAPI enumerujących, można sobie napisać coś, co zwróci uchwyt z danego PID'u. Jednak takie kody mam tylko pod Delphi. Gdyż takie są mi przydatne.
var
H : HWND;
begin
H := $180234; // okno o klasie "ConsoleWindowClass";
if H > 0 then
begin
PostMessage(H, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(H, WM_KEYUP, VK_RETURN, 0);
end;
end;