Ru-Board.club
← Вернуться в раздел «Программы»

» Autoplay Media Studio

Автор: tavria2
Дата сообщения: 04.04.2007 14:00
countryman
_SourseFilename содержит только имя файла без пути, откуда система может знать где лежит файл для удаления?! Используй совместно с _SourceFolder, например: _SourceFolder.."\\".._SourceFilename.
Это все справедливо, если сборка проекта была в режиме "Hard Drive Folder". Для режима сборки "Web/Email executable" необходимо получить путь откуда был запущен SFX-архив.
Автор: countryman
Дата сообщения: 04.04.2007 15:36
А каким образом можно это сделать?
В смысле, как можно получить этот путь?
Я остановился на таком варианте:
Пользователь запускает исполняемый файл, компилированный в режиме "Web/Email executable"
Этот файл при запуске копирует экзешник №2 в папку Н и прописывает куда-то (кстати, куда?) удалить экзешник №2 после перезагрузки.
Потом исполняемый файл запускает экзешник №2 и вырубается.
Экзешник №2 удаляет "исполнившийся" файл, делает свое дело...в общем, пользователь из него выходит сам.
В итоге после перезагрузки компа все "мертвы", как в фильмах Гая Ричи.
Но в связи с этим вопрос: как узнать путь к исполняемому файлу??? То, о чем писал tavria2
З.Ы. Извиняюсь за псевдонимы файлов. Надеюсь, я более-менее смог изложить свою мысль.
Что скажете?? Реально это?

Или такой вариант:
запускается файл №1, который делает.. в общем, делает, что надо пользователю, а когда пользователь выходит из программы, запускает файл №2, который собственно, и удаляет файл №1.
Просто интересно, почему командой "File.DeleteOnReboot" файл не может удалить сам себя? Он ведь после перезагрузки все равно не будет работать? в смысле, его не успеют запустить.

Добавлено:
Но все-таки, самый главный вопрос: КАК передать путь из одного файла в другой??? То есть, передать _SourceFolder\\SourceFilename файла №1 в файл №"???

Добавлено:
И еще: возможно ли загрузить рисунок в веб-обьект? То есть, проект имеет встроенный веб-обьект, туда нужно загрузить рисунок откуда-то издали, из другой папки? Если это возможно, то удастся ли реализовать печать веб-обьекта (рисунка)?
Очень важно, чтобы пользователь не догадался, что рисунок "неместный", и чтобы напрочь отсутствовала возможность этот рисунок сохранить.

Добавлено:

Извините за шум, с вэб-обьектом и рисунком уже все сделал....
Но, если можно, все-таки подскажите, как передать путь _SourceFolder\\_SourceFilename файла №1 в файл №2?
Автор: tavria2
Дата сообщения: 04.04.2007 20:44
countryman
Удаление SFX-архива после перезагрузки:
Код: tArgs = _CommandLineArgs; -- параметры командной строки
if (Table.Count(tArgs) > 0) then -- есть переданные параметры
if (String.Find(tArgs[Table.Count(tArgs)], "SFXSOURCE:", 1, false) ~= -1) then -- приложение является SFX-архивом
-- полный путь + имя файла SFX-архива (в таблице параметров всегда будет последним)
cPathSFX = String.Right(tArgs[Table.Count(tArgs)], String.Length(tArgs[Table.Count(tArgs)]) - 10);
File.DeleteOnReboot(cPathSFX); -- удаление файла после перезагрузки
end
end
Автор: GOOSE
Дата сообщения: 04.04.2007 21:52
Чёт я протупил
Посчитал, что во время работы нужно удалить файл... сорри...
Автор: countryman
Дата сообщения: 05.04.2007 10:27
tavria2
Этот код удаляет приложение, которое его запустило? Или же его нужно вписать в файл №2? (в моем случае)
Автор: tavria2
Дата сообщения: 05.04.2007 10:42
countryman

Цитата:
Этот код удаляет приложение, которое его запустило?
Да.

Цитата:
Или же его нужно вписать в файл №2? (в моем случае)
файл №2 вообще не нужен.
Автор: countryman
Дата сообщения: 05.04.2007 10:46
tavria2
Спасибо!
Буду сейчас экспериментировать..

Добавлено:
Кстати, воспользовался советом User Guide и решил сделать выход из приложения через Window.Close().

Гляньте, кусочек кода:

if times_run > times_allowed then
Dialog.Message("Увы!", "Невозможно запустить файл", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
Window.Close(WndHandle, CLOSEWND_TERMINATE);
end

Естественно, это работать не хочет.
Хотел спросить:
Как правильно написать это злосчастное WndHandle?
А то в руководстве об этом скромно умалчивают, и в примерах этого нету.
Писал сюда имя приложения, не работает.. Моя безграмотность меня когда-нибудь убьет
Автор: tavria2
Дата сообщения: 05.04.2007 16:47
countryman

Цитата:
Как правильно написать это злосчастное WndHandle?

Код: WndHandle = Application.GetWndHandle();
Автор: DenVl
Дата сообщения: 05.04.2007 18:20
tavria2

Цитата:
Что бы помечался только один привод, по принципу радио кнопок

Да именно так.
Автор: tavria2
Дата сообщения: 05.04.2007 20:22
DenVl
Полный код:
Код: tCD = {}; --создаем пустую таблицу CD-приводов
tDrive = Drive.Enumerate(); --получаем таблицу приводов
if (tDrive) then --если в системе есть приводы
nn = 1; --индекс привода
for n, cDrive in tDrive do
nType = Drive.GetType(cDrive); --тип привода
if (nType == DRIVE_CDROM) then --если привод имеет тип CD
tCD[nn] = cDrive; --добавляем привод в таблицу CD-приводов
nn = nn + 1; --наращиваем индекс
end
end
end

-- Добавляем/заменяем подменю для отображения CD-приводов
function AddItem(cText, nID, lChecked, lEnabled, nSubMenu)
tblMenu[1].SubMenu[1].SubMenu[nSubMenu] = {}; -- создаем пункт подменю
tblMenu[1].SubMenu[1].SubMenu[nSubMenu].Text = cText; -- текст пункта подменю
tblMenu[1].SubMenu[1].SubMenu[nSubMenu].ID = nID; -- идентификатор пункта подменю
tblMenu[1].SubMenu[1].SubMenu[nSubMenu].Checked = lChecked; -- отмеченный/неотмеченный пункт подменю
tblMenu[1].SubMenu[1].SubMenu[nSubMenu].Enabled = lEnabled; -- активный/неактивный пункт подменю
end

cCheckDrive = Application.LoadValue("MyApp", "Drive"); -- читаем из реестра выбранный привод
tblMenu = Application.GetMenu(); -- получаем структуру меню приложения
if (tCD) then -- если есть CD-приводы
tblMenu[1].SubMenu[1].SubMenu = {}; -- создаем пустое подменю
nItem = 1; -- порядковый номер пункта подменю
for n, cText in tCD do -- в цикле создаем пункт подменю для каждого CD-привода
nID = 1000 + nItem; -- уникальный идентификатор для каждого пункта подменю
if (cText == cCheckDrive) then -- если привод выбран
AddItem(cText, nID, true, true, nItem); -- заполняем структуру пункта подменю
else
AddItem(cText, nID, false, true, nItem); -- заполняем структуру пункта подменю
end
nItem=nItem+1; -- наращиваем порядковый номер пункта подменю
end
Application.SetMenu(tblMenu); -- сохраняем меню
end
Автор: DenVl
Дата сообщения: 05.04.2007 21:13
tavria2
Даа.., но почему то када я выираю какой-нидь привод из подменю, то все меню (кроме SubMenu[1], из которого выбираются приводы) становится выключенным. Что не так?
Но при повторной загрузке приложения все становится нормально (галочка стоит напротив выбранного привода и все активно).
P.S. Если я коряво объяснил суть проблемы, то скрин здеся
Автор: tavria2
Дата сообщения: 05.04.2007 22:57
DenVl
Не знаю, мне такого эффекта получить не удалось. Выложи проект - посмотрю.
Автор: DenVl
Дата сообщения: 05.04.2007 23:28
tavria2
ну можно и не выкладывать:
Событие On Show:

Цитата:
Полный код:
CD = {}; --создаем пустую таблицу CD-приводов
tDrive = Drive.Enumerate(); --получаем таблицу приводов

Событие On Menu:

Цитата:
Событие On Menu:
nID = e_ID; -- сохраняем значение ID пункта
function g_OnUpdateMenuCheck(e_ID, e_ItemInfo)
...


Даже при удалении всех объектов со страницы и оставляя только эти два кода, эффект тот же...


Автор: tavria2
Дата сообщения: 06.04.2007 00:10
DenVl
Даже не знаю почему у тебя блокируется меню, ни каких операций с активацией/блокировкой меню не выполняется. В ходе эксперимента обнаружил некоторые глюки - код нуждается в доработке...
Автор: countryman
Дата сообщения: 06.04.2007 12:58
Возможно ли отключить вызов контекстного меню правой кнопкой мыши над вэб-обьектом??
Автор: tavria2
Дата сообщения: 06.04.2007 18:06
DenVl
Динамическое создание подменю, содержащее CD-приводы.
DynamicSubMenuWithCD.apz (10 кб).
Автор: DenVl
Дата сообщения: 06.04.2007 20:26
Респект и уважуха tavria2. Все отлично отрабатывает...с проблемами покончено , кром одной...
Пытаюсь написать функцию, которая будет получать метку выбранного привода:
В Global Functions добавил:

Код: function DriveLabel()
cCheckDrive = Application.LoadValue("MyApp", "Drive");
DrivesCD();
if (DrivesCD()) then
for n, cText in tCD do
if (cText == cCheckDrive) then
     DriveInfo = Drive.GetInformation(cText);
     if (tDriveInfo) then
          cLabel = tDriveInfo.Label;
          Label.SetText("Label1", cLabel);
else
          Dialog.Message("Ошибка", "Диск не вставлен", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);

          end
     end
end
end
end
Автор: tavria2
Дата сообщения: 06.04.2007 22:38
DenVl
Цитата:
function DriveLabel()
cCheckDrive = Application.LoadValue("MyApp", "Drive");
DrivesCD();
if (DrivesCD()) then
for n, cText in tCD do
if (cText == cCheckDrive) then
tDriveInfo = Drive.GetInformation(cText);
if (tDriveInfo) then
cLabel = tDriveInfo.Label;
Label.SetText("Label1", cLabel);
else
Label.SetText("Label1", "No Disk");

end
end
end
end
end


Добавлено:
пока писал, ты уже сам все сделал

Добавлено:

Цитата:
А что вызывать в этой функции для получения метки привода с диском?
cLabel = tDriveInfo.Label; - а это что?
Автор: DenVl
Дата сообщения: 06.04.2007 23:28
tavria2
Да, намудрил немного. Немного подправил:

Код: function DriveLabel()
cCheckDrive = Application.LoadValue("MyApp", "Drive");
DrivesCD();
if (DrivesCD()) then
for n, cText in tCD do
if (cText == cCheckDrive) then
     tDriveInfo = Drive.GetInformation(cText);
     error = Application.GetLastError();
if (not tDriveInfo) then
          Dialog.Message("Ошибка", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
     end
     end
end
end
end
Автор: tavria2
Дата сообщения: 06.04.2007 23:38
DenVl

Цитата:
Файл запускается, но не выполняются параметры

Я ни чего не могу сказать по этому поводу т.к. я не знаю какие параметры этот файл способен принимать.

Цитата:
Можно ли узнать это (что она возвратила)?

Чесно говоря вообще ничего не понял.
Автор: DenVl
Дата сообщения: 06.04.2007 23:51
tavria2
Из хелпа к программе:

Цитата:
Example: Prog1.exe F: /U (F: - буква виртульного привода)
Returns drive letter when success or 1 when failure occurs.

Надо узнать, что она возвратила: букву диска или 1?



Добавлено:
Незнаю важно или нет, но прога работает только в MS-DOSе

Добавлено:
К примеру, мы же не можем же демонтировать образ, ссылаясь на физический привод (если он вдруг был выбран из подменю), но прога то все равно запустится, просто ничаво не сделает и возвратит как код ошибки 1, если же мы попытались демонтировать образ, смонтированный в вирт. приводе, то будет возвращена буква диска, в моем случае F:
...если я конечно все правильно понимаю
Автор: tavria2
Дата сообщения: 07.04.2007 00:18
DenVl
Для начала, у тебя не соответствует формат параметра диска: требуется "F:", а у тебя "cCheckDrive" вернет в формате "F:\". Убери завершающий слэш:
cCheckDrive = String.Left(cCheckDrive, String.Length(cCheckDrive) -1);

Цитата:
Надо узнать, что она возвратила: букву диска или 1?

Exe файлы обычно возвращают числовой код ошибки завершения программы, каким образом возвращают символьные параметры - я незнаю, возможно используют системные переменные, о которых должно упоминаться в Help'е. Тут я тебе не советчик.

Добавлено:

Цитата:
Незнаю важно или нет, но прога работает только в MS-DOSе

В чистом MS-DOSе или в сеансе MS-DOS (в консольном окне)?

Если, после выполнения программы ты видишь результат на экране консоли, то результат можно запихнуть в текстовый файл, путем перенаправления устройства вывода, например: Prog1.exe F: /U>result.txt, а затем перегнать файл в строку и из нее добывать результат.
Автор: DenVl
Дата сообщения: 07.04.2007 12:34
tavria2
К сожалению в чистом MS-DOSе, так что результата на экране консоли увидеть не удастся.
Автор: tavria2
Дата сообщения: 07.04.2007 12:37
DenVl
Так, что после выполнения программы, на экран не выводится результат? Если программа не секретная выложи ее, я посмотрю или дай ссылку на нее.
Автор: DenVl
Дата сообщения: 07.04.2007 17:57
tavria2
Посмотри в личку
Автор: NightW0lf
Дата сообщения: 09.04.2007 13:07
Неподскажите как сделать так чтобы происходила проверка определенного ключа в реестре [например - HKEY_LOCAL_MACHINE, "Software\\7-Zip", "Path"] и если этого ключа нет то тогда определенная кнопка [например - label_install] то она будет АКТИВНА, а если есть то НЕ АКТИВНА и самое главное чтобы эта проверка происходила постоянно, а не при следущем запуске и [или] при нажатии какой либо кнопки.

У меня есть пример кода, НО он работает то от нажатия кнопки.

[more=Код у кнопки установить]

Код:
search_reg_after_launch_install = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\7-Zip", "Path", true); -- Если после установки найден ключ то кнопки:
if search_reg_after_launch_install then
Label.SetEnabled("label_install", false); -- Не актвная кнопка "Установить"
Label.SetEnabled("label_play", true); -- Актвная кнопка "Запустить"
Label.SetEnabled("label_uninstall", true); -- Актвная кнопка "Удалить"
end
Автор: DenVl
Дата сообщения: 09.04.2007 16:33
NightW0lf
Поставить этот код на On Preload страницы (при загрузке страницы будет проверяться наличие ключа)
Автор: NightW0lf
Дата сообщения: 09.04.2007 18:26
DenVl

Цитата:
Поставить этот код на On Preload страницы (при загрузке страницы будет проверяться наличие ключа)

Я немного код подправил!
[more=Код]

Код:
search_reg_after_launch_install = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\7-Zip", "Path", true); -- Если после установки найден ключ то кнопки:
if search_reg_after_launch_install then
Label.SetEnabled("label_install", false); -- Не актвная кнопка "Установить"
Label.SetEnabled("label_play", true); -- Актвная кнопка "Запустить"
Label.SetEnabled("label_uninstall", true); -- Актвная кнопка "Удалить"
else -- в реестре есть запись
Label.SetEnabled("label_install", true); -- не актвная кнопка "Установить"
Label.SetEnabled("label_play", false); -- актвная кнопка "Запустить"
Label.SetEnabled("label_uninstall", false); -- актвная кнопка "Удалить"
end
Автор: DenVl
Дата сообщения: 10.04.2007 00:27
NightW0lf
Возможно эт те поможет:
Global Functions

Код:
function Install()
search_reg_after_launch_install = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\7-Zip");
if (search_reg_after_launch_install == true) then
are_ya_there = File.DoesExist(_SourceFolder.."\\7-zip.exe");
if are_ya_there == false then
Dialog.Message("Ошибка", "Инсталлятор отсутствует!\n\nУстанавливать нечего.", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
else
handle = Application.GetWndHandle();
Window.Hide(handle);
File.Run(_SourceFolder.."\\7-zip.exe", "","", SW_SHOWNORMAL, true)
error = Application.GetLastError();
if (error ~= 0) then
Dialog.Message("Ошибка запуска", "Инсталлятор отсутствует.", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
end
Window.Show(handle);
end
end
end

function RegCheck()
search_reg_after_launch_install = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\7-Zip");
if (search_reg_after_launch_install == false) then
Label.SetEnabled("Install", true);
Label.SetEnabled("Play", false);
Label.SetEnabled("Uninstall", false);
else
Label.SetEnabled("Install", false);
Label.SetEnabled("Play", true);
Label.SetEnabled("Uninstall", true);
end
end
Автор: woolfkv
Дата сообщения: 10.04.2007 02:02
всем приветы, у меня вопрос как создать авто ран, что бы когда нажимаешь на нужную кнопочку в авто ране наченается установка проги и автоматически ввёдятся кейгены или серийники происходит руссификация и т.д.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Matrix Screensaver


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.