Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Режим выбора пользователя [D7, XP]


DiamondeX ©   (2010-06-19 20:25:00) 

Как определить, что система находится в режиме выбора пользователя, поскольку пользователь выполнил команду системы "Сменить пользователя"? Или, другими словами, как определить, что система заблокирована?
Дело в том, что выполнение некоторых функций (например, определение позиции указателя мыши с помощью Mouse.CursorPos) вызывает ошибку "Call to OS function failed". Хотелось бы избежать этой ошибки.


Winlogon   (2010-06-20 20:39:00) [1]


 try
   Pos := Mouse.CursorPos;
 except
   Pos := Point(-1, -1);
 end;


А потом, в зависимости от потебностей:


 if (Pos.X > -1) and (Pos.Y > -1) then
 begin
   // Всякое разное с Pos
 end;


sniknik   (2010-06-20 10:30:00) [2]

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


DiamondeX   (2010-06-20 08:47:00) [3]

Опять ответ сам нашел )))

function IsWorkstationLocked: Boolean;
var hDesktop: HDESK;
begin
 Result := False;
 hDesktop := OpenDesktop('default', 0, False, DESKTOP_SWITCHDESKTOP);
 if hDesktop <> 0 then begin
   Result := not SwitchDesktop(hDesktop);
   CloseDesktop(hDesktop);
 end;
end;


Эту тему тоже можно закрыть


DiamondeX   (2010-06-20 08:25:00) [4]


> Система не бывает в режиме "заблокированна"

Хорошо, я уточню: речь идет о блокировки скорее компьютера. Вот цитата с англоязычного хелпа WinXP (к сожалению, русского нет): "[WinLogoKey] + L: Lock your computerif you are connected to a network domain, or switch usersif you are not connected to a network domain. " Но сути дела это не меняет.


> А вот нехрен к ним обращатся из сервисов. Типа самый умный
> да?


Я просто пытаюсь определить положение указателя мыши. Если есть другой способ, то скажи. Если нет, то не надо флудить и выставлять себя умнее тех, кто сюда обращается.


Palladin   (2010-06-19 22:01:00) [5]


> как определить, что система заблокирована?

Система не бывает в режиме "заблокированна", ну кроме DOS конечно... до старта autoexec, но эти времена давно прошли.

> Дело в том, что выполнение некоторых функций (например,
> определение позиции указателя мыши с помощью Mouse.CursorPos)
> вызывает ошибку "Call to OS function failed". Хотелось бы
> избежать этой ошибки.

А вот нехрен к ним обращатся из сервисов. Типа самый умный да?


Anatoly Podgoretsky   (2010-06-19 20:44:00) [6]

> DiamondeX  (19.06.2010 20:30:02)  [2]

Пардон перепутал


DiamondeX   (2010-06-19 20:30:00) [7]

Нет, они не закрыты. Это не то же самое, что "Выход из системы"! Если выбрать "Сменить пользователя", то программа продолжает работать, о чем свидетельствуют возникающие ошибки )))


Anatoly Podgoretsky   (2010-06-19 20:27:00) [8]

Заблокировано и логин - это разные вещи. После "смены пользователя" о твоих програмах как то говорить не приходится, они все закрыты.


Наверх

Титульная страница Поиск, карта сайта Написать письмо