Форум: "WinAPI";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
ВнизВвод данных в консольное приложение Найти похожие ветки
← →
A.L.E.X.A.N.D.E.R © (2007-06-18 21:05) [0]Возник вопрос по поводу :
как ввести данные из своего приложения в работающее консольное приложение , т.е. типа gui
Подскажите пожалуйста .
← →
SLoW.AlfaMoon.Com (2007-06-19 10:21) [1]AttachConsole + WriteConsoleInput.
← →
A.L.E.X.A.N.D.E.R © (2007-06-19 23:45) [2]А можно пожалуйста пример ?
просто ньюансов там многовато .
← →
SLoW.AlfaMoon.Com (2007-06-20 10:33) [3]Впрочем, я, похоже, поторопился. НАлицо наличие некоторых проблем с функцией AttachConsole.
http://www.wasm.ru/forum/viewtopic.php?pid=125645 --- здесь обсуждение похожего вопроса.
ПРимер, наскоро накиданный мной:procedure TForm1.Button1Click(Sender: TObject);
var h,w: THandle;
ncw,pid: dword;
buf: array[0..5] of char;
begin
buf[0] := "t";
buf[1] := "e";
buf[2] := "s";
buf[3] := "t";
buf[4] := #0;
h := WinExec("cmd.exe",SW_SHOW);
pid := GetProcessId("cmd.exe");
if pid = 0 then begin showmessage("pid=0");exit;end;
if AttachConsole(pid) then
begin
w := GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(w,@buf[0],4,ncw,nil);
FreeConsole;
end else showmessage("attach failed:"+inttostr(getlasterror));
end;
Тут получаются такие сложности. Имею запущенный cmd.exe. Проходя код под отладчиком, все получается хорошо. При запуске без отладчика AttachConsole возвращает ошибку 6 - Invalid Handle.
← →
SLoW.AlfaMoon.Com (2007-06-20 10:50) [4]Проблема банально решилась добавлением Sleep(500) после строчки с WinExec"om. Ну или экспериментируйте с CreateProcess
← →
A.L.E.X.A.N.D.E.R © (2007-06-20 13:06) [5]А какие модули ещё надо подключить , а то Delphi у меня ругается на "GetProcessId" и на "AttachConsole" .
← →
A.L.E.X.A.N.D.E.R © (2007-06-20 13:33) [6]c "GetProcessId" разобрался , а вот с "AttachConsole" - никак .
← →
A.L.E.X.A.N.D.E.R © (2007-06-20 13:43) [7]хм... уже "GetProcessId" не работает ...
← →
clickmaker © (2007-06-20 13:43) [8]
> [6] A.L.E.X.A.N.D.E.R © (20.06.07 13:33)
см. Creating a Child Process with Redirected Input and Output в MSDN
← →
A.L.E.X.A.N.D.E.R © (2007-06-20 14:33) [9]Разобрался , спасибо .
Теперь встала ещё 1 проблема , всё что я ввожу в консольное приложение оно в нём вывожит , но оно не воспринимает этого , даже стереть , то что я написал своей программой невозможно .
← →
Сергей М. © (2007-06-20 14:57) [10]
> но оно не воспринимает этого
Что, прямо так и говорит, мол, не воспринимаю и все тут ?
> даже стереть , то что я написал своей программой невозможно
"Что написано пером - не вырубишь ..." (с)
← →
SLoW.AlfaMoon.Com (2007-06-20 15:00) [11]
function AttachConsole(dwProcessId: DWORD): BOOL; stdcall; external "kernel32.dll";
function GetProcessId(pName: PChar): dword;
var
Snap: dword;
Process: TPROCESSENTRY32;
begin
Result := 0;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Snap <> INVALID_HANDLE_VALUE then
begin
Process.dwSize := SizeOf(TPROCESSENTRY32);
if Process32First(Snap, Process) then
repeat
if lstrcmpi(Process.szExeFile, pName) = 0 then
begin
Result := Process.th32ProcessID;
CloseHandle(Snap);
Exit;
end;
until not Process32Next(Snap, Process);
Result := 0;
CloseHandle(Snap);
end;
end;
← →
Сергей М. © (2007-06-20 15:07) [12]
> SLoW.AlfaMoon.Com (20.06.07 15:00) [11]
>
>
> GetProcessId
А ну как совсем не тот процесс твой код обнаружит ?
Мало ли м.б. процессов с указанным именем)
← →
SLoW.AlfaMoon.Com (2007-06-20 16:03) [13]Хм. Замечание верное. Тогда могу предложить недокументированное решение через Native API, только это, как мне кажется, автору не нужно. И вообще, это всего лишь пример.
Еще +1 к предложению clickmaker.
← →
Сергей М. © (2007-06-20 16:09) [14]
> SLoW.AlfaMoon.Com (20.06.07 16:03) [13]
Не парься, уважаемый.
Просто смею рекомендовать "включать свой телепатор" тогда когда автор явно хоть чуть-чуть "шарит"
← →
A.L.E.X.A.N.D.E.R © (2007-06-20 16:32) [15]Та епт , что делать если консольное приложение нивкакаю не воспринимает введеный в него текст ?
← →
Сергей М. © (2007-06-20 16:55) [16]
> A.L.E.X.A.N.D.E.R © (20.06.07 16:32) [15]
> Та епт
А нехрен, епт, влезать в работу приложения на полпути !
Стартуй его сам и управляй им через анонимный пайп - би будет тебе полное счастье ! Епт)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.05 c