Сейчас на форуме: UniSoft, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Ввставить текст в CMD.EXE
Посл.ответ Сообщение

Ранг: 12.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 13 декабря 2010 09:58
· Личное сообщение · #1

Помогите разобраться, кусок кода:
запускаем notepad.exe'
ищем окно
ищем edit
вставляем текст
exit

Code:
  1. ;---------------------------------------------------------------- ----
  2.  invoke  ShellExecuteA,0,NULL,CMD,0,NULL,1       
  3.  
  4.   invoke FindWindow,Wclass,NULL                  ;ищем окно по класу
  5.    cmp eax,0                                     ;проверяем результат
  6.    je  exit                                      ;не нашли на выход
  7.    mov [hWnd],eax                                ;нашли записали
  8.  
  9.   invoke FindWindowEx,[hWnd],NULL,edit,NULL      ;ищем в найденом окне edit
  10.    cmp eax,0                                     ;проверяем результат
  11.    je  exit                                      ;не нашли на выход
  12.    mov [cWnd],eax                                ;нашли записали
  13.  
  14.   invoke SendMessage,[cWnd],WM_SETTEXT,100,text  ;пишем в edit
  15.  
  16. exit:
  17.   invoke ExitProcess,0                                            
  18.   CMD    db 'notepad.exe',0
  19.   Wclass db 'notepad',0      
  20.   cWnd   dd ?
  21.   hWnd   dd ?
  22.   text   db 'hello',0                   ;текст для вставки в edit
  23.   edit   db 'edit', 0                  
  24.  
  25. :---------------------------------------------------------------------

Здесь всё понятно,есть класс Edit вставляем текст
А какой класс у командной строки?Что искать заместо Edit ?
Тот же код ток c запуском cmd.exe

Code:
  1. format PE GUI 4.0
  2. entry   start
  3. include 'win32a.inc'
  4.   cWnd   dd ?
  5.   hWnd   dd ?
  6.   text   db 'hello',0                   ;текст для вставки в edit
  7.   edit   db 'edit', 0
  8.   CMD    db 'CMD.exe',0
  9.   Wclass db 'ConsoleWindowClass',0      ;класс консоли
  10.  
  11. ;--------------------------------------------------------------------
  12. start:
  13.   invoke  ShellExecuteA,0,NULL,CMD,0,NULL,1      ;старт команд.строки
  14.  
  15.   invoke FindWindow,Wclass,NULL                  ;ищем окно по класу
  16.    cmp eax,0                                     ;проверяем результат
  17.    je  exit                                      ;не нашли на выход
  18.    mov [hWnd],eax                                ;нашли записали
  19.  
  20.   invoke FindWindowEx,[hWnd],NULL,edit,NULL      ;ищем в найденом окне edit
  21.    cmp eax,0                                     ;проверяем результат
  22.    je  exit                                      ;не нашли на выход
  23.    mov [cWnd],eax                                ;нашли записали
  24.  
  25.   invoke SendMessage,[cWnd],WM_SETTEXT,100,text  ;пишем в edit
  26.  
  27. exit:
  28.   invoke ExitProcess,0
  29. ;----------------------------------------------------------
  30. section '.idata' import data readable writeable
  31.         library kernel32,'KERNEL32.DLL',user32,'USER32.DLL',shell32,'SHELL32.DLL'
  32.  
  33.         include 'api\shell32.inc'
  34.         include 'api\kernel32.inc'
  35.         include 'api\user32.inc'




Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 13 декабря 2010 10:31
· Личное сообщение · #2

попробуй с помощью DuplicateHandle получить его STD_INPUT_HANDLE



Ранг: 156.1 (ветеран), 5thx
Активность: 0.020
Статус: Участник
Капрал

Создано: 13 декабря 2010 10:37 · Поправил: freeExec
· Личное сообщение · #3

Если тебе нужно выполнить всего 1 команду то проще использовать
Code:
  1. cmd.exe //<команда>

и потом не ясно как он у вас вообще работает, т.к. вместо поинта передаете значение
invoke ShellExecuteA,0,NULL,CMD,0,NULL,1



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 13 декабря 2010 10:49
· Личное сообщение · #4

AUE, Вам необходимо разбираться с использованием pipe-механизма. Есть туториал от Iczelion, по теме, на wasm.ru. И есть хороший пример на MSDN

-----
все багрепорты - в личные сообщения




Ранг: 12.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 13 декабря 2010 10:54
· Личное сообщение · #5

Мне надо класс чорного окна командной строки,точнее куда в одится текст.
например у блокнота класс EDIT.
Какои у ком.строки?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 декабря 2010 11:29
· Личное сообщение · #6

Тебе же объяснили, что с консольными приложениями нужно работать по другому. Теми методами что ты работаешь с блокнотом у тебя никак не получится работать с консольным приложением, нужно получить доступ к его STD_INPUT и STD_OUTPUT

-----
Yann Tiersen best and do not fuck




Ранг: 156.1 (ветеран), 5thx
Активность: 0.020
Статус: Участник
Капрал

Создано: 13 декабря 2010 13:07
· Личное сообщение · #7

www.codeproject.com/KB/dialog/ConsoleAdapter.aspx



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 13 декабря 2010 14:15
· Личное сообщение · #8

посылайте сообщение WM_CHAR окну, и всё будет работать



Ранг: 156.1 (ветеран), 5thx
Активность: 0.020
Статус: Участник
Капрал

Создано: 13 декабря 2010 14:30
· Личное сообщение · #9

Но у меня в данном примере не находит окно с таким классом, так что слать некуда.



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 13 декабря 2010 14:58
· Личное сообщение · #10

ну ведь можно искать окно по заголовку, а не только по классу




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 13 декабря 2010 15:38
· Личное сообщение · #11

Прекрасно работает:
Code:
  1. var
  2.   hWnd : THandle;
  3.   cmd  : string;
  4.   i    : integer;
  5. begin
  6.   hWnd := FindWindow('ConsoleWindowClass', nil);
  7.   cmd := 'ping ya.ru' + #13;
  8.   if hWnd <> 0 then
  9.     for i := 1 to Length(cmd) do
  10.       SendMessage(hWnd, WM_CHAR, Ord(cmd[i]), 0);
  11.   ExitProcess(0);
  12. end;


-----
Следуй за белым кроликом




Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 13 декабря 2010 15:58
· Личное сообщение · #12

neomant
Под какой осью? В Висте вроде по-другому класс консоли называется.




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 13 декабря 2010 16:48
· Личное сообщение · #13

ZLOvar пишет:
Под какой осью?

XP. Класс окна смотрим Spy++

-----
Следуй за белым кроликом




Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 13 декабря 2010 17:38
· Личное сообщение · #14

ConsoleWindowClass в семерке

STD_INPUT и STD_OUTPUT нужны если в одну консоль пишут\читают несколько процессов
какбы стандартные каналы.



Ранг: 12.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 15 декабря 2010 09:52
· Личное сообщение · #15

Вобщем всё что хотелось получилось(С вашей помощъю).WM_CHAR вот что надо было.
Всем спасибо.


 eXeL@B —› Программирование —› Ввставить текст в CMD.EXE
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати