нашел пример отключения монитора на С++ Код (Text): // Turn off monitor Sleep(500); // Eliminate user's interaction for 500 ms SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2); http://www.codeproject.com/system/display_states.asp?df=100&forumid=201606&exp=0&select=1708323 подскажите как это на асме реализовать ?
Код (Text): .586P .model flat include windows.inc includelib kernel32.lib includelib user32.lib extern _imp__Sleep@4:dword extern _imp__SendMessageA@16:dword .code start: push 500 call _imp__Sleep@4 push 2 push SC_MONITORPOWER push WM_SYSCOMMAND push HWND_BROADCAST call _imp__SendMessageA@16 ret end start
Mikl_ Ты сам пробывал скомпилировать ? Что-то у меня ошибки выдает Masm. Пробывал сделать в FASM но там на HWND_BROADCAST ругается
лол. Код (Text): format PE GUI include 'E:\Soft\Asm\Fasm\Include\Win32a.inc' entry start section 'TEXT' code readable executable start: push 500 call [Sleep] push 2 push SC_MONITORPOWER push WM_SYSCOMMAND push HWND_BROADCAST call [SendMessage] ret section 'IDATA' import data readable writable library user32, 'user32.dll', kernel32, 'kernel32.dll' import kernel32, Sleep, 'Sleep' import user32, SendMessage, 'SendMessageA' Только путь к хидерам свой, конечно.
Great тоже самое Код (Text): format PE GUI 4.0 include 'win32a.inc' entry start section '.text' code readable executable start: push 500 call [Sleep] push 2 push SC_MONITORPOWER push WM_SYSCOMMAND push HWND_BROADCAST call [SendMessage] ret section '.idata' import data readable writable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' import kernel32,\ Sleep, 'Sleep' import user32,\ SendMessage,'SendMessageA'
Эх вы =) не умеете ошибки исправлять. Код (Text): #define HWND_BROADCAST ((HWND)0xffff) (из WINUSER.H) Пропиши в сорсе в начале: Код (Text): HWND_BROADCAST equ 0xFFFF И получишь: Код (Text): HWND_BROADCAST equ 0xFFFF format PE GUI include 'E:\Soft\Asm\Fasm\Include\Win32a.inc' entry start section 'TEXT' code readable executable start: push 500 call [Sleep] push 2 push SC_MONITORPOWER push WM_SYSCOMMAND push HWND_BROADCAST call [SendMessage] ret section 'IDATA' import data readable writable library user32, 'user32.dll', kernel32, 'kernel32.dll' import kernel32, Sleep, 'Sleep' import user32, SendMessage, 'SendMessageA'
#define HWND_BROADCAST ((HWND)0xffff) #define SC_MONITORPOWER 0xF170 #define WM_SYSCOMMAND 0x0112 Ща пробовал. Сигнал с видео карты отключило начисто)))) Обратно тоже легко включить, достаточно мышкой шевельнуть
зато без броадкаста.. или это сообщение на самом деле не рассылается, а обрабатывается прямо в SendMessage?
скорее всего так и есть ) ченить типа Код (Text): if(hWnd == HWND_BROADCAST) DefWindowProc(0, Msg, wParam, lParam); //только предположение ))