Tipp-Upload: VB 5/6 0099: Notebook an Dockingstation?
von OlimilO
Hinweis zum Tippvorschlag
Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Sonstiges
- System
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Notebook, Dockingstation, IsDocked, GetCurrentHWProfile, HW_PROFILE_INFO, DOCK_INFO,
Der Vorschlag wurde erstellt am: 11.09.2007 23:43.
Die letzte Aktualisierung erfolgte am 23.02.2008 16:47.
Beschreibung
Wenn es in einem Programm erforderlich ist, zu wissen, ob ein Computer an eine Dockingstation angedockt ist, hilft die API-Funktion GetCurrentHWProfile. Den Schalter [Abdocken] findet man links neben [Abmelden] und [Ausschalten]. Wird er angeklickt, kann man das Notebook gefahrlos abdocken und weiterarbeiten. Damit dies ordnungsgemäß funktioniert, braucht man einen ACPI-fähigen Rechner.
Siehe dazu auch:
In der Registry:
"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles"
In der MSDN:
* zur Funktion GetCurrentHwProfile: http://msdn2.microsoft.com/en-us/library/ms724311.aspx
* zur Struktur HW_PROFILE_INFO: http://msdn2.microsoft.com/en-us/library/ms724479.aspx
Schwierigkeitsgrad |
Verwendete API-Aufrufe: GetCurrentHwProfileA (GetCurrentHwProfile), GetCurrentHwProfileW (GetCurrentHwProfile) |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ------------- Anfang Projektdatei Projekt1.vbp ------------- ' --------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Textfeld "Text1" Option Explicit ' #Const DefUnicode = 1 'siehe Projekteigenschaften -> Erstellen Private Sub Form_Load() Dim m As String m = m & "Der Computer ist " & IIf(IsComputerDocked, vbNullString, "nicht ") & "angedockt." MsgBox m Dim hwpi As New HardwareProfileInfo Text1.Text = hwpi.ToString End Sub Private Function IsComputerDocked() As Boolean Dim hwpi As THWProfileInfo Dim s As String Dim rv As Long rv = GetCurrentHwProfile(hwpi) MsgBox CStr(rv) With hwpi MsgBox CStr(.dwDockInfo) #If DefUnicode Then s = .szHwProfileGuid #Else s = StrConv(.szHwProfileGuid, vbUnicode) #End If MsgBox s #If DefUnicode Then s = .szHwProfileName #Else s = StrConv(.szHwProfileName, vbUnicode) #End If MsgBox s If .dwDockInfo And DOCKINFO_UNDOCKED Then IsComputerDocked = False Else If .dwDockInfo And DOCKINFO_DOCKED Then IsComputerDocked = True Else ' End If End If End With End Function ' ---------- Ende Formular "Form1" alias Form1.frm ---------- ' --- Anfang Klasse "HardwareProfileInfo" alias HardwareProfileInfo.cls --- Option Explicit ' #Const DefUnicode = 1 'siehe Projekteigenschaften -> Erstellen Private mHWProfileInfo As THWProfileInfo Private mRetVal As Long Private mStrConv As VbStrConv Private Sub Class_Initialize() #If DefUnicode Then mStrConv = 0 #Else mStrConv = vbUnicode #End If mRetVal = GetCurrentHwProfile(mHWProfileInfo) End Sub Public Property Get IsDocked() As Boolean IsDocked = Not ((mHWProfileInfo.dwDockInfo And DOCKINFO_UNDOCKED) = DOCKINFO_UNDOCKED) End Property Public Property Get HWProfileGUID() As String HWProfileGUID = ByteArrToString(mHWProfileInfo.szHwProfileGuid) End Property Public Property Get HWProfileName() As String HWProfileName = ByteArrToString(mHWProfileInfo.szHwProfileName) End Property Private Function ByteArrToString(aStrVal() As Byte) As String Dim npos As Long ByteArrToString = StrConv(aStrVal, mStrConv) npos = InStr(1, ByteArrToString, vbNullChar) npos = IIf(npos > 1, npos - 1, Len(ByteArrToString)) ByteArrToString = Left$(ByteArrToString, npos) End Function Public Function ToString() As String Dim s As String s = s & "Der Computer ist " & IIf(IsDocked, vbNullString, "nicht ") & "angedockt." & vbCrLf s = s & "HWProfileGUID: " & HWProfileGUID & vbCrLf s = s & "HWProfileName: " & HWProfileName & vbCrLf ToString = s End Function ' --- Ende Klasse "HardwareProfileInfo" alias HardwareProfileInfo.cls --- ' ------- Anfang Modul "ModSystem" alias ModSystem.bas ------- Option Explicit ' #Const DefUnicode = 1 'siehe Projekteigenschaften -> Erstellen ' Der Computer ist Abgedockt ' Dieses Flag ist immer für Desktop-PC's gesetzt, da diese nicht angedockt ' werden können. Public Const DOCKINFO_UNDOCKED As Long = (&H1) ' Der Computer ist Angedockt Public Const DOCKINFO_DOCKED As Long = (&H2) ' If this flag is set, GetCurrentHwProfile retrieved the current docking state ' from information provided by the user in the Hardware Profiles page of the ' System control panel application. ' If there is no such value or the value is set to 0, this flag is set Public Const DOCKINFO_USER_SUPPLIED As Long = (&H4) ' The computer is docked, according to information provided by the user. Public Const DOCKINFO_USER_DOCKED As Long = (DOCKINFO_USER_SUPPLIED Or DOCKINFO_DOCKED) ' The computer is undocked, according to information provided by the user. Public Const DOCKINFO_USER_UNDOCKED As Long = (DOCKINFO_USER_SUPPLIED Or DOCKINFO_UNDOCKED) #If DefUnicode Then Const HW_PROFILE_GUIDLEN As Long = 78 Const MAX_PROFILE_LEN As Long = 160 #Else Const HW_PROFILE_GUIDLEN As Long = 39 ' = 38Chars + 1NullChar Const MAX_PROFILE_LEN As Long = 80 #End If Type THWProfileInfo dwDockInfo As Long szHwProfileGuid(1 To HW_PROFILE_GUIDLEN) As Byte szHwProfileName(1 To MAX_PROFILE_LEN) As Byte End Type #If DefUnicode Then Declare Function GetCurrentHwProfile Lib "advapi32.dll" _ Alias "GetCurrentHwProfileW" ( _ ByRef lpHwProfileInfo As THWProfileInfo) As Long #Else Declare Function GetCurrentHwProfile Lib "advapi32.dll" _ Alias "GetCurrentHwProfileA" ( _ ByRef lpHwProfileInfo As THWProfileInfo) As Long #End If ' -------- Ende Modul "ModSystem" alias ModSystem.bas -------- ' -------------- Ende Projektdatei Projekt1.vbp --------------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.