Code: Alles auswählen
;© 2005 by hardfalcon, many thx to dige and Laurin!
SPS.SYSTEM_POWER_STATUS
GetSystemPowerStatus_(SPS.SYSTEM_POWER_STATUS)
Debug SPS.SYSTEM_POWER_STATUS\ACLineStatus & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\BatteryFlag & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\BatteryLifePercent & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\Reserved1 & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\BatteryLifeTime
Debug SPS.SYSTEM_POWER_STATUS\BatteryFullLifeTime
Also ich weiß, das die ersten vier Elemente Bytes sind (vermutlich unsigned) und das &255 dies halt umwandelt. Aber "&" ist doch ein bitweises AND und bei 255 sind doch ALLE Bits gesetzt, dann würde doch IMMER 255 rauskommen, also wie soll das funktionene.
Das Element "BatteryLifeTime" ist ein DWORD, weshalb muß man hier nichts umwandeln?
Bei API-Funktionen werden entweder Variablen(werte) übergeben variable.l oder manchmal deren Adresse/Pointer übergeben (zum hineinschreiben). Sehe ich es richtig, das man nichts machen (Umwandeln) muß, wenn man die Variable, also den Wert übergibt, sondern immer dann wenn man die Adresse übergibt (entweder wenn daraus ein wert ausgelesen wird oder wenn durch diese Adresse ein Wert an die Variable übergeben wird). Aber wie sieht das aus, wenn ich die Adresse einer Struktur übergeben, muß in den Werten die da drinn stehen, dann nicht auch alles geändert werden?
Das ist ja recht kompliziert und nervig, kein wunder das ich beim einarbeiten in die Powerfunktionen nichts hinbekomme.
ich bin momentan mal wieder recht verwirrt.
Als Problembeispiel nehme ich mal die API-Funktion
SetupDiGetDeviceInterfaceDetail()
Diese muß man nacheinander zwei Mal aufrufen, beim ersten mal erhält man die benötige Größe für den Buffer, diese wird in eine Variable geschrieben (über die Adresse),BOOL SetupDiGetDeviceInterfaceDetail(
HDEVINFO DeviceInfoSet,
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData,
DWORD DeviceInterfaceDetailDataSize,
PDWORD RequiredSize,
PSP_DEVINFO_DATA DeviceInfoData
);
Code: Alles auswählen
SetupDiGetDeviceInterfaceDetail(hdev,@ll_did(),0,0,@cbRequired,0)
Code: Alles auswählen
SetupDiGetDeviceInterfaceDetail(hdev,@ll_did(),*pdidd,cbRequired,@cbRequired,0)
Ein weiteres Beispiel
Code: Alles auswählen
bi.BATTERY_INFORMATION ; BATTERY_INFORMATION bi = {0};
bqi\InformationLevel = #BatteryInformation;
ReturnDeviceIoControl2 = DeviceIoControl_(hBattery, #IOCTL_BATTERY_QUERY_INFORMATION, @bqi, SizeOf(bqi), @bi, SizeOf(bi), @dwOut, #Null)
Gruß
Toshy