Otwieranie programu exe z aplikacji

Odpowiedz Nowy wątek
2014-09-17 15:47
0

Witam,

mam taki problem, otóż chcę otworzyć inny program (konsolowy) z pozycji mojej aplikacji z automatycznym podawaniem nazwy pliku wejściowego, tj. po odpaleniu danego programu chcę aby aplikacja wpisywała w konsoli uruchomionego programu nazwę pliku i go zatwierdzała by go otworzyć.
ShellExecute nie robi tego, tylko otwiera program i staje, bo czeka na wpisanie nazwy pliku wejściowego z klawiatury, a chce żeby to było robione automatycznie z programu głównego. Piszę interfejs graficzny do programu konsolowego i mam z tym taki problem. Niestety programu nie da się uruchomić z parametrami wejściowymi, jak np. -i,input,file itd..
Macie jakiś pomysł?

Pzdr
PGR

Pozostało 580 znaków

2014-09-17 16:03
3

CreateProcess
http://4programmers.net/Forum/Newbie/149531-programkonsolowy-_wysylanie_i_pobieranie_danych?p=977746#id977746


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-09-17 16:06

Pozostało 580 znaków

2014-09-17 17:39
1
prezesPGRu napisał(a)

tj. po odpaleniu danego programu chcę aby aplikacja wpisywała w konsoli uruchomionego programu nazwę pliku i go zatwierdzała by go otworzyć.

Czyli Twój program ma uruchamiać inny? Jeżeli tak, to możesz to wykonać za pośrednictwem ShellExecute; Nie rozumiem po co Ci to pośrednictwo konsoli; Chyba że nie o systemową konsolę chodzi? Nie bardzo rozumiem ten cytowany fragment.


"... bo czeka na wpisanie nazwy pliku wejściowego z klawiatury ..." - _13th_Dragon 2014-09-17 18:11
To niech uruchamia program bezpośrednio, a nie przez systemową konsolę; - furious programming 2014-09-17 18:17
"... Niestety programu nie da się uruchomić z parametrami wejściowymi ..." - _13th_Dragon 2014-09-17 18:49
To jeśli się nie da uruchomić z parametrami wejściowymi, to konsola w niczym mu nie pomoże :P - furious programming 2014-09-17 19:00
No to obejrzyj to co podałem w poprzednim poście. - _13th_Dragon 2014-09-17 19:02

Pozostało 580 znaków

2014-09-18 11:11
0

Uzywam takiej o to komendy:
ShellExecute(handle, 'open', 'C:\CEA\FCEA2.exe', 'C:\CEA\input.txt', nil, SW_SHOWNORMAL);
po tym uruchamia się program FCEA2 ale czeka na wpisanie pliku wejściowego, gdy go wpisuję z klawiatury to program zamiast liczyć dalej to się zamyka.
Chciałbym aby automatycznie przy uruchamianiu pobierał dane z plike input.txt.
Gdy go uruchamiam z cmd w postaci "FCEA2.exe < input.txt" to wszystko działa dobrze. Pytanie jak to przenieść do Delphi7 ?

Pozostało 580 znaków

2014-09-18 11:13
0

Czegoś nie rozumiesz w poście który podałem wyżej?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-09-18 11:20
0

Rozumiem wszystko, spokojnie. Pytam, czy nie da się tego łatwiej zrobić niż przez CreateProcess?

Pozostało 580 znaków

2014-09-18 11:37
2

W ciemno spróbuj

ShellExecute(handle, 'open', 'cmd', '/C start C:\CEA\FCEA2.exe < C:\CEA\input.txt', 'C:\CEA\', SW_SHOWNORMAL);

teoretycznie to jest odpowiednik tego samego co robiłeś ręcznie w wierszu polecenia.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2014-09-18 11:37
0

Prościej - ręcznie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-09-18 11:43
0

To co napisał kAzek nie działa, reakcja jest taka sama jak w mojej wersji. Czyli startuje program ale nie jest podawany plik input.txt w pasku programu.

Pozostało 580 znaków

2014-09-18 11:47
2

Powinno działać takie coś jak poniżej.

//...
function ExecNewProcess(ProgramName : string; CmdShow : longword) : DWORD;
var
  SI : TStartupInfo;
  PI : TProcessInformation;
begin
  ZeroMemory(@SI, SizeOf(SI));
  SI.cb := SizeOf(SI);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := CmdShow;
  CreateProcess(nil, PChar(ProgramName), nil, nil, False, 0, nil, nil, SI, PI);
  Result := PI.dwProcessId;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ExecNewProcess('cmd.exe /K "date < D:\input.txt"', SW_SHOW);
end;

Pokazuje mi w konsoli gdzie w pliku input.txt mam samo "12" dla testów.

Bieżąca data: 2014-09-18
Wprowadź nową datę: (rr-mm-dd) 12
System nie może zaakceptować wprowadzonej daty.
Wprowadź nową datę: (rr-mm-dd)
C:\Program Files (x86)\DELPHI7\Projects>

Tylko oczywiście konsola nie zostanie zamknięta.

A i jak rozumiem, normalnie z pod cmd ten program działa ok, przyjmując input? Bo czasem programy mają inaczej stworzoną konsole przez co nie przyjmują przekierowań prawidłowo. Przykładowo program w Delphi stworzony ze zmienionymi modułąmi systemowymi z www.kolmck.net. Ewentualnie jeśli chcesz prościej. To sobie stwórz batcha (ręcznie lub poprzez kod w Delphi) i jego uruchamiaj. Może być wtedy nawet użyte ShellExecute.


edytowany 3x, ostatnio: olesio, 2014-09-18 11:51
Jeżeli to przejdzie to WinExec lub ShellExecute z tym samym parametrem też przejdą. - _13th_Dragon 2014-09-18 12:38

Pozostało 580 znaków

2014-09-18 12:35
fsadsafdfdsa
2
prezesPGRu napisał(a):

To co napisał kAzek nie działa, reakcja jest taka sama jak w mojej wersji. Czyli startuje program ale nie jest podawany plik input.txt w pasku programu.

a czy w ogóle program odpalany z konsoli w podane wyżej sposoby działa?
wydaje mi się że program nie przyjmuje parametrów tylko chce nazwy pliku ze standardowego strumienia

w takim przypadku po prostu możesz wykorzystać program "echo" do wysłania komunikatu do strumienia:

echo C:\CEA\input.txt | C:\CEA\FCEA2.exe

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0