Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.26 c
4-1083660910
NetWorK
2004-05-04 12:55
2004.06.13
Отключение жестких дисков и ЦПУ


1-1085919499
ilnarab
2004-05-30 16:18
2004.06.13
Вопрос по SelectDirectory


14-1085505774
Torin
2004-05-25 21:22
2004.06.13
Выделении части линии


6-1082550007
BigVova
2004-04-21 16:20
2004.06.13
сеть и права пользователя


14-1085366688
Fay
2004-05-24 06:44
2004.06.13
У меня сегодня младщему сыну год 8))





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский