![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте, для отправки клавиш в cmd использую код:
Код:
procedure EmulateKey(Wnd: HWND; VKey: Integer); asm push 0 push edx push 0100H //WM_KEYDOWN push eax call PostMessage end; Если я отпраляю 'А' то в cmd появитса 'а' , а если отправил 'а' то появитса другой символ. При отправке 'А' с зажатым shift то приходит 'А' . Как мне заставить думать cmd что shift нажат? |
|
#2
|
||||
|
||||
|
Ну ты и изварщен.
Используй: Код:
keybd_event(VK_LCONTROL, 0, 0, 0); //Нажатие левого Ctrl.
keybd_event(VK_LSHIFT, 0, 0, 0); //Нажатие левого Shift.
keybd_event(Ord('Z'), 0, 0, 0); //Нажатие 'z'.
keybd_event(Ord('Z'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 'z'.
keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0); //Отпускание левого Shift.
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); //Отпускание левого Ctrl.Последний раз редактировалось M.A.D.M.A.N., 27.01.2015 в 16:21. |
|
#3
|
|||
|
|||
|
А без keybd_event возможно с имитировать?
|
|
#4
|
||||
|
||||
|
Ну значит высчитывай разницу между "a" и "другим символом".
|
|
#5
|
||||
|
||||
|
а традиционный способ чем не устраивает? hStdInput, CreatePipe, WriteFile
|
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Цитата:
Код:
type
TAttachConsole=function (ProcessID:DWORD):boolean; stdcall;
var ProcessID:DWORD;
AC:TAttachConsole;
AKernel:Cardinal;
cb : DWORD;
begin
GetWindowThreadProcessId(FindWindow('ConsoleWindowClass',nil),ProcessID);
AC:=nil;
if ProcessID>0 then
begin
AKernel:=LoadLibrary('kernel32.dll');
@AC:=GetProcAddress(AKernel,'AttachConsole');
if @AC<>nil then
begin
AC(ProcessID);
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), pchar('tEST'), length('tEST'), cb, nil);
end;
end;
end;![]() |