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

» Autoplay Media Studio

Автор: Kindly
Дата сообщения: 01.12.2006 17:06
NightW0lf, да скачай ты AutorunForGames v3.0 и не парьсяhttp://gooseweb.ru/pub/rus_examples/autorun_for_games.apz . А что, если в системе пользователя задействован еще один такой процесс? Тут лучше искать по оригинальному заголовку окна. Смотри пример, там есть эта фишка и многие другие.
Автор: tavria2
Дата сообщения: 01.12.2006 17:07
NightW0lf
Цитата:
А возможно ли как-нибудь сделать так чтобы если одна копии “autorun.exe” уже запущена, то другую копию моего “autorun.exe” нельзя будет запустить?

Для этого нужно проверить список запущенных процессов, на присутствие в нем более одной копии нашего файла "autorun.exe". Код необходимо поместить в On Preload страницы.
Код: cCheckRunApp = "autorun.exe"; -- имя файла для проверки...
nCount = 0; ---- кол-во копий "autorun.exe" в процессах
tProcesses = System.EnumerateProcesses(); -- список запущенных процессов

for n, cPath in tProcesses do
tFile = String.SplitPath(cPath); -- разлаживаем путь на составляющие
if (String.Lower(tFile.Filename..tFile.Extension) == cCheckRunApp) then -- если наш файл обнаружен в процессах
nCount = nCount + 1; -- кол-во найденных копий "autorun.exe" в процессах
end
end

if (nCount > 1) then -- в процессах обнаружено больше одной копии "autorun.exe"
Window.SetMask(Application.GetWndHandle(), _SourceFolder.."\\AutoPlay\\Images\\mask.bmp", true, 0); -- установить маску
Dialog.Message("Внимание", cCheckRunApp.." уже запущен!", MB_OK, MB_ICONEXCLAMATION);
Application.Exit(0); -- выход
Window.SetMask(Application.GetWndHandle(), "", true, 0); -- убрать маску
end
Автор: NightW0lf
Дата сообщения: 01.12.2006 21:57
Kindly

Цитата:
Тут лучше искать по оригинальному заголовку окна.
Да только я не использую заголовка, и использую скрытый режим!

tavria2
Все работает, Спасибо за помощь!
Еще один вопрос – как сделать чтобы при запуске какого либо инсталлятора мой “autorun.exe” скрывался(но НЕ закрывался), и музыка сама отключалась или ставилась на паузу, а при завершении установки любого инсталлятора(т.е. при его закрытие) восстанавливался обратно мой “autorun.exe” и играла музыка?
Автор: tavria2
Дата сообщения: 01.12.2006 23:10
NightW0lf
Перед запуском инсталлятора сделай паузу с помощью Audio.Pause и установи флаг sound в "false", затем с помощью Window.Hide скрываешь окно. В запуске инсталлятора установи режим ожидания окончания работы. Затем все возвращаешь назад, т.е. отображаешь окно, запускаешь музыку и устанвливаешь флаг sound в "true". Все изменения производи в ф-ции Install().
Автор: vic499
Дата сообщения: 01.12.2006 23:44
Кто подскажет, как запустить два файла, но чтоб комп между ними перегружался?
Я прописал код:

01 result = File.Run("WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true);
02 System.Reboot();
03 result = File.Run("WMP\\wmp11.exe", "", "", SW_SHOWNORMAL, true);

Точнее, как сделать чтобы, после выполнения второй строки, третья запускалась только после перегрузки компа?
Автор: tavria2
Дата сообщения: 02.12.2006 00:20
vic499

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

Код: cReboot = Application.LoadValue("MySection", "MyKey"); -- проверка флага перезагрузки
if (cReboot ~= "YES") then -- не было перезагрузки
result = File.Run("WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true);
Application.SaveValue("MySection", "MyKey", "YES"); -- сохраняем флаг перезагрузки
System.Reboot();
else -- была перезагрузка
result = File.Run("WMP\\wmp11.exe", "", "", SW_SHOWNORMAL, true);
Application.SaveValue("MySection", "MyKey", ""); -- сбрасываем флаг перезагрузки
end
Автор: NightW0lf
Дата сообщения: 02.12.2006 16:56
tavria2
У меня что-то толком не получается с этим кодом! (получилось слегка с музыкой!), а с "Window.Hide" не как!

Код: -- Ф-ция установки DirectX
function Install_DirectX()
Audio.Pause(CHANNEL_BACKGROUND, "AutoPlay\\Audio\\Mus_autorun_44100_mono_vol50pc.ogg", true, false);
sound=false;

if (File.DoesExist(cFileName)) then -- файл найден
File.Run(cFileName, "", "", SW_SHOWNORMAL, false); -- запуск инсталлятора без ожидания завершения
else -- файл не найден
Dialog.Message("Ошибка", "Инсталлятор не найден!", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
end
end

cFileName = "DIRECTX\\DXSETUP.exe"; -- полное имя файла установки
run_message_install_DirectX = Dialog.Message("Установка", "Вы уверены, что хотите продолжить установку?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
if (run_message_install_DirectX == IDYES) then
Install_DirectX(); -- вызов ф-ции установки программы
end
Автор: tavria2
Дата сообщения: 02.12.2006 17:21
NightW0lf

Цитата:
У меня что-то толком не получается с этим кодом! (получилось слегка с музыкой!), а с "Window.Hide" не как!

А я и не вижу, чтобы ты использовал Window.Hide, к тому же по поводу размещения кода, я явно указал, что код должен находиться перед запуском инсталлятора, а у тебя получается, что музыка будет выключена и в случае, если инсталлятор не будет найден. По поводу скрытия/показа окон, я вообще не понимаю какие могут быть проблемы? Не ленись, читай справку - у тебя все получится.
Автор: vic499
Дата сообщения: 02.12.2006 17:54
tavria2


Код: cReboot = Application.LoadValue("MySection", "MyKey"); -- проверка флага перезагрузки
if (cReboot ~= "YES") then -- не было перезагрузки
result = File.Run("WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true);
Application.SaveValue("MySection", "MyKey", "YES"); -- сохраняем флаг перезагрузки
System.Reboot();
else -- была перезагрузка
result = File.Run("WMP\\wmp11.exe", "", "", SW_SHOWNORMAL, true);
Application.SaveValue("MySection", "MyKey", ""); -- сбрасываем флаг перезагрузки
end
Автор: NightW0lf
Дата сообщения: 02.12.2006 18:24
tavria2
Все равно не получается!
Вот наработки:

Код: -- Ф-ция установки DirectX
function Install_DirectX()
if (File.DoesExist(cFileName)) then -- файл найден
File.Run(cFileName, "", "", SW_SHOWNORMAL, false); -- запуск инсталлятора без ожидания завершения
else -- файл не найден
Dialog.Message("Ошибка", "Инсталлятор не найден!", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
end
end

cFileName = "DIRECTX\\DXSETUP.exe"; -- полное имя файла установки
run_message_install_DirectX = Dialog.Message("Установка", "Вы уверены, что хотите продолжить установку?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
if (run_message_install_DirectX == IDYES) then
Install_DirectX(); -- вызов ф-ции установки программы
handle = Application.GetWndHandle();
Window.Hide(handle);
Audio.Pause(CHANNEL_BACKGROUND);
sound=false;
else
File.Run(cFileName, "", "", SW_SHOWNORMAL, false);
Window.Show(handle);
Audio.Play(CHANNEL_BACKGROUND);
sound=true;
end
Автор: tavria2
Дата сообщения: 02.12.2006 20:43
vic499

Цитата:
В этом варианте кода происходит только установка первого файла и больше ничего. Ни перегрузки компа, ни запуска второго файла.

Только, что проверил, перезагрузка проходит нормально, а автозапуск второго файла здесь и не предусмотрен, т.к. ты дал не достаточно информации что и для чего..., при "ручном" запуске проекта, после перезагрузки, будет запущен второй файл.

Цитата:
Дело в том, что я не уверен правильно ли я указываю путь к файлу. Файл находится на болванке и путь к нему может меняться в зависимости от того в какой привод он вставлен "F" "G" или "H".

Здесь скорее всего проблема в путях - необходимо использовать относительный путь, т.е. путь необходимо указать относительно исполняемого файла проекта (autorun.exe). В AMS есть зарезервированная глобальная переменная _SourceFolder, возвращающая путь к исполняемому файлу проекта (autorun.exe). Но есть нюанс, если сборка проекта выполнена в режиме "Web/Email executable", которая по сути будет представлять самараспаковывающийся архив (SFX), а необходимые для запуска файлы не включены в сборку, то при запуске SFX-архива он будет распакован во временную папку и соответственно _SourceFolder вернет путь ко временной папке, а не к папке откуда был запущен SFX-архив и мы не сможем построить относительный путь к нашим файлам. Для решения этой проблемы нужно использовать ф-цию которая будет возвращать путь к SFX-архиву.

Код: -- Ф-ция определяющая путь к SFX-архиву
function GetSFXPath()
local cPath = ""; -- путь
local cArg = _CommandLineArgs[1]; -- параметр коммандной строки
if cArg then -- есть параметр
cPath = String.Right(cArg, String.Length(cArg) - 10); -- выделяем путь из параметра
if (String.Length(cPath) > 0) then -- есть путь
tPath = String.SplitPath(cPath); -- разлаживаем путь на составляющие
cPath = tPath.Drive..tPath.Folder; -- полный путь без имени файла
         if (String.Right(cPath, 1)=="\\") then -- есть завершающий слэш
         cPath = String.Mid(cPath, 1, String.Length(cPath)-1); -- удаляем завершающий слэш
     end
_SourceFolder = cPath; -- переназначаем путь в зарезервированной переменной
end
end
end

GetSFXPath(); -- вызов ф-ции
File.Run(_SourceFolder.."\\WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true);
cFullPath = _SourceFolder.."\\WMP\\wmp11.exe";
Registry.SetValue(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce", "MyValue", cFullPath, REG_SZ);
System.Reboot();
Автор: vic499
Дата сообщения: 02.12.2006 21:46
tavria2

Задача до безобразия проста. На диске, в отдельной папке,разархивированный дистрибутив WinMP-11. Для его установки необходимо запустить файл «wmfdist11», перегрузить комп, а затем установить файлы «wmp11» и «wmpappcompat» из этой папки. Я сделал две отдельные кнопки и прописал им коды:


Код: result = File.Run("WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true);
System.Reboot();
Автор: tavria2
Дата сообщения: 02.12.2006 21:48
NightW0lf

Цитата:
Все равно не получается!

Я же писал, что все это нужно делать в ф-ции... и запуск инсталлятора нужен в режиме ожидания завершения... Будь внимателен!
Код: -- выключаем музыку
-- скрываем окно
File.Run(cFileName, "", "", SW_SHOWNORMAL, true); --запуск инстал-ра c ожиданием...
-- показываем окно
-- включаем музыку
Автор: NightW0lf
Дата сообщения: 02.12.2006 22:43
tavria2
Работает, НО почему-то проверка ошибки борахлит!(т.е. если ошибка то выскакивает табличка, нажимаю "ок" и "autorun.exe" скрывается, музыка не играет и остается толь убивать процесс "autorun.exe" в диспетчере!)

Код: -- Ф-ция установки DirectX
function Install_DirectX()

handle = Application.GetWndHandle();
Audio.Pause(CHANNEL_BACKGROUND); -- ставим на паузу музыку
sound=false;
Window.Hide(handle); -- скрываем "autorun.exe"
if (File.DoesExist(cFileName)) then -- файл найден
File.Run(cFileName, "", "", SW_SHOWNORMAL, true); -- запуск инсталлятора без ожидания завершения
Window.Show(handle); -- показываем "autorun.exe"
Audio.Play(CHANNEL_BACKGROUND); -- воспроизводим музыку
sound=true;

else -- файл не найден
Dialog.Message("Ошибка", "Инсталлятор не найден!", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
end
end

cFileName = "DIRECTX\\DXSETUP.exe"; -- полное имя файла установки
run_message_install_DirectX = Dialog.Message("Установка - DirectX", "Вы уверены, что хотите продолжить установку?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
if (run_message_install_DirectX == IDYES) then
Install_DirectX(); -- вызов ф-ции установки программы
end
Автор: tavria2
Дата сообщения: 02.12.2006 23:00
NightW0lf
Мда... Опять повторяю - ты не внимателен. Я же сказал и показал, что выключать музыку и скрывать окно нужно непосредственно перед запуском инсталлятора, а ты выключаешь еще до проверки инсталлятора, естественно если инсталлятор не найден то он и не запустится, зато окно мы уже потушили , а вот возврат окна и музыки ты делаешь только при условии, что инсталлятор найден.
Автор: vic499
Дата сообщения: 02.12.2006 23:10
tavria2

Сборку делаю в "Hard drive folder"
Автор: NightW0lf
Дата сообщения: 02.12.2006 23:39
tavria2
Ну на конец-то ВСЕ вроде бы работает! Спасибо за помощь!

Код: -- Ф-ция установки DirectX
function Install_DirectX()

if (File.DoesExist(cFileName)) then -- файл найден

Audio.Pause(CHANNEL_BACKGROUND); -- ставим на паузу музыку
sound=false;
Window.Hide(handle); -- скрываем "autorun.exe"
File.Run(cFileName, "", "", SW_SHOWNORMAL, true); -- запуск инсталлятора без ожидания завершения
Window.Show(handle); -- показываем "autorun.exe"
Audio.Play(CHANNEL_BACKGROUND); -- воспроизводим музыку
sound=true;

else -- файл не найден
Dialog.Message("Ошибка", "Инсталлятор не найден!", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
end
end

handle = Application.GetWndHandle();
cFileName = "DIRECTX\\DXSETUP.exe"; -- полное имя файла установки

run_message_install_DirectX = Dialog.Message("Установка - DirectX", "Вы уверены, что хотите продолжить установку?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
if (run_message_install_DirectX == IDYES) then
Install_DirectX();-- вызов ф-ции установки программы
end
Автор: tavria2
Дата сообщения: 02.12.2006 23:46
NightW0lf
Молодец!


vic499

Код: cFullPathApp = _SourceFolder.."\\".._SourceFilename; -- полный путь + имя файла проекта
local cArg = _CommandLineArgs[1]; -- параметр коммандной строки
if (cArg ~= "/c") then -- если проект запущен без параметра "/c"
File.Run(_SourceFolder.."\\WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true);
    Registry.SetValue(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce", "MyValue", cFullPathApp.." /c", REG_SZ);
System.Reboot();
else -- проект запущен с параметром "/c" (continue - продолжение)
File.Run(_SourceFolder.."\\WMP\\wmp11.exe", "", "", SW_SHOWNORMAL, true);
File.Run(_SourceFolder.."\\WMP\\wmpappcompat.exe", "", "", SW_SHOWNORMAL, true);
end    
Автор: Andreyrr
Дата сообщения: 03.12.2006 10:29
Спасибо за предыдущие советы.

Еще вопрос:
Есть проект с базой данных

Выполняю запрос на поиск данных

-- Запрос к таблице MULT и сохранить все входы в таблице tblrs
        tblRS = SQLite.QueryToTable(db, "Select * from MULT where (SerialName LIKE '%"..sSearchString.."%')")

В таком виде поиск выпоняется с учетом регистра
Как сделать чтобы поиск не был зависим от регистра?


Где вообще можно подробно почитать о функциях и операторах SQLite на русском?
Автор: vic499
Дата сообщения: 03.12.2006 11:21
tavria2

Использовав, предложенный код, после нажатия на кнопку запускается файл «wmfdist11», перегружается комп, запускается проект, но запуск файлов «wmp11» и «wmpappcompat» происходит только после повторного нажатия на кнопку, т.е. после повторного запуска кода. Хотелось, чтобы запуск проходил автоматически, иначе теряется весь смысл, код усложняется, а разницы в действиях никакой, нажимать две разные кнопки или одну два раза.
Автор: tavria2
Дата сообщения: 03.12.2006 11:42
vic499
Я привел пример без использования кнопок, думал ты сам разберешся...
Ну, если нужно с кнопкой, тогда так:

On Show страницы:
Код: local cArg = _CommandLineArgs[1]; -- параметр коммандной строки
if (cArg == "/c") then -- если проект запущен с параметром "/c"
File.Run(_SourceFolder.."\\WMP\\wmp11.exe", "", "", SW_SHOWNORMAL, true);
File.Run(_SourceFolder.."\\WMP\\wmpappcompat.exe", "", "", SW_SHOWNORMAL, true);
end
Автор: Toxaaa
Дата сообщения: 03.12.2006 21:53
Привет tavria2 а как правильно вгрузить рисунок в фон страницы и выгрузить его. Я пробую использовать код:

Код: Window.SetMask(Application.GetWndHandle(), "AutoPlay\\Images\\4.jpg", true, 0);
Автор: tavria2
Дата сообщения: 03.12.2006 22:46
Привет Toxaaa

Цитата:
как правильно вгрузить рисунок в фон страницы и выгрузить его.
Штатными средствами никак. Используй объект "Image" в качестве фонового рисунка.

Цитата:
Window.SetMask(Application.GetWndHandle(), "AutoPlay\\Images\\4.jpg", true, 0);
чтото он не работает.
SetMask для этого не предназначен, читай справку.
Автор: BLACK ROZE
Дата сообщения: 04.12.2006 14:54
Помогите, пожалуйста, с написанием скриптов. Для Вас это будет просто, а для меня это темный лес.
Первая ситуация: при нажатии на кнопку, должно появиться диалоговое окно с текстом "Выберите нужную папку для копирования pover.dll (файл для примера)" и с проводником, чтобы пользователь сам мог выбрать место копирования этого файла. Дальше выбираем папку, нажимаем "ОК" - появляется еще одно диалоговое окно с текстом "При запросе о замене оригинального файла - поддтвердите согласием." Нажимаем "ОК" - происходит копирование данного файла в указанную папку. Кроме того, в диалоговых окнах должны присутствовать кнопка "Отмена" - отменяющая весь процесс.
И вторая ситуация: все точно также, только для копирования без замены оригинального файла. И в конце появляется диалоговое окно с текстом "Копирование файла удачно завершено!" или же "Ошибка при копировании файла!"
P.S.: Справочные материалы читала, пробывала работать с готовым примером "копирования папки" - ничего не получается. Наверное, не женское это дело
Автор: tavria2
Дата сообщения: 04.12.2006 16:18
BLACK ROZE

On Click кнопки
Код: lFlag = true; -- флаг разрешить-true/запретить-false копирование
cPathSource = _SourceFolder.."\\pover.dll";    -- путь к "pover.dll" (относительно "autorun.exe")
cPathDest = Dialog.FolderBrowse("Выберите нужную папку для копирования \"pover.dll\":", _DesktopFolder); -- папка назначения (по умолчанию "Рабочий стол")
if (cPathDest ~= "CANCEL") then -- нажата кнопка "OK"
if (File.DoesExist(cPathDest.."\\pover.dll")) then -- если в папке назначения найден оригинальный файл
nBtn = Dialog.Message("Подтверждение замены файла", "Папка уже содержит файл \"pover.dll\".\r\nЗаменить имеющийся файл?", MB_OKCANCEL, MB_ICONQUESTION, MB_DEFBUTTON1);
if (nBtn == IDCANCEL) then -- нажата кнопка "Отмена"
lFlag = false; -- флаг запретить копирование
end
end
if (lFlag) then -- копирование разрешено
File.Copy(cPathSource, cPathDest, true, true, false, true, nil); -- копирование
error = Application.GetLastError(); -- проверка ошибки копирования
if error ~= 0 then -- есть ошибка
Dialog.Message("Ошибка", "Ошибка при копировании файла!", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
else -- нет ошибок
Dialog.Message("Сообщение", "Копирование файла удачно завершено!", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end
end
end
Автор: NightW0lf
Дата сообщения: 04.12.2006 21:39
tavria2
Как мне заменить стандартные курсоры (т.е. кисть, стрелку и т.п.) в «autorun.exe» на свои курсоры? Хочу добавить, что мои курсоры в формате «.cur» и «.ani».

P.S.: я уже читал Изменяем курсор в приложении от GOOSE только что-то вообще не понял НИЧЕГО!
Автор: samson1
Дата сообщения: 04.12.2006 22:28
А, как создать новое окно не закрывая предыдущего? Пример: создаем основное меню, первая страница - (рубрикатор программ), переходим на выбранный раздел (страница-N) - предположим Multimedia, выбираем 3gp converter и открывается новое окно (меньшего размера) с кнопочками: Install, Key, Rus. (Ну или, что-то вроде этого.)
Автор: tavria2
Дата сообщения: 04.12.2006 23:14
NightW0lf

Цитата:
Хочу добавить, что мои курсоры в формате «.cur» и «.ani».

Код: -- Сохраняем текущий курсор
function SaveCursor()
local OldCursor = DLL.CallFunction(_SystemFolder.."\\User32.dll", "GetCursor", "", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
return OldCursor
end

-- Загружаем курсор из файла и отображаем
function LoadCursor(cFileName)
local NewCursor = DLL.CallFunction(_SystemFolder.."\\user32.dll", "LoadCursorFromFileA", "\""..cFileName.."\"", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
local retVal = DLL.CallFunction(_SystemFolder.."\\User32.dll", "SetCursor", NewCursor, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
end

-- Восстанавливаем старый курсор
function RestoreCursor()
local retVal = DLL.CallFunction(_SystemFolder.."\\User32.dll", "SetCursor", SaveCursor(), DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
end

cFileName = _WindowsFolder.."\\Cursors\\hand.ani"; -- путь и имя файла курсора
SaveCursor(); -- Сохраняем текущий курсор
LoadCursor(cFileName); -- Загружаем курсор из файла и отображаем
Application.Sleep(5000); -- Замораживаем проект на 5 сек
RestoreCursor(); -- Восстанавливаем старый курсор
Автор: GOOSE
Дата сообщения: 05.12.2006 08:52
Ё!
А написали то! пока я отсутствовал
tavria2 - респектище! Подробнейшие ответы... Быстро... Четко... Класс!!!
samson1

Цитата:
как создать новое окно не закрывая предыдущего

tavria2 правильно сказал. Да и зачем? Создай эти объекты у себя на странице и показывай их, когда нужно, скрывая все остальное на этот период!

Автор: Lexua
Дата сообщения: 05.12.2006 10:43

Цитата:
tavria2 правильно сказал. Да и зачем? Создай эти объекты у себя на странице и показывай их, когда нужно, скрывая все остальное на этот период!


Не скажи, хорошо ведь смотрится


Но tavria2 и GOOSE все же правы, и все что здесь видно - это список скрываемых и отключаемых объектов. В том числе и всплывающее окно. Окно, это просто графический объект, не более, но иллюзия неплохая

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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