PAVELNEXT
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору вот код, но почему то он не срабатывает если проект свёрнут в системной трее, помогите поправить function GetFileName() local Res = ""; -- возвращаемый результат nArgCount = Table.Count(_CommandLineArgs); -- кол-во параметров if nArgCount ~= 0 then -- если есть параметры if String.Find(_CommandLineArgs[nArgCount], "SFXSOURCE:", 1, false) ~= -1 then -- если SFX-архив Res = String.Replace(_CommandLineArgs[nArgCount], "SFXSOURCE:", "", false); -- путь и имя SFX-файла else -- если не SFX-архив Res = _SourceFolder.."\\".._SourceFilename; -- путь и имя файла end else -- если нет параметров Res = _SourceFolder.."\\".._SourceFilename; -- путь и имя файла end return Res -- возвращаем результат end ------------------------------------------------------------------------------------------------------------------------------------ -- Восстанавливает окно ранее запущенного проекта ------------------------------------------------------------------------------------------------------------------------------------ function WindowRestore() local hWnd = Application.GetWndHandle(); -- дескриптор текущего окна приложения local WM_MOUSEWHEEL = 522; local ICON_ID = 1073807360; local ICON_CLICK = 1024; -- скрываем окно повторно запущенного проекта (обрезаем окно до нулевого размера, для предотвращения мелькания) hReg = DLL.CallFunction("gdi32.dll", "CreateRectRgn", "0,0,0,0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); DLL.CallFunction("user32.dll", "SetWindowRgn", hWnd..","..hReg..",1", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); Window.Close(hWnd, CLOSEWND_SENDMESSAGE); -- закрываем повторно запущенное приложение -- проверка видимости окна (если свернуто в системный трей) local IsVisible = tonumber(DLL.CallFunction("user32.dll", "IsWindowVisible", hWndReg, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL)); if IsVisible == 0 then -- если окно свернуто в трей -- устанавливаем родительское окно "Рабочий стол", для окна ранее запущенного проекта DLL.CallFunction("user32.dll", "SetParent", hWndReg..",0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); -- восстанавливает свернутое окно программы и активизирует его DLL.CallFunction("user32.dll", "OpenIcon", hWndReg, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); end local isMinimize = tonumber(DLL.CallFunction("user32.dll", "IsIconic", hWndReg, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL)); if isMinimize ~= 0 then -- если окно свернуто на панели задач -- активизируем и отображаем окно ранее запущенного проекта - размеры окна по умолчанию DLL.CallFunction("user32.dll", "ShowWindow", hWndReg..",9", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); end -- помещаем окно на передний план DLL.CallFunction("user32.dll", "SetForegroundWindow", hWndReg, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); end ------------------------------------------------------------------------------------------------------------------------------------ bFirstStart = true; -- флаг первого запуска проекта sFileName = GetFileName(); -- получаем путь и имя файла проекта ID = File.GetAttributes(sFileName).WriteDateISO; -- создаем идентификатор приложения hWndReg = Application.LoadValue("FileRunOnce", ID); -- пытаемся получить из реестра - дескриптор окна приложения if hWndReg == "" then -- если в реестре нет дескриптора окна запущенного проекта -- первый запуск проекта Application.SaveValue("FileRunOnce", ID, Application.GetWndHandle()); -- сохраняем в реестре - дескриптор текущего окна проекта else -- если в реестре есть дескриптор окна запущенного проекта -- возможно повторный запуск проекта -- проверка существования окна с дескриптором из реестра local IsWindow = DLL.CallFunction("user32.dll", "IsWindow", hWndReg, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); if IsWindow == "0" then -- окно приложения не существует - ложные данные в реестре -- первый запуск проекта Application.SaveValue("FileRunOnce", ID, Application.GetWndHandle()); -- сохраняем в реестре - дескриптор текущего окна проекта else -- окно приложения существует -- повторный запуск проекта bFirstStart = false; -- флаг первого запуска проекта WindowRestore(); -- восстанавливаем окно запущенного проекта end end Цитата: А у вас AutoPlay Media Studio 8 ? | AutoPlay Media Studio 7 | Всего записей: 105 | Зарегистр. 14-05-2010 | Отправлено: 17:19 10-03-2011 | Исправлено: PAVELNEXT, 20:59 10-03-2011 |
|