Entwickler-Ecke

Windows API - createfile


Snoop007 - Fr 15.11.02 15:38
Titel: createfile
hi,
ich möchte das handle auf die batterie haben.
ich muss dazu das handle mit createfile erhalten
was gebe ich als filename ein ?
wenn ich eine pipe erstellen möchte gebe ich \\.\pipe an
kann mir einer helfen ?


Delete - Fr 15.11.02 16:02

Ich weiß nicht, was du vor hast aber kuck mal hier: MSDN Suchergebnis [http://search.microsoft.com/default.asp?qu=battery%5Finformation&boolean=PHRASE&nq=NEW&so=RECCNT&p=1&ig=02&i=42&i=43&i=44&i=45&i=46&i=47&i=48&i=49&i=50&i=51&i=52&i=53&i=54&i=55&i=56&i=57&i=58&i=59&i=60&i=61&i=62&i=63&siteid=us/dev].


Snoop007 - Fr 15.11.02 17:55

ich will die funktion

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
DeviceIoControl(
  (HANDLE) hDevice,                // handle to battery
  IOCTL_BATTERY_QUERY_INFORMATION, // dwIoControlCode
  (LPVOID) lpInBuffer,             // input buffer
  (DWORD) nInBufferSize,           // size of input buffer
  (LPVOID) lpOutBuffer,            // output buffer
  (DWORD) nOutBufferSize,          // size of output buffer
  (LPDWORD) lpBytesReturned,       // number of bytes returned
  (LPOVERLAPPED) lpOverlapped      // OVERLAPPED structure
);

verwenden.
Damit ich das handle auf die batterie bekomme, muss ich mit createfile arbeiten

was muss ich nun in createfile als filename angeben ?

müsste ich eine pipe schreiben, wüsste ich es ( wie oben erwäht )


Delete - Fr 15.11.02 18:04

Kuck mal, ob du hier weiter kommst: IOCTL_BATTERY_QUERY_INFORMATION [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/power/base/ioctl_battery_query_information.asp]. Ich habe da schon etwas rumgekramt, aber leider nichts gefunden, wie du an das hande kommst. Eventuell erwischt du ja den richtigen Link.


Snoop007 - Fr 15.11.02 18:09

ich habe bei msdn auch schon gesucht, leider habe ich auch nichts gefunden, deswegen frage ich ja hier an :D

ich habe auch erst die funktion bei msdn gefunden, meine delphi version hat die gar nicht auf lager :(


Delete - Fr 15.11.02 18:19

Hol dir mal von den Jedis die WinAPi-Übersetzungen, die sind recht vollständig. Da müßten die drin sein, dann mußt du sie nicht selber übersetzen. Bei so etwas exotischen API's ist Borland immer recht faul mit Übersetzungen.


Delete - Fr 15.11.02 18:52

Luckie hat folgendes geschrieben:
Bei so etwas exotischen API's ist Borland immer recht faul mit Übersetzungen.

Manche Sachen würde ich nicht als exotisch bezeichnen. Borland ist schlichtweg großartig im Herausbringen der jährlich neuen Delphi-Version. Aber dann gibt´s meist ein Service-Pack, ein paar Fixes (die man u.U. noch selbst vornehmen muss), und das war´s dann.

Es kann doch nicht sein, dass Besitzer älterer Versionen z.B. die LUNA-Probleme mit WinXP u.ä. selbst fixen müssen (Listview). Und selbst das geht nur, wenn man keine Standard- oder Personal-Edition hat, bei der die Sourcecodes ja nicht dabei sind.


Snoop007 - Fr 15.11.02 19:51

@lucki kanst du mir einen link zu den jedis geben, ich weiss gar nicht was das ist ? :shock: :oops: danke :)


Delete - Fr 15.11.02 20:01

Project Jedi [http://www.delphi-jedi.org/]


DaFox - Sa 16.11.02 02:19

Hi.

Du hast nicht geschrieben was Du mit dem Handle anfangen willst, deshalb frage ich mal ganz doof:
Führt die Funktion GetSystemPowerStatus nicht zum Ziel?

Gruß,
Markus


Snoop007 - Sa 16.11.02 16:33

ich will die mAh der Batterie haben deswegen muss ich erst das handle haben und dann die oben beschriebene funktion ausführen ...

falls ich mich irren sollte, verbesser mich bitte ! :)


DaFox - Sa 16.11.02 19:19

Hi!

Okay, dann geht das natürlich nicht.
Du musst wohl die vorhandenen Batterien enumerieren um das Handle dann an CreateFile() übergeben zu können.

Zitat:

Enumerating Battery Devices

To enumerate the battery devices currently on the computer, use the SetupDiGetClassDevs function. The ClassGuid parameter is a pointer to GUID_DEVICE_BATTERY (defined in batclass.h). To enumerate all of the batteries, set the Enumerator parameter to NULL and set the Flags parameter to DIGCF_PRESENT | DIGCF_INTERFACEDEVICE. To obtain the names of the battery devices, use the SetupDiEnumInterfaceDevice and SetupDiGetInterfaceDeviceDetail functions on the data returned. To open a file handle for each of the battery devices, call the CreateFile function with these names.

(http://msdn.microsoft.com/library/en-us/power/base/battery_information.asp?frame=true)


Gruß,
Markus


Snoop007 - Sa 16.11.02 19:29

oh wei :shock: :shock: :shock:
danke :) muss ich wohl überleden haben

das wird ja was werden ! :shock: :shock: :shock: :shock:


DaFox - Sa 16.11.02 20:39

Noch ein kleines PS zum GUID_DEVICE_BATTERY: ['{72631E54-78A4-11D0-BCF7-00AA00b7B32A}']


Delete - So 17.11.02 01:33

Was hilft hier eien CLSID oder GUID aus der Registry? Die sieht bei jedem anderst aus und davon gibt es dutzende in der Registry. :roll:


DaFox - So 17.11.02 05:00

Hi.

Wir reden hier von einem ClassGUID zugehörig zu einem Device Driver. Dieser sollte bei einem Battery Driver immer {72631e54-78a4-11d0-bcf7-00aa00b7b32a} sein.
Suche battery.inf auf und Du wirst feststellen, dass auf diesem x-beliebigen System genau diese ClassGUID zu finden ist.

Siehe auch: Installing a Battery Driver [http://msdn.microsoft.com/library/en-us/battery/hh/battery/po-batt_6y5j.asp?frame=true]

Gruß,
Markus


Delete - So 17.11.02 10:46

OK überzeugt. :oops: