Я пишу менеджер скринсейверов. Моя проблема описывается очень просто: я не могу запустить скринсейвер по имени файла. Следующий код запускает конфигурацию скринсейвера:
STARTUPINFO si;
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
ZeroMemory( &pi, sizeof(pi) );
CreateProcess (
filename, //LPCTSTR lpApplicationName,
NULL, //LPTSTR lpCommandLine,
NULL, //LPSECURITY_ATTRIBUTES lpProcessAttributes,
NULL, //LPSECURITY_ATTRIBUTES lpThreadAttributes,
false, //BOOL bInheritHandles,
0, //DWORD dwCreationFlags,
NULL, //LPVOID lpEnvironment,
NULL, //LPCTSTR lpCurrentDirectory,
&si, //LPSTARTUPINFO lpStartupInfo,
&pi//LPPROCESS_INFORMATION lpProcessInformation
);
Никакие значения lpCommandLine (а я пробовал -s, /s, s) не изменяют такого поведения (скринсейвер не показывается).
Кроме того, я пытался импортировать функцию ScreenSaverProc из файла скринсейвера, но, судя по всему, её там нет (по крайней мере, указатель на неё после попытки импорта -- нулевой).
Вот код импорта:
HMODULE ScreensaverLibrary = LoadLibrary(filename);
FARPROC ScreenSaverProc = GetProcAddress(ScreensaverLibrary, "ScreenSaverProc"); // значение ScreenSaverProc - 0.