|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/screensavermaker.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "texception.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tsystem.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
#pragma warning(disable : 4996)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <windows.h></windows.h>
|
|
Shinya Kitaoka |
d4642c |
#include <shellapi.h></shellapi.h>
|
|
Toshihiro Shimizu |
890ddd |
//#include <iostream.h></iostream.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <sys stat.h=""></sys>
|
|
Toshihiro Shimizu |
890ddd |
#include <stdio.h></stdio.h>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qurl></qurl>
|
|
Toshihiro Shimizu |
890ddd |
#include <qdesktopservices></qdesktopservices>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void makeScreenSaver(
|
|
Toshihiro Shimizu |
890ddd |
TFilePath scrFn,
|
|
Toshihiro Shimizu |
890ddd |
TFilePath swfFn,
|
|
Shinya Kitaoka |
3bfa54 |
std::string screenSaverName)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
struct _stat results;
|
|
Toshihiro Shimizu |
890ddd |
if (_wstat(swfFn.getWideString().c_str(), &results) != 0)
|
|
Toshihiro Shimizu |
890ddd |
throw TException(L"Can't stat file " + swfFn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int swfSize = results.st_size;
|
|
Toshihiro Shimizu |
890ddd |
std::auto_ptr<char> swf(new char[swfSize]);</char>
|
|
Toshihiro Shimizu |
890ddd |
FILE *chan = _wfopen(swfFn.getWideString().c_str(), L"rb");
|
|
Toshihiro Shimizu |
890ddd |
if (!chan)
|
|
Toshihiro Shimizu |
890ddd |
throw TException(L"fopen failed on " + swfFn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
fread(swf.get(), swfSize, 1, chan);
|
|
Toshihiro Shimizu |
890ddd |
fclose(chan);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TFilePath svscrn = TSystem::getBinDir() + "screensaver.dat";
|
|
Toshihiro Shimizu |
890ddd |
if (!TFileStatus(svscrn).doesExist()) {
|
|
Toshihiro Shimizu |
890ddd |
throw TException(
|
|
Shinya Kitaoka |
3bfa54 |
std::wstring(L"Screensaver template not found: ") +
|
|
Toshihiro Shimizu |
890ddd |
svscrn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
TSystem::copyFile(scrFn, svscrn);
|
|
Toshihiro Shimizu |
890ddd |
HANDLE hUpdateRes =
|
|
Toshihiro Shimizu |
890ddd |
BeginUpdateResourceW(scrFn.getWideString().c_str(), FALSE);
|
|
Toshihiro Shimizu |
890ddd |
if (hUpdateRes == NULL)
|
|
Toshihiro Shimizu |
890ddd |
throw TException(L"can't write " + scrFn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
BOOL result = UpdateResource(
|
|
Toshihiro Shimizu |
890ddd |
hUpdateRes,
|
|
Toshihiro Shimizu |
890ddd |
"FLASHFILE",
|
|
Toshihiro Shimizu |
890ddd |
MAKEINTRESOURCE(101),
|
|
Toshihiro Shimizu |
890ddd |
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
|
|
Toshihiro Shimizu |
890ddd |
swf.get(),
|
|
Toshihiro Shimizu |
890ddd |
swfSize);
|
|
Toshihiro Shimizu |
890ddd |
if (result == FALSE)
|
|
Toshihiro Shimizu |
890ddd |
throw TException(L"can't add resource to " + scrFn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
result = UpdateResource(
|
|
Toshihiro Shimizu |
890ddd |
hUpdateRes,
|
|
Toshihiro Shimizu |
890ddd |
RT_STRING,
|
|
Toshihiro Shimizu |
890ddd |
MAKEINTRESOURCE(1),
|
|
Toshihiro Shimizu |
890ddd |
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
|
|
Toshihiro Shimizu |
890ddd |
(void*)screenSaverName.c_str(),
|
|
Toshihiro Shimizu |
890ddd |
screenSaverName.size());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (result == FALSE)
|
|
Toshihiro Shimizu |
890ddd |
throw TException(L"can't add name to "+scrFn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!EndUpdateResource(hUpdateRes, FALSE))
|
|
Toshihiro Shimizu |
890ddd |
throw TException(L"Couldn't write " + scrFn.getWideString());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void previewScreenSaver(TFilePath scr)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
try {
|
|
Toshihiro Shimizu |
890ddd |
TSystem::showDocument(scr);
|
|
Toshihiro Shimizu |
890ddd |
} catch (...) {
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void installScreenSaver(TFilePath scr)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
3bfa54 |
std::wstring cmd = L"desk.cpl,InstallScreenSaver " + scr.getWideString();
|
|
Toshihiro Shimizu |
890ddd |
int ret = (int)
|
|
Toshihiro Shimizu |
890ddd |
ShellExecuteW(0, L"open", L"rundll32.exe", cmd.c_str(), 0, SW_SHOWNORMAL);
|
|
Toshihiro Shimizu |
890ddd |
if (ret <= 32)
|
|
Toshihiro Shimizu |
890ddd |
throw;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void makeScreenSaver(
|
|
Toshihiro Shimizu |
890ddd |
TFilePath scrFn,
|
|
Toshihiro Shimizu |
890ddd |
TFilePath swfFn,
|
|
Shinya Kitaoka |
3bfa54 |
std::string screenSaverName)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
void previewScreenSaver(TFilePath scr)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void installScreenSaver(TFilePath scr)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|