vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Benutzer wechselt 
Autor: brave@heart
Datum: 21.02.06 01:44

ich hab da was gefunden. läuft über subclassing
die nachrichten an die eigene anwendung werden nach WM_WTSSESSION_CHANGE abgehört.
wird so gemacht:

Form1:
Option Explicit
 
Private Sub Form_Load()
    Call Hook(Me.hWnd)
    Me.AutoRedraw = True
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    Call Unhook(Me.hWnd)
End Sub
Module1:
Option Explicit
 
Private Declare Function WTSRegisterSessionNotification Lib "Wtsapi32.dll" _
    (ByVal hWnd As Long, ByVal dwFlags As Long) _
    As Boolean
Private Declare Function WTSUnRegisterSessionNotification Lib "Wtsapi32.dll" _
    (ByVal hWnd As Long) _
    As Boolean
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long) _
    As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) _
    As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
    (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal uMsg As Long, ByVal _
    wParam As Long, ByVal lParam As Long) _
    As Long
 
Private Const NOTIFY_FOR_THIS_SESSION As Long = 0
 
Private Const WM_WTSSESSION_CHANGE As Long = &H2B1
Private Const WTS_SESSION_LOCK As Long = 7
Private Const WTS_SESSION_UNLOCK As Long = 8
 
Public defWindowProc As Long
Private Const GWL_WNDPROC As Long = (-4)
 
Public Sub Unhook(fhwnd As Long)
    Call WTSUnRegisterSessionNotification(fhwnd)
    If defWindowProc Then
        Call SetWindowLong(fhwnd, GWL_WNDPROC, defWindowProc)
        defWindowProc = 0
    End If
End Sub
 
Public Sub Hook(fhwnd As Long)
    defWindowProc = SetWindowLong(fhwnd, GWL_WNDPROC, AddressOf WindowProc)
    Call WTSRegisterSessionNotification(fhwnd, NOTIFY_FOR_THIS_SESSION)
End Sub
 
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam _
  As Long, ByVal lParam As Long) As Long
    Select Case uMsg
        Case WM_WTSSESSION_CHANGE
            Select Case wParam
                Case WTS_SESSION_LOCK
                    Form1.Print Time & " - session has been locked."
                Case WTS_SESSION_UNLOCK
                    Form1.Print Time & " - session has been unlocked."
            End Select
    End Select
    WindowProc = CallWindowProc(defWindowProc, hWnd, uMsg, wParam, lParam)
End Function

mfg
brave@heart

...bis zur unendlichkeit und noch viel weiter...

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Benutzer wechselt964McKirk17.02.06 19:03
Re: Benutzer wechselt629TheNukeduke20.02.06 01:47
Re: Benutzer wechselt594McKirk20.02.06 09:53
Re: Benutzer wechselt648Lamer²20.02.06 14:51
Re: Benutzer wechselt631McKirk20.02.06 20:34
Re: Benutzer wechselt1.076brave@heart21.02.06 01:44
Re: Benutzer wechselt615McKirk21.02.06 07:30

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel