IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Определение названия desktop'а в Delphi. (https://www.imho.ws/showthread.php?t=21071)

Ghost 21.01.2003 17:25

Определение названия desktop'а в Delphi.
 
У меня следующая проблема.

Юзвери упорно отказываются выходить из системы после окончания работы. Я решил сделать screensaver, который через пять минут выдает табличку типа "Ща будет кирдык", а через минуты этот кирдык делает. Профили пользователей создается из DefaultUser. Прописал туда свою прогу. Но этот же профиль действует и на десктопе WinLogon, т.е. на экране с табличкой "Нажмите Ctrl-Alt-Del" через пять минут запускается моя прога, а мне этого не надо. Нужно чтобы она запускалась только на десктопе юзера, который (десктоп) имеет имя Default.

Каким макаром в Delphi можно определить название десктопа, на котором программа запущена. Или, хотя бы, имя пользователя.

Ghost 22.01.2003 23:03

Вложений: 1
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. Как это обойти или исправить?

Ghost 23.01.2003 19:59

Я ничего не понимаю... Скринсейвер начал нормально работать после двух (не больше, не меньше) перезагрузок.

Но все-таки: как узнать имя десктопа? и как создать свой собственный (как это делает программа surrender.exe)?


Часовой пояс GMT +4, время: 15:50.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.