Как отключить монитор

Тема в разделе "WASM.BEGINNERS", создана пользователем tester3000, 16 фев 2007.

  1. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    нашел пример отключения монитора на С++

    Код (Text):
    1. // Turn off monitor
    2. Sleep(500); // Eliminate user's interaction for 500 ms
    3. 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

    подскажите как это на асме реализовать ?
     
  2. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Код (Text):
    1. .586P
    2. .model flat
    3. include windows.inc
    4. includelib kernel32.lib
    5. includelib user32.lib
    6. extern _imp__Sleep@4:dword
    7. extern _imp__SendMessageA@16:dword
    8. .code
    9. start:  push 500
    10.     call _imp__Sleep@4
    11.     push 2
    12.     push SC_MONITORPOWER
    13.     push WM_SYSCOMMAND
    14.     push HWND_BROADCAST
    15.     call _imp__SendMessageA@16
    16.     ret
    17. end start
    :)
     
  3. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Mikl_

    Ты сам пробывал скомпилировать ? Что-то у меня ошибки выдает Masm.

    Пробывал сделать в FASM но там на HWND_BROADCAST ругается

     
  4. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    сорри все разобрался Masm'om скомпилил а можеш подсказать как в FASMe сделать
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    лол.

    Код (Text):
    1. format PE GUI
    2. include 'E:\Soft\Asm\Fasm\Include\Win32a.inc'
    3. entry start
    4.  
    5. section 'TEXT' code readable executable
    6. start:
    7.         push 500
    8.         call [Sleep]
    9.         push 2
    10.         push SC_MONITORPOWER
    11.         push WM_SYSCOMMAND
    12.         push HWND_BROADCAST
    13.         call [SendMessage]
    14.         ret
    15.  
    16. section 'IDATA' import data readable writable
    17. library user32, 'user32.dll', kernel32, 'kernel32.dll'
    18. import kernel32, Sleep, 'Sleep'
    19. import user32, SendMessage, 'SendMessageA'
    Только путь к хидерам свой, конечно.
     
  6. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Great

    тоже самое

    Код (Text):
    1. format PE GUI 4.0
    2. include 'win32a.inc'
    3. entry start
    4.  
    5. section '.text' code readable executable
    6. start:
    7.         push 500
    8.         call [Sleep]
    9.         push 2
    10.         push SC_MONITORPOWER
    11.         push WM_SYSCOMMAND
    12.         push HWND_BROADCAST
    13.         call [SendMessage]
    14.         ret
    15.  
    16. section '.idata' import data readable writable
    17.  
    18.   library kernel32,'KERNEL32.DLL',\
    19.           user32,'USER32.DLL'
    20.  
    21. import kernel32,\
    22.          Sleep, 'Sleep'
    23.  
    24. import user32,\
    25.          SendMessage,'SendMessageA'
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Эх вы =) не умеете ошибки исправлять.

    Код (Text):
    1. #define HWND_BROADCAST  ((HWND)0xffff)
    (из WINUSER.H)

    Пропиши в сорсе в начале:

    Код (Text):
    1. HWND_BROADCAST equ 0xFFFF
    И получишь:

    Код (Text):
    1. HWND_BROADCAST equ 0xFFFF
    2. format PE GUI
    3. include 'E:\Soft\Asm\Fasm\Include\Win32a.inc'
    4. entry start
    5.  
    6. section 'TEXT' code readable executable
    7. start:
    8.         push 500
    9.         call [Sleep]
    10.         push 2
    11.         push SC_MONITORPOWER
    12.         push WM_SYSCOMMAND
    13.         push HWND_BROADCAST
    14.         call [SendMessage]
    15.         ret
    16.  
    17. section 'IDATA' import data readable writable
    18. library user32, 'user32.dll', kernel32, 'kernel32.dll'
    19. import kernel32, Sleep, 'Sleep'
    20. import user32, SendMessage, 'SendMessageA'
     
  8. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    #define HWND_BROADCAST ((HWND)0xffff)
    #define SC_MONITORPOWER 0xF170
    #define WM_SYSCOMMAND 0x0112

    Ща пробовал. Сигнал с видео карты отключило начисто))))
    Обратно тоже легко включить, достаточно мышкой шевельнуть
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Proteus, остальные две определены в EQUATES\USER32.INC в FASM'е =)
     
  10. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    все получилось спасибо

    это же раздел для новичков )))
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    блин, не заметил :)
    ну на будущее - если чего-то не хватает, поищи в SDK ;)
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    DefWindowProc(GetDesktopWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    тоже самое
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    зато без броадкаста..
    или это сообщение на самом деле не рассылается, а обрабатывается прямо в SendMessage?
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    скорее всего так и есть )
    ченить типа

    Код (Text):
    1. if(hWnd == HWND_BROADCAST)
    2.   DefWindowProc(0, Msg, wParam, lParam);
    //только предположение ))