embedded VB

Ausschalten des Pocket-PCs
Batteriestatus bestimmen
Seriennummer des Gerätes auslesen
Speicherfunktionen

embedded VB – Ausschalten des Pocket-PCs

Der folgende Code schaltet den PocketPC ab. (Tastensimulation des Ausschalters)

Public Declare Sub keybd_event Lib „coredll.dll“ (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public const VK_OFF=&HDF

Sub PowerOff()
keybd_event VK_OFF, 0, 0, 0
keybd_event VK_OFF, 0, 2, 0
End Sub


embedded VB – Batteriestatus bestimmen

Über die in der Pocket-API vorhandene Funktion GetSystemPowerStstusEx
kann man den Batterie-Staus des PocketPC abfragen.

Declare Function GetSystemPowerStatusEx Lib „coredll.dll“ (ByVal pstatus As String, update As Boolean) As Boolean

Public Function getBattStatus()

battStatus = Space(50)
battFlag = GetSystemPowerStatusEx(battStatus, True)
If battFlag = True Then
getBattStatus = AscB(MidB (battStatus, 3, 1))
else
getBattStstus=-1
End If
End Function

Da EmbeddedVB keine UDT unterstützt wird ein String als Pointer verwendet, um das Ergebniss der
Funktion zu speichern. Der zweite Parameter ist das Update-Flag. Hat es den Wert FALSE so gibt die
Funktion den letzten Wert zurück, der dem System bekannt ist, dieser kann einige Sekunden alt
sein, ist der Parameter TRUE, so wird versucht, den aktuellen Stand zu ermitteln.

Die Rückgabe-Daten der Funktion sehen wie folgt aus:

1 BYTE
ACLineStatus;
Spannungsstatus, zeigt an,
ob Gerät per Netzteil oder Batterie betrieben wird.

0 Offline
(Batteriebetrieb)
1 Online
255 unbekannt
1 BYTE
BatteryFlag;
Batterie-Ladestatus

1 hoch
2 niedrig
4 kritisch
8 im Ladezustand
128 keine
System-Batterie
255 unbekannt
1 BYTE
BatteryLifePercent
aktueller Füllgrad des
Akku’s in Prozent, Wert zwischen 1 und 100 zeigt die Prozentzahl, der Wert
255 zeigt den Status „unbekannt“ an.
1 BYTE
Reserved
reserviert, immer
0.
4 BYTE
BatteryLifeTime
zeigt die verbleibende
Akku-Entladezykluszeit in Sekunden an, der Wert &HFFFFFFFF zeigt den
Status „unbekannt“ an.
4 BYTE
BatteryFullLifeTime
zeigt die gesamte
Akku-Entladezykluszeit in Sekunden an, der Wert &HFFFFFFFF zeigt den
Ststus „unbekannt“ an.
1 BYTE
Reserved
reserviert, immer
0.
1 BYTE
BackupBatteryFlag
Batterie-Status der
Sicherungsbatterie, Flaginhalte siehe BatteryFlag
1 BYTE
BackupBatteryLifePercent
aktueller
Verbrauchszustand der Sicherungsbatterie in Prozent, Wert zwischen 1 und
100 zeigt die Prozentzahl, der Wert 255 zeigt den Status „unbekannt“
an.
1 BYTE
Reserved
reserviert, immer
0.
4 BYTE
BackupBatteryLifeTime
zeigt die verbleibende
Sicherungsbatterie-Entladezykluszeit in Sekunden an, der Wert
&HFFFFFFFF zeigt den Status „unbekannt“ an.
4 BYTE
BackupBatteryFullLifeTime
zeigt die gesamte
Sicherungsbatterie-Entladezykluszeit in Sekunden an, der Wert
&HFFFFFFFF zeigt den Status „unbekannt“ an.

embedded VB – Seriennummer des Gerätes auslesen

Der dargestellte Beispielcode führt aus dem \windows-Verzeichnis CreateAssetFile.exe aus. Diese erzeugt im selben Verzeichnis eine Datei namens „cpqAssetData.dat“. In dieser Datei findet sich ab dem 976. Byte die Seriennummer des Gerätes.

Public Const GENERIC_READ = &H80000000
Public Const FILE_SHARE_READ = &H1
Public Const OPEN_ALWAYS = 4
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Declare Function CreateProcess Lib „coredll.dll“ Alias „CreateProcessW“
(ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles
As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory
As Long, ByVal lpStartupInfo As Long, ByVal lpProcessInformation As Long) As Long
Public Declare Function CreateFile Lib „Coredll“ Alias „CreateFileW“
(ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long,
lpSecurityAttributes As String, ByVal dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function ReadFile Lib „Coredll“
(ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToRead
As Long, ByVal lpNumberOfBytesRead As String, ByVal lpOverlapped As Long) As Long
Public Declare Function CloseHandle Lib „Coredll“ (ByVal hObject As Long) As Long

Private Sub Command1_Click()
Dim strAssetData As String
Dim lngBytesRead As Long
Dim hFile As Long
strAssetData = Space(976 + 64)
CreateProcess „\windows\CreateAssetFile.exe“, „“, 0, 0, 0, 0, 0, 0, 0, 0
hFile = CreateFile(„\Windows\cpqAssetData.dat“, GENERIC_READ, FILE_SHARE_READ,      „“,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
ReadFile hFile, strAssetData, 64 + 976, lngBytesRead, 0
CloseHandle hFile
MsgBox Mid(strAssetData, 489, 64)
End Sub


embedded VB – Speicherfunktionen

  1. Belegten Speicher ermitteln (GlobalMemoryStatus)

    Public Declare Sub GlobalMemoryStatus Lib „Coredll“ (ByVal lpBuffer As String)
    Public Function GetFreeMemory() as long
    Dim memStr As String

    memStr = Space(32)
    GlobalMemoryStatus memStr
    GetFreeMemory = AscB(MidB(f1, 5, 4))
    End Function

  2. Freien Speicher ermitteln (GetDiskFreeSpaceEx)

    Declare Function GetDiskFreeSpaceExW Lib „coredll.dll“ (ByVal lpDirectoryName As String, ByRef lpFreeBytesAvailableToCaller As Long, ByRef lpTotalNumberOfBytes As Long, ByRef lpTotalNumberOfFreeBytes As Long) As Boolean

    Public Function GetFreeObjMem as long
    Dim f1 As Long
    Dim f2 As Long
    Dim f3 As Long
    GetDiskFreeSpaceExW „“, f1, f2, f3
    GetFreeObjMem=f1
    End Function