Auf Benutzerwechsel, An-/Abmelden und Lock/Unlock reagieren

    • Offizieller Beitrag

    Ich brauche mal eure Hilfe bei einer Funktion zum reagieren auf Benutzerwechsel, An-/Abmelden und Lock/Unlock.

    Mein erster Versuch war das hier:

    [autoit]


    Global Const $WM_WTSSESSION_CHANGE = 0x02B1
    GUIRegisterMsg($WM_WTSSESSION_CHANGE, 'ON_WM_WTSSESSION_CHANGE')

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(50)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func ON_WM_WTSSESSION_CHANGE($hWndGUI, $MsgID, $WParam, $LParam)
    ConsoleWrite(@HOUR&':'&@MIN&':'&@SEC&@CRLF)
    EndFunc

    [/autoit]

    Da tut sich aber nichts (sprich: die Funktion wird nie aufgerufen).
    Nach ein bißchen rumgoogeln habe ich dann rausbekommen, dass man WTSRegisterSessionNotification registrieren muss, um diese Message auswerten zu können. Weiteres rumgoogeln brachte dann ein VB-Programm zu Tage:

    Spoiler anzeigen

    Nun habe ich von VB aber keinen Plan. Kann mir da mal jemand helfen, das in AutoIt zu übersetzen?

  • Die werden mit DLLCall aufgerufen.
    So, hab jetzt das Beispiel fertig :)

    Spoiler anzeigen
    [autoit]

    Global Const $WM_WTSSESSION_CHANGE = 0x02B1

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $NOTIFY_FOR_ALL_SESSIONS = 1
    Global Const $NOTIFY_FOR_THIS_SESSION = 0

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $WTS_CONSOLE_CONNECT = 0x1 ;~ A session was connected to the console terminal.
    Global Const $WTS_CONSOLE_DISCONNECT = 0x2 ;~ A session was disconnected from the console terminal.
    Global Const $WTS_REMOTE_CONNECT = 0x3 ;~ A session was connected to the remote terminal.
    Global Const $WTS_REMOTE_DISCONNECT = 0x4 ; A session was disconnected from the remote terminal.
    Global Const $WTS_SESSION_LOGON = 0x5 ;~ A user has logged on to the session.
    Global Const $WTS_SESSION_LOGOFF = 0x6 ;~ A user has logged off the session.
    Global Const $WTS_SESSION_LOCK = 0x7 ;~ A session has been locked.
    Global Const $WTS_SESSION_UNLOCK = 0x8 ;~ A session has been unlocked.
    Global Const $WTS_SESSION_REMOTE_CONTROL = 0x9 ;A session has changed its remote controlled status. To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric.

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_WTSSESSION_CHANGE, 'ON_WM_WTSSESSION_CHANGE')
    $HandlerGUI = GUICreate("")
    $success = DllCall("Wtsapi32.dll","int","WTSRegisterSessionNotification","hwnd",$HandlerGUI,"dword",$NOTIFY_FOR_THIS_SESSION)
    ConsoleWrite("handler registered: " & $success[0] & @CRLF)
    While 1
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func ON_WM_WTSSESSION_CHANGE($hWndGUI, $MsgID, $WParam, $LParam)
    Local Const $SessionID = Number($LParam)
    Local Const $MessageReason = $WParam
    ConsoleWrite("> " & @HOUR&':'&@MIN&':'&@SEC & " | SID=" & $SessionID & " | ")
    Switch $MessageReason
    Case $WTS_CONSOLE_CONNECT
    ConsoleWrite("A session was connected to the console terminal.")
    Case $WTS_CONSOLE_DISCONNECT
    ConsoleWrite("A session was disconnected from the console terminal.")
    Case $WTS_REMOTE_CONNECT
    ConsoleWrite("A session was connected to the remote terminal.")
    Case $WTS_REMOTE_DISCONNECT
    ConsoleWrite("A session was disconnected from the remote terminal.")
    Case $WTS_SESSION_LOGON
    ConsoleWrite("A user has logged on to the session.")
    Case $WTS_SESSION_LOGOFF
    ConsoleWrite("A user has logged off the session.")
    Case $WTS_SESSION_LOCK
    ConsoleWrite("A session has been locked.")
    Case $WTS_SESSION_UNLOCK
    ConsoleWrite("A session has been unlocked.")
    Case $WTS_SESSION_REMOTE_CONTROL
    ConsoleWrite("A session has changed its remote controlled status. To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric.")
    EndSwitch
    ConsoleWrite(@CRLF)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    Local $success = DllCall("Wtsapi32.dll","int","WTSUnRegisterSessionNotification","hwnd",$HandlerGUI)
    ConsoleWrite("Handler unregistered: " & $success[0] & @CRLF)
    EndFunc

    [/autoit]
  • Oscar : Was verstehst du denn nicht? Ist doch einfach: Du musst nur mich fragen :) *Mit Wissen protz weil selber DLLs programmieren* :D:rofl:

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)