![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ввод данных в консольное приложение [D7, WinXP]
A.L.E.X.A.N.D.E.R © (2007-06-18 21:05:00)Возник вопрос по поводу :
как ввести данные из своего приложения в работающее консольное приложение , т.е. типа gui
Подскажите пожалуйста .
Сергей М. (2007-06-20 16:55:00) [1]
> A.L.E.X.A.N.D.E.R © (20.06.07 16:32) [15]
> Та епт
А нехрен, епт, влезать в работу приложения на полпути !
Стартуй его сам и управляй им через анонимный пайп - би будет тебе полное счастье ! Епт)
A.L.E.X.A.N.D.E.R (2007-06-20 16:32:00) [2]Та епт , что делать если консольное приложение нивкакаю не воспринимает введеный в него текст ?
Сергей М. (2007-06-20 16:09:00) [3]
> SLoW.AlfaMoon.Com (20.06.07 16:03) [13]
Не парься, уважаемый.
Просто смею рекомендовать "включать свой телепатор" тогда когда автор явно хоть чуть-чуть "шарит"
SLoW.AlfaMoon.Com (2007-06-20 16:03:00) [4]Хм. Замечание верное. Тогда могу предложить недокументированное решение через Native API, только это, как мне кажется, автору не нужно. И вообще, это всего лишь пример.
Еще +1 к предложению clickmaker.
Сергей М. (2007-06-20 15:07:00) [5]
> SLoW.AlfaMoon.Com (20.06.07 15:00) [11]
>
>
> GetProcessId
А ну как совсем не тот процесс твой код обнаружит ?
Мало ли м.б. процессов с указанным именем)
SLoW.AlfaMoon.Com (2007-06-20 15:00:00) [6]
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 14:57:00) [7]
> но оно не воспринимает этого
Что, прямо так и говорит, мол, не воспринимаю и все тут ?
> даже стереть , то что я написал своей программой невозможно
"Что написано пером - не вырубишь ..." (с)
A.L.E.X.A.N.D.E.R (2007-06-20 14:33:00) [8]Разобрался , спасибо .
Теперь встала ещё 1 проблема , всё что я ввожу в консольное приложение оно в нём вывожит , но оно не воспринимает этого , даже стереть , то что я написал своей программой невозможно .
A.L.E.X.A.N.D.E.R (2007-06-20 13:43:00) [9]хм... уже "GetProcessId" не работает ...
clickmaker (2007-06-20 13:43:00) [10]
> [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 13:33:00) [11]c "GetProcessId" разобрался , а вот с "AttachConsole" - никак .
A.L.E.X.A.N.D.E.R (2007-06-20 13:06:00) [12]А какие модули ещё надо подключить , а то Delphi у меня ругается на "GetProcessId" и на "AttachConsole" .
SLoW.AlfaMoon.Com (2007-06-20 10:50:00) [13]Проблема банально решилась добавлением Sleep(500) после строчки с WinExec'om. Ну или экспериментируйте с CreateProcess
SLoW.AlfaMoon.Com (2007-06-20 10:33:00) [14]Впрочем, я, похоже, поторопился. НАлицо наличие некоторых проблем с функцией 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.
A.L.E.X.A.N.D.E.R (2007-06-19 23:45:00) [15]А можно пожалуйста пример ?
просто ньюансов там многовато .
SLoW.AlfaMoon.Com (2007-06-19 10:21:00) [16]AttachConsole + WriteConsoleInput.