logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Visual Basic - jak przełączyć monitor w stan czuwania?

Bartek_Wosik 02 Sie 2005 09:59 3624 10
REKLAMA
  • #1 1699515
    Bartek_Wosik
    Poziom 27  
    Posty: 1028
    Pomógł: 100
    Ocena: 42
    Witam!
    Czy jest jakies polecenie za pomocą którego można wyłączyć monitor (przełączyc go w stan czuwania) ?

    Pozdrawiam, Bartek
  • REKLAMA
  • #2 1699909
    Kszol
    Poziom 13  
    Posty: 138
    Pomógł: 2
    Ocena: 2
    Musisz wyslac komunikat WM_SYSCOMMAND do okna z wParam SC_MONITORPOWER i lParam z:

    0 - aby wyłączyć monitor
    1 - aby go włączyć z powrotem
  • #3 1704707
    Bartek_Wosik
    Poziom 27  
    Posty: 1028
    Pomógł: 100
    Ocena: 42
    Czy mozesz mi napisac jak powinno wyglądać takie polecenie?
  • REKLAMA
  • #4 1708365
    Kszol
    Poziom 13  
    Posty: 138
    Pomógł: 2
    Ocena: 2
    Pisze w Delphi ale to jest standardowa funkcja API więc przeksztalc sobie to na wasza skladnie:

    SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);
  • Pomocny post
    #5 1708426
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    To powinno byc tak ale nie sprawdzilem.



    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    
        Const WM_SYSCOMMAND = &H112
        Const SC_MONITORPOWER= &HF170


    komendy ktore potrzebujesz:

    SendMessage(Form1.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2&) 'Wylacz
    
    SendMessage(Form1.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 1&) ' StandBY
    
    SendMessage(Form1.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1&) 'Wlacz



    pozdr
  • #6 1710029
    Bartek_Wosik
    Poziom 27  
    Posty: 1028
    Pomógł: 100
    Ocena: 42
    Coś mi to zbytnio nie działa. sivex mozesz to sprawdzić? Jesli mogę Cie prosić to podeślij mi jakis przykład zastosowania takiej funkcji. wosik(_at_)op.pl lub umieść to na forum

    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #7 1713771
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

    Const WM_SYSCOMMAND = &H112
    Const SC_MONITORPOWER = &HF170


    Private Sub Form_Load()

    SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2& 'Wylacz
    End Sub
  • REKLAMA
  • #8 1715936
    Bartek_Wosik
    Poziom 27  
    Posty: 1028
    Pomógł: 100
    Ocena: 42
    Zrobiłem to tak:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
    
    Const WM_SYSCOMMAND = &H112 
    Const SC_MONITORPOWER = &HF170 
    
    
    Private Sub Command1_Click()
    
    SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2& 'Wylacz 
    End Sub 
    i nie działa, spróbowałem jeszcze zmienic na:
    Private Sub Command1_Click()
    
    SendMessage Command1.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2& 'Wylacz 
    End Sub
    ale to tez nie zadziałało. Mam Windowsa XP Home, czy dzialanie tego programiku jest zależne od systemu?

    Pozdrawiam
  • Pomocny post
    #10 1749402
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Dokladnie nazwa formy to "Form1". Chyba ze wpiszesz
    Me.hwnd

    Oczywiscie deklaracja api to jest jeden wiersz znakow a nie dwa jak pokazuje na "elektrodzie"
    pozdr.
  • #11 1749752
    Bartek_Wosik
    Poziom 27  
    Posty: 1028
    Pomógł: 100
    Ocena: 42
    Wielkie dzieki za pomoc.

    Pozdrawiam wszystkich Forumowiczów.

    Temat uważam za zamknięty.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy sposobu przełączenia monitora w stan czuwania za pomocą Visual Basic. Rozwiązaniem jest wysłanie komunikatu WM_SYSCOMMAND do okna aplikacji z parametrem SC_MONITORPOWER i odpowiednią wartością lParam: 2 - wyłączenie monitora, 1 - tryb standby, -1 - włączenie monitora. Przykładowa deklaracja funkcji API SendMessage z biblioteki user32 oraz stałe WM_SYSCOMMAND i SC_MONITORPOWER zostały podane do implementacji w Visual Basic. Wskazano, że zamiast Form1.hwnd należy użyć właściwego uchwytu okna aplikacji, np. Me.hwnd. Użytkownicy zgłaszali problemy z działaniem na Windows XP Home, co może wynikać z nieprawidłowego uchwytu okna lub składni. Ostatecznie potwierdzono, że metoda działa po poprawnym zastosowaniu deklaracji i wywołania SendMessage z właściwym hwnd.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA