Форум: "Начинающим";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Внизне запускается скрипт Найти похожие ветки
← →
cyberspy85 © (2009-09-14 22:44) [0]Необходимо запустить скрипт с параметром (полное имя файла)
var
CurrentFilename, ScriptString: string;
//ArgMessages.js скрипт получающий в качестве параметра строку
//CurrentFilename
ScriptString:= "Wscript.exe ArgMessages.js " + CurrentFilename;
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
не хочет работать, а вот если в winexec указывать явно:
winexec("Wscript.exe ArgMessages.js Myfile.txt ", SW_SHOWNORMAL), то работает нормально.
Подскажите пожалуйста, что нужно сделать чтобы скрипт запускался а в качестве параметра принимал переменую с именем файла.
← →
TIF © (2009-09-15 03:31) [1]> (полное имя файла)
> Myfile.txt
Что есть полное имя файла? Случайно не с учётом ли пути до файла?
То есть что передаётся в CurrentFilename? "Myfile.txt" или "C:\12 и 34\Myfile.txt"?
← →
cyberspy85 © (2009-09-15 07:25) [2]да именно так, с учетом пути до файла с:\.....\Myfile.txt
← →
AIK © (2009-09-15 08:36) [3]
>... а в качестве параметра принимал переменую с именем файла.
Осмелюсь предположить что твоя ошибка в том что передавая имя файла с путями ты забываешь передавать его в кавычках так как пути обычно содержат
← →
AIK © (2009-09-15 08:45) [4]
> пути обычно содержат
... пробелы :)
← →
cyberspy85 © (2009-09-15 10:02) [5]нет все с кавычками: т.е.
CurrentFilename:= "C:\....\Myfile.txt"
сам скрипт не запускается
ScriptString:= "Wscript.exe ArgMessages.js " + CurrentFilename;
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
а вот если в winexec указывать явно:
winexec("Wscript.exe ArgMessages.js Myfile.txt ", SW_SHOWNORMAL), то работает нормально.(извиняюсь за повтор)
← →
brother © (2009-09-15 10:05) [6]> ScriptString:= "Wscript.exe ArgMessages.js " + CurrentFilename;
попробуй: ScriptString:= ""Wscript.exe ArgMessages.js " + CurrentFilename + "";
← →
cyberspy85 © (2009-09-15 10:05) [7]что-то видимо теряется при преобразовании PAnsiChar(ScriptString), пробовал StrNew тоже самое
← →
brother © (2009-09-15 10:06) [8]> PAnsiChar(ScriptString),
смущает
← →
cyberspy85 © (2009-09-15 10:13) [9]""Wscript.exe ArgMessages.js 12345 32424" + CurrentFilename+";
ну так вообще ощибку выдает
[DCC Error] Unit1.pas(603): E2038 Illegal character in input file: """ (#$22)
← →
AIK © (2009-09-15 10:18) [10]
> cyberspy85 © (15.09.09 10:02) [5]
> нет все с кавычками: т.е.
> CurrentFilename:= "C:\....\Myfile.txt"
Я имел в виду:CurrentFilename:= ""C:\....\Myfile.txt""
← →
cyberspy85 © (2009-09-15 10:29) [11]попробовал CurrentFilename:= ""C:\....\Myfile.txt""
не то, тут сам скрипт не запускается даже если убрать CurrentFilename, для начала бы сделать чтоб скрипт запускался, потом с параметрами пробовать
← →
Anatoly Podgoretsky © (2009-09-15 10:30) [12]> cyberspy85 (14.09.2009 22:44:00) [0]
Мы чего будем гадать, или ты приведешь результат в ScriptString
Я как понимаю, что ты проверяешь разные строки вывода, в одном случае далеко не "Wscript.exe ArgMessages.js Myfile.txt "
← →
Anatoly Podgoretsky © (2009-09-15 10:31) [13]> cyberspy85 (14.09.2009 22:44:00) [0]
Кстати WinExec используть или ламеры, или новички, которые справку не читают из принципа.
← →
Anatoly Podgoretsky © (2009-09-15 10:34) [14]
> CurrentFilename:= "C:\....\Myfile.txt"
Опять ерунда написана, сомневаюсь, что есть папка с именем ....
← →
cyberspy85 © (2009-09-15 11:21) [15]
> Кстати WinExec используть или ламеры, или новички, которые
> справку не читают из принципа.
ламеры не ламеры ветка (начинающим) сюда и пишу, пробовал ShellExecute(Aplication.Handle,"open","Wscript.exe ArgMessages.js 12345 32424",nil,nil, SW_NORMAL); CreateProcess < вообще не запускается скрипт
работает только winexec
> Мы чего будем гадать, или ты приведешь результат в ScriptStringЯ
> как понимаю, что ты проверяешь разные строки вывода, в одном
> случае далеко не "Wscript.exe ArgMessages.js Myfile.txt
> "
Извини не совсем понял что хотел сказать, в целом задача такая:
1. Определяется имя файла
2. Формируется строка запуска скрипта,и это имя предается в качестве параметра
3. Строка запуска подставляется через переменную в winexec
4. Запускается скрипт (и импортирует этот файлик в другое приложение посредством Automation)
> > CurrentFilename:= "C:\....\Myfile.txt"Опять ерунда написана,
> сомневаюсь, что есть папка с именем ....
C:\.... смущает, ну понятно что путь просто вместо него многоточие чтоб меньше писать и файл Myfile.txt на месте
← →
sniknik © (2009-09-15 11:51) [16]> Извини не совсем понял что хотел сказать, в целом задача такая:
> 1. Определяется имя файла
> ...
да плевать что там у тебя определяется, раз оно не работает то описание ЧТО ты делаешь абсолютно бессмысленно без того КАК ты это делаешь.
> ну понятно что путь просто вместо него многоточие
кому понятно?
> чтоб меньше писать
а объяснять потом и запутывать/путаться ответах авторы которых тебя не понимают? плюс такие которые попытаются объяснить (я например), что в итоге может свести всю ветку к просто флуду.
неужели это лучше чем сразу привести ТО ЧТО ЕСТЬ, а не то, о чем нужно догадываться (и каждого в догадках будет разный результат).
неужели нельзя сразу показать значение переменной, и вообще не запутывать кучей переменных? написать например вот так -
winexec("Wscript.exe ArgMessages.js C:\Myfile.txt ", SW_SHOWNORMAL);
работаетvar
нет
ScriptString: string;
...
ScriptString:= "Wscript.exe ArgMessages.js C:\Myfile.txt ";
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
или раз уж хочется с "пятой ногой"var
нет
CurrentFilename, ScriptString: string;
...
CurrentFilename:= "C:\Myfile.txt ";
ScriptString:= "Wscript.exe ArgMessages.js "+CurrentFilename;
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
и все! никаких недопониманий...
зачем в вопросах использовать переменные которые во первых не относятся к вопросу, во вторых со значением не определенным тут же в вопросе (ведь ясно же что на них в первую очередь и будут грешить - ламер их неправильно определил... ).
p.s. хотя что то мне подсказывает, если этот вопрос задать правильно, то он как бы сам собой решится...
← →
cyberspy85 © (2009-09-15 11:58) [17]так... тому кто понял по существу вопроса будут предложения?
← →
clickmaker © (2009-09-15 12:20) [18]> Кстати WinExec используть или ламеры, или новички
а что тут ламерского?
все равно в итоге createprocess вызовется, а кода меньше, если нужно только запустить без всяких пайпов и т.п.
← →
Anatoly Podgoretsky © (2009-09-15 13:23) [19]> cyberspy85 (15.09.2009 11:21:15) [15]
> Кстати WinExec используть или ламеры, или новички, которые
> справку не читают из принципа.
Теперь не читаешь справку по ShellExecute
← →
Anatoly Podgoretsky © (2009-09-15 13:25) [20]> cyberspy85 (15.09.2009 11:58:17) [17]
> по существу вопроса будут предложения?
Существа нет.
← →
Игорь Шевченко © (2009-09-15 13:26) [21]Anatoly Podgoretsky © (15.09.09 10:31) [13]
Ну вот взял и обозвал.
← →
Anatoly Podgoretsky © (2009-09-15 13:26) [22]> clickmaker (15.09.2009 12:20:18) [18]
Ну не ожидал я от тебя такого аргумента "в итоге createprocess вызовется", гораздо сильнее аргумент против, что "данная функция оставлена для совместимости с Win16"
← →
Anatoly Podgoretsky © (2009-09-15 13:30) [23]
> Игорь Шевченко © (15.09.09 13:26) [21]
А я сейчас еще как обзовусь "а кода меньше" это для ленивых,
и кода не меньше, а так же одна функция, с большими возможностями и с разделение аргументов, на 6 частей. Вот насчет букв меньше я согласен, но это еще более ленивый аргумент.
← →
cyberspy85 © (2009-09-15 16:47) [24]По моему понял в чем проблема, посмотрим два варианта
Вариант 1. работает
winexec("Wscript.exe", SW_SHOWNORMAL);
код CPU
Unit1.pas.608: winexec("Wscript.exe", SW_SHOWNORMAL);
004C9240 6A01 push $01
004C9242 683C944C00 push $004c943c < указатель на строку
004C9247 E8CCFCF3FF call WinExec |
|
память<--------------------------------------
$004c943c 72637357 2E747069 Wscript. < строка из байтовых символов
$004c9444 00657865 8B575653 exe.SVW. <
Вариант 2. не работает
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
код CPU
Unit1.pas.608: winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
004C9240 6A01 push $01
004C9242 8B45F0 mov eax,[ebp-$10]
004C9245 50 push eax < указатель на строку
004C9246 E8CDFCF3FF call WinExec |
|
память<--------------------------------------
004C9424 00730057 00720063 W.s.c.r. < строка двухбайтовых символов
004C942С 00700069 002E0074 i.p.t...
короче говоря сформированную строку ScriptString надо преобразовать в
строку однобайтовых символов
← →
sniknik © (2009-09-15 17:30) [25]да, рассмотрим вариант
procedure TForm1.Button1Click(Sender: TObject);
var
ScriptString: string;
begin
ScriptString:= "Wscript.exe";
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
end;
работает! и строка в CPU передается однобайтная.
она у тебя, что объявлена как вайдстринг? а здесь приведено другое, или получаешь/формируешь ее в таком виде хитрым индейским способом, и здесь это вообще не приведено, а потом чудеса и происходят...
в итоге
> описание ЧТО ты делаешь абсолютно бессмысленно без того КАК ты это делаешь.
+1
это и было "существо вопроса" в ветки, если кто не понял.
← →
cyberspy85 © (2009-09-15 17:36) [26]
> она у тебя, что объявлена как вайдстринг? а здесь приведено
> другое, или получаешь/формируешь ее в таком виде хитрым
> индейским способом, и здесь это вообще не приведено, а потом
> чудеса и происходят...
string и никак иначе
← →
cyberspy85 © (2009-09-15 17:56) [27]запустил на делфи 7 все отлично работает, в RAD 2009 объявляю string а воспринимается как wide
← →
clickmaker © (2009-09-15 17:57) [28]> в RAD 2009 объявляю string а воспринимается как wide
ну да. там по дефолту так и должно быть
← →
cyberspy85 © (2009-09-15 18:11) [29]в опциях проекта Compiling нужно переключить
Long string by default: False
← →
sniknik © (2009-09-15 19:13) [30]> запустил на делфи 7 все отлично работает, в RAD 2009 объявляю string а воспринимается как wide
теперь смотрим на вопрос
> не запускается скрипт [D7, XP, 2003]
и кого должно телепатически "пробить", что написав D7 подразумевается RAD 2009?
а то что стринг в 2009 в связи с ее юникодностью уже и не стринг вовсе тут уже обсуждалось и знают про это многие.
в итоге вопрос - сплошные недомолвки, урезания инфы из ложной скром... желания сократить (смысл?) + как оказывается банальная лож.
хорошая почва для чудес.
← →
cyberspy85 © (2009-09-15 19:23) [31]Удалено модератором
Примечание: Без наездов давай, ответы тебе нужны, а не нам.
← →
TIF © (2009-09-16 06:01) [32]> ну нет там RAD STUDIO и WIN 2008
Написать версию Delphi и Windows в тексте, не используя галочки, не сработала фантазия? Дописать это отдельным сообщением - тоже...
> Жаль , я не знал
Пора что-то менять в жизни. Юникод - самая главная грандиозная новинка в D2009. Пройти мимо этого - гм...
Имеет смысл срочно ознакомиться с описанием продукта, чтобы не столкнуться лбом о стену препятсвий, которые и не препятствия вовсе, а новые возможности :)
> Long string by default: False
%-\
← →
cyberspy85 © (2009-09-16 07:46) [33]В общем все заработало на ура, помощи никакой не добился, разобрался сам
← →
sniknik © (2009-09-16 09:10) [34]> помощи никакой не добился
о какой помощи может быть речь если никто кроме тебя НЕ ЗНАЕТ реальной картины происходящего... твоими же усилиями. всех кто мог помочь ты "кормишь" байками на тему "все правильно делаю, а оно вот такое хреновое не хочет работать". а все попытки "свернуть тебя" на выставление этой самой реальной картины на всеобщее обозрение тобой же отвергаются как "несущественные для вопроса".
тебе нужен форум телепатов... хотя, они могут не знать дельфи. :)
← →
Anatoly Podgoretsky © (2009-09-16 11:36) [35]> cyberspy85 (15.09.2009 17:56:27) [27]
Потребовалось 27 сообщений, что бы определить, что запускается на Д2009
← →
Anatoly Podgoretsky © (2009-09-16 11:36) [36]> cyberspy85 (15.09.2009 17:56:27) [27]
Не воспринимается как wide, а воспринимается как UnicodeString
← →
Anatoly Podgoretsky © (2009-09-16 11:39) [37]
> В общем все заработало на ура, помощи никакой не добился,
> разобрался сам
Ну ну
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.007 c