Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

ShellExecute ?   Найти похожие ветки 

 
T2K   (2004-05-08 03:44) [0]

Народ, нужна помощь! Бьюсь уже n-ый день... Трабла вот в чем: я запускаю программу ( либо файл какой-либо) через ShellExecute. Например: ShellExecute(Form1.handle,nil,"cmd.exe",nil,nil,SW_ShowNormal); .Но! Мне нужно запустить некоторые проги с параметрами, т.е. по идее получаеца так (например): ShellExecute(Form1.handle,nil,"ping.exe","127.0.0.1",nil,SW_ShowNormal); , но при этом я не могу передать параметр так как нужно, могу только так: ShellExecute(Form1.handle,nil,"ping.exe 127.0.0.1",nil,nil,SW_ShowNormal); . (так как надо я не могу, так устроена моя программа).НО так не запускаеца программа с параметрами. Как мне сделать что бы она запустилась? WinExec или CreateProcess мне не нужно, т.к. они запускают тока программы, а не разные типы файлов.


 
Maxim2030   (2004-05-08 08:51) [1]

попробуй

WinExec("cmd /c ping.exe <параметры>")


 
DVM ©   (2004-05-08 09:22) [2]

WinExec("cmd /c ping.exe <параметры>", sw_show);

>но при этом я не могу передать параметр так как нужно
Это почему? Все нормально передается.


 
DarkMan   (2004-05-08 09:54) [3]

ShellExecute(0,"open",PChar(strProgramPath),PChar(strProgramParam),PChar(FFilePath),SW_HIDE);


 
Adil   (2004-05-08 10:11) [4]

T2K прав.ShellExecute(Form1.handle,nil,"ping.exe 127.0.0.1",nil,nil,SW_ShowNormal);
Так не получается.
Есть такой метод. Тебе нужен
.ShellExecute(Form1.handle,nil,"ping.exe","127.0.0.1",nil,SW_ShowNormal);

Значит так

Var
prog,param,vsyo:string;
i:string;
begin
vsyo:="ping.exe 127.0.0.1"

  for i:=1 to length(vsyo)-1 begin
         prog:=prog+vsyo[i];
      if vsyo[i+1]=" " then
         break;
  end;
param:=vsyo;
delete(param,1,length(prog)+1);

ShellExecute(Form1.handle,nil,pchar(prog),pchar(param),nil,SW_ShowNormal);

end;


Может быть есть ошыбки. Но логично так. Если будет проблемы пиши на мейл: adil@aliev.info
ICQ: 17321977
YM: alievadil
MSN: adil@aliev.info


 
Anatoly Podgoretsky ©   (2004-05-08 11:35) [5]

Четвертый параметр - это командная строка для программы.


 
T2K   (2004-05-08 16:17) [6]

WinExec не помогает, т.к. у мя процедура сделана, на клик мыши в меню. При нажатии в процедуре написано типа выполнить то, что в заголовке меню. Т.е. у мя там нетолько exe, но и простые файлы, типа txt, jpg, etc. Но так же есть и программы с параметрами, то что предложил Adil не помогает, т.к. если путь к файлу с пробелами, то прога не запускаеца.


 
Anatoly Podgoretsky ©   (2004-05-08 16:57) [7]

Пути со специальными символами положено брать в кавычки еще с 1981 года


 
T2K   (2004-05-09 00:59) [8]


> Т.е. у мя там нетолько exe, но и простые файлы, типа txt,
> jpg, etc.


вот в чем трабла


 
KilkennyCat ©   (2004-05-09 04:25) [9]


> T2K   (09.05.04 00:59) [8]
>
> > Т.е. у мя там нетолько exe, но и простые файлы, типа txt,
>
> > jpg, etc.
>
>
> вот в чем трабла


Разве это трабла?
во-первых, не так уж и много расширений для исполняемых файлов, так что отловить, что запустить шеллом, а что вином - не трабла.
во-вторых, у меня ShellExecute(Form1.handle,nil,"ping.exe","127.0.0.1",nil,SW_ShowNormal); прекрасно работает,
в-третьих, ShellExecute(Form1.handle,nil,"C:\Новая папка\Новая папка\ping.exe","127.0.0.1",nil,SW_ShowNormal); то же работает.
в-четвертых, если из строки "C:\Новая папка\Новая папка\ping.exe 127.0.0.1" нужно вычленить нужное, то определяйте не по пробелу, а по первому вхождению точки + 3, если у названия файла предполагается несколько точек, то я думаю, клик мышки по менюшке и так дает его название...

???


 
T2K   (2004-05-09 06:21) [10]

у мя тоже великолепно так работает ShellExecute(Form1.handle,nil,"ping.exe","127.0.0.1",nil,SW_ShowNormal);
НО мне так ненада, моя прога так устроена что я немогу отделить параметры от самой программы (по замыслу). Потому и ломаю бошку


 
Mim1 ©   (2004-05-09 06:48) [11]

Если надо отделить имя файла от параметров то воспользуйтесь следующей функцией (так же по ее анаогии можно написать функцию выделяющую параметры из командной строки)

Function FN(s:string):string;
var i,j:integer;
begin
 s := Trim(s);
 i := pos(""",s);
 j := pos(" ",s);
 if j = 0 then
   begin
     result := s;
     exit;
   end;
 if (i < j) and (i <> 0) then
   begin
     j := posex(""",s,i+1); // uses strutils
     Result := copy(s,i+1,j-i-1);
     exit;
   end
 else
   begin
     Result := copy(s,1,j-1);
     exit;
   end;
end;


 
DeadMeat ©   (2004-05-09 17:01) [12]

> T2K
Слушай... Хватит тут всем голову морочить... Напиши как в твой ShellExecute передаются твои параметры из обработчика... А ещё лучше весь обработчик...
Думаю после этого всем станет проще...


 
Anatoly Podgoretsky ©   (2004-05-09 17:20) [13]

DeadMeat ©   (09.05.04 17:01) [12]
А нам и так не плозо, это чисто его проблема.


 
DeadMeat ©   (2004-05-09 17:32) [14]

Ну тады другое дело...


 
Dimaxx ©   (2004-05-09 21:42) [15]

Элементарно, Ватсон! Перед параметром поставь пробел!

ShellExecute(Form1.handle,nil,"ping.exe"," 127.0.0.1",nil,SW_ShowNormal);

и все тип-топ. Тоже сталкивался с такими граблями. Выход нашел совершенно случайно!


 
T2K   (2004-05-10 04:49) [16]

Лана народ, объясню последний раз с листингом.. поможете - огромное пасиба, непоможете, всеравно пасиба =)) :
...
Tray.OnClick := Form1.TrayStart;
...
procedure TForm1.TrayStart(Sender: TObject);
begin
if (Sender is TMenuItem) then
begin
ShellExecute(Form1.Handle, nil, PChar(StripHotKey((Sender as TMenuItem).Caption)), nil, nil, SW_ShowNormal);
end;
end;

Вызываеца процедура при нажатии на пункт в меню, заголовки которого типа C:\winnt\system32\cmd.exe, либо там C:\Winnt\system32\ping.exe 127.0.0.1, либо C:\1.jpg, etc. Смысл в том, что все великолепно работает, но если заголовок типа C:\Winnt\system32\ping.exe 127.0.0.1, то пинг не запускаеца (ну либо другое приложение с параметрами)


 
KilkennyCat ©   (2004-05-10 04:54) [17]

прочитай эту ветку всю еще раз...



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.083 c
14-1085544907
Alexandr3
2004-05-26 08:15
2004.06.13
Кладовка не работает


1-1086156408
Term
2004-06-02 10:06
2004.06.13
Поиск файлов


14-1085389453
WondeRu
2004-05-24 13:04
2004.06.13
Шрек 2. Ура! Ура! Ура!


4-1084031844
QseR
2004-05-08 19:57
2004.06.13
CPU Load


3-1085157912
Igor_P
2004-05-21 20:45
2004.06.13
автоинкремент в Interbase