Форум: "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