OK. Тогда объясните мне такую фигню:
Сделал ScreanSaver, переименовал LOGOFF.EXE в LOGOFF.SCR, установил на своей машине - все работает. Ставлю на студенческую - работает.
Далее начинаются непонятки.
Устанавливаю на другую студенческую (конфигурация такая же, что и на предыдущей), выдает ошибку (см. рис.). Запускаю exe-шник - работает. Запускаю LOGOFF.SCR - работает. Автоматически не запускается, точнее запускается, но не рабоатет (см. рис.). Создаю такой же проект на студенческой машине (WinNT4, Delphi3; у меня - Win2k, Delphi6), файл получается вдвое меньше. Запускаю exe-шник - работает, запускаю LOGOFF.SCR - работает. Автоматически - выдает ошибку. И это при том, что на WinLogon'е ошибок не выдает.
ScreenSaver прописан в профиле Default User и действует на пользователя Guest и на экране WinLogon (т.е. на том экране, на котором висит табличка Нажмите Ctrl-Alt-Del). Прикол в том, что в код вставлена строка
exitwindowsex(ewx_logoff,0);
Но на десктопе пользователя (Default) она делает LOGOFF, а на WinLogon'е - SHUTDOWN. Мне этого не надо, и я в код, который выполняется при загрузке, вставил строки:
var
s: String;
uname: pchar;
unsiz: integer;
begin
...
uname := StrAlloc(255);
unsiz := 254;
GetUserName(uname,unsiz);
if (unsiz > 0) then s := string(uname)
else s := 'n/a';
StrDispose(uname);
if UpperCase(s) <> 'GUEST' then Halt(0);
...
end;
По видимому, ошибка возникает при запуске процедуры GetUserName. Как это обойти или исправить?
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
|