Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Програмно выключить монитор   Найти похожие ветки 

 
deamon_t   (2005-08-30 23:05) [0]

Привет всем. Вощем задача такая, написать программу которая программно выключает монитор, это необходимо для того чтобы когда я удаленно например RAdmin-ом чегото делаю, операторы не видели монитор. Вобщемто нашел такую команду SendMessage(Handle,WM_SYSCONNAND,SC_MONITORPOWER,2) монитор гаситься но при нажатии на клавишу или мышку он опять зажигаеться, т.е. чтото типа ждущего режима. Подскажите как сделать чтобы он гасился намертво.

Заранее большое спасибо за ответы.


 
Rentgen ©   (2005-08-31 07:55) [1]

Что то типа этого :
1 или 0
SendMessage(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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 2.587 c
1-1129268173
denmin
2005-10-14 09:36
2005.11.06
Нужен FAQ или справочник по Rave Reports 5.0.


6-1122096507
offs
2005-07-23 09:28
2005.11.06
Поиск файлов в локальной сети


2-1129043862
psa247
2005-10-11 19:17
2005.11.06
Версия Windows


14-1129545597
sergg
2005-10-17 14:39
2005.11.06
Такой же по качеству ресурс о Buildere?


14-1129027442
Ketmar
2005-10-11 14:44
2005.11.06
посоветуйте быстрй хороший хост...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский