Текущий архив: 2005.11.06;
Скачать: CL | DM;
ВнизПрограмно выключить монитор Найти похожие ветки
← →
deamon_t (2005-08-30 23:05) [0]Привет всем. Вощем задача такая, написать программу которая программно выключает монитор, это необходимо для того чтобы когда я удаленно например RAdmin-ом чегото делаю, операторы не видели монитор. Вобщемто нашел такую команду SendMessage(Handle,WM_SYSCONNAND,SC_MONITORPOWER,2) монитор гаситься но при нажатии на клавишу или мышку он опять зажигаеться, т.е. чтото типа ждущего режима. Подскажите как сделать чтобы он гасился намертво.
Заранее большое спасибо за ответы.
← →
Rentgen © (2005-08-31 07:55) [1]Что то типа этого :
1 или 0SendMessage(Application.Handle,wm_SysCommand,SC_MonitorPower,1);
Только поиню какие то глюки с ВКЛЮЧЕНИЕМ были ;)
← →
deamon_t (2005-08-31 09:07) [2]Если было все так просто :-(,
SendMessage(Application.Handle,wm_SysCommand,SC_MonitorPower,1);
это тоже самое, в мсдн написано что 1 это энергосберегающий режим, а 2 это выключение монитора, но я в них разницы не увидел. Сразу предупреждаю что значения LParam равные 0 и -1 катят наверное только в 98 виндоусе, покрайней мере в 2000/ХР не работают точно. Может есть какойто другой способ, или можно както отучить чтобы при нажатии на клавиатуру или мышку монитор не включался, очень нада!
← →
Ботвин Дмитрий (2005-08-31 09:36) [3]deamon_t (31.08.05 09:07) [2]
>Может есть какойто другой способ, или можно както отучить чтобы при нажатии на клавиатуру или мышку монитор не включался
Это тока кнопкой Power. Программно выключить монитор нельзя - можно только перевести его в ждущий режим!
← →
deamon_t (2005-08-31 13:47) [4]Ботвин Дмитрий (31.08.05 09:36) [3]
>Программно выключить монитор нельзя - можно только перевести его в ждущий режим!
Мне подойдет и ждущий режим, единственное чтобы при движении мыши либо нажатии клавиатуры монитор из него НЕ выходил. Я думаю что это должно настраиваться гдето в реестре, но вот где копать я даже не имею понятия. Вобщемто можно просто сделать чтобы команда гашения монитора передавалась постоянно в цикле, но не уверен что это не отразиться на долговечности работы монитора.
← →
deamon_t (2005-08-31 21:00) [5]Ндя, тишина :-(
← →
Ботвин Дмитрий (2005-09-01 13:33) [6]Вопрос: А как тогда монитор выйдет из ждущего режима для дальнейшей работы?
← →
deamon_t (2005-09-01 17:17) [7]Ботвин Дмитрий (01.09.05 13:33) [6]
Монитор выключиться, но удаленный монитор будет видно через RAdmin...
← →
Ботвин Дмитрий (2005-09-02 08:14) [8]deamon_t (01.09.05 17:17) [7]
Про RAdmin - это понятно. Надо тока предусмотреть включение монитора на удаленном компе, иначе как юзер работать продолжит?
Решение твоей задачи примерно таково:
Засаживаешь на удаленном компе клиента, который делает следующие
действия:
1.Отключает клаву и мышь на этом компе.
2.Переводит монитор в ждущий режим с помощью SendMessage
3.После окончания твоих действий включает клаву и мышь.
4.Выводит монитор из ждущего режима опять через SendMessage.
Вот и весь алгоритм. Если будут трудности с реализацией пиши, поможем...
← →
deamon_t (2005-09-02 09:06) [9]Ботвин Дмитрий (02.09.05 08:14) [8]
А как отключить клавиатуру и мышь? Функция BlockInput не работает, клавиатура блокируеться но при нажатии на клавишу монитор всеравно выходит из standby :-( Видел ещё функцию EnableHardwareInput в файле user.exe но это не PE файл. Поэтому оттуда её вытащить нельзя.
← →
Котик Бегемотик (2005-09-02 09:17) [10]Будучи юзером - убил бы за такую самодеятельность !!!
Если нужно настроить машинку юзера пользуйтесь ммс или гиеной, но выключать монитор во время работы юзера ??? ужасс...
← →
Ботвин Дмитрий (2005-09-02 13:07) [11]Вот модуль блокировки и разблокировки системы, взятый мной откуда то с инета. Проверено - работает.
unit LockSys;
interface
uses
Windows;
type
TLockMode = (lmInput, lmSystemKeys, lmBoth);
function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
function LockSystem(LockMode: TLockMode): Boolean;
function UnLockSystem(UnLockMode: TLockMode): Boolean;
var
xBlockInput: function(Block: BOOL): BOOL; stdcall;
implementation
function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
var
_lib: tHandle;
begin
Result := false;
_p := nil;
if LoadLibrary(PChar(_dllname)) = 0 then
exit;
_lib := GetModuleHandle(PChar(_dllname));
if _lib <> 0 then
begin
_p := GetProcAddress(_lib, PChar(_funcname));
if _p <> nil then
Result := true;
end;
end;
function LockSystem(LockMode: TLockMode): Boolean;
begin
Result := False;
if LockMode = lmSystemKeys then //Locking system
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0) then
Exit;
if LockMode = lmInput then //locking keyb and mouse
if FuncAvail("USER32.DLL", "BlockInput", @xBlockInput) then
xBlockInput(true)
else
Exit;
if LockMode = lmBoth then
begin
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0) then
Exit;
if FuncAvail("USER32.DLL", "BlockInput", @xBlockInput) then
xBlockInput(true)
else
Exit;
end;
Result := True;
end;
function UnLockSystem(UnLockMode: TLockMode): Boolean;
begin
Result := False;
if UnLockMode = lmSystemKeys then //UnLocking system
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0) then
Exit;
if UnLockMode = lmInput then //unlocking keyb and mouse
if FuncAvail("USER32.DLL", "BlockInput", @xBlockInput) then
xBlockInput(false)
else
Exit;
if UnLockMode = lmBoth then
begin
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0) then
Exit;
if FuncAvail("USER32.DLL", "BlockInput", @xBlockInput) then
xBlockInput(false)
else
Exit;
end;
Result := True;
end;
end.
Пример использования:
LockSystem(lmBoth); // Блокировка всей системы
UnLockSystem(lmInput); // Разблокировка клавы и мыши
← →
deamon_t (2005-09-02 13:11) [12]Котик Бегемотик (02.09.05 09:17) [10]
Спасибо за "особо ценное" замечание...
Страницы: 1 вся ветка
Текущий архив: 2005.11.06;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.039 c