Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.01.2015, 15:32
Noooob Noooob вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 38
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Отправка текста в cmd.exe

Здравствуйте, для отправки клавиш в 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  
Старый 27.01.2015, 16:18
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну ты и изварщен.
Используй:
Код:
  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.
http://www.cyberforum.ru/delphi-begi...read95707.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 27.01.2015 в 16:21.
Ответить с цитированием
  #3  
Старый 27.01.2015, 17:44
Noooob Noooob вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 38
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А без keybd_event возможно с имитировать?
Ответить с цитированием
  #4  
Старый 27.01.2015, 18:45
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну значит высчитывай разницу между "a" и "другим символом".
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 27.01.2015, 18:46
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а традиционный способ чем не устраивает? hStdInput, CreatePipe, WriteFile
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 27.01.2015, 19:39
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
а традиционный способ чем не устраивает? hStdInput, CreatePipe, WriteFile
Ты видишь у него ассемблерный код в функции? Он там какие-то извращения говродит, а ты ему про именованные каналы. Ну и смотри его ответ на мой ответ.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 28.01.2015, 18:51
Noooob Noooob вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 38
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
а традиционный способ чем не устраивает? hStdInput, CreatePipe, WriteFile
Если использовать
Код:
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;
то в консоль все пишет но при нажатии Enter ничего не делает. Вот скрин
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter