Я пишу менеджер скринсейверов. Моя проблема описывается очень просто: я не могу запустить скринсейвер по имени файла. Следующий код запускает конфигурацию скринсейвера:
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.
ShellExecute( NULL, "open", "c:\\screensave.exe", "-s", "c:\\", SW_SHOW );
Вот в таком варианте получилось, если переименовать *.scr в *.exe .
Если убрать "-s" и оставить пустой параметр "-s" то отобразится окно настроек скринсейвера.
"y0prst" <45523@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1447729@news.rsdn.ru...
>Я пишу менеджер скринсейверов. Моя проблема описывается очень просто: я не могу запустить скринсейвер по имени файла. Следующий код запускает конфигурацию скринсейвера:
> > 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.
>
Posted via RSDN NNTP Server 1.9
Здравствуйте, sjukov, Вы писали:
S>ShellExecute( NULL, "open", "c:\\screensave.exe", "-s", "c:\\", SW_SHOW );
S>Вот в таком варианте получилось, если переименовать *.scr в *.exe .
S>Если убрать "-s" и оставить пустой параметр "-s" то отобразится окно настроек скринсейвера.
Воспользовался вашим кодом для запуска скринсейвера. Для конфигурирования оставил прежний, ибо итак работает

А .scr в .exe обязательно переименовывать? У меня в win-xp итак работает...
Ну раз работает, значит слава Богу

Как я понял у меня с типом файлов *.scr ассоциирован AutoCAD и поэтому
хранитель экрана у меня открывается в среде AutoCAD

ShellExecute аналогочен тому как если бы ты в проводнике
дважды кликнул на .scr файле.
"y0prst" <45523@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1449328@news.rsdn.ru...
> Здравствуйте, sjukov, Вы писали:
>
> S>ShellExecute( NULL, "open", "c:\\screensave.exe", "-s", "c:\\", SW_SHOW );
> S>Вот в таком варианте получилось, если переименовать *.scr в *.exe .
> S>Если убрать "-s" и оставить пустой параметр "-s" то отобразится окно настроек скринсейвера.
>
> Воспользовался вашим кодом для запуска скринсейвера. Для конфигурирования оставил прежний, ибо итак работает
> А .scr в .exe обязательно переименовывать? У меня в win-xp итак работает...Posted via RSDN NNTP Server 1.9