Übersicht win32 Module und Funktionen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Mittwoch 13. Februar 2008, 15:53

Ich arbeite mich derzeit durch die win32 Module von Mark Hammond durch. Dummerweise stehen die interessanten Module nur als .pyd Dateien zur Verfügung. D.h. ich kann nicht einfach reinschauen, alle Funktionen und deren Argumente ansehen. Die Funktionen und Mdoul-Variablen kriege ich ja noch so hier raus:

Code: Alles auswählen

import win32process
help(win32process)
# oder
dir(win32process)
Aber wenn's an die Argumente der Funktionen geht weiß ich nicht weiter. Gibt's darüber eine Dokumentation?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 13. Februar 2008, 16:02

Hallo droptix!

Die mitgelieferte HTML-Help Datei und in weiterer Folge die "Windows Platform SDK" http://en.wikipedia.org/wiki/Microsoft_Windows_SDK um Informationen über die Windows-API heraus zu bekommen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Mittwoch 13. Februar 2008, 22:55

Hab mir die Infos mal reingezogen und bin nicht wirklich schlauer :? Als typischer Python-Nutzer interessiert mich weniger was im Hintergrund abläuft, sondern was ich alles damit machen kann. Ist nicht abwertend gemeint, aber einiges ist mir einfach zu komplex und daher auch zu hoch.

Ich bin ja erstmal recht bescheiden und suche nur Infos zu den Funktionen, die mir die win32-Module bereit stellen. Wieso fehlen z.B. über help(win32process) die Argumente der aufgelisteten Funktionen? Wurde das etwa schlecht dokumentiert?

Ich denke mal du hast mit HTML-Help-Datei die hier gemeint: [url=file:///C:/Programme/Python24/Lib/site-packages/win32com/html/docindex.html]Lib/site-packages/win32com/html/index.html[/url]. Für mich konnte ich nicht wirklich viel entdecken. Aber es ist gut zu wissen, dass ich dort was finde, falls ich mal makepy.py brauche (was ich bis heute nicht richtig verstanden habe).

Auf der Wikipedia-Site komme ich auch nicht wirklich weiter.
http://en.wikipedia.org/wiki/Microsoft_Windows_SDK hat geschrieben:All SDK documentation is part of the online and disc-based MSDN Library
Also hab ich in der MSDN Library nachgeschaut. Unter References stehen diverse URLs. Schließlich hab ich über die Microsoft-Website einen Link gefunden. Dort steht links Win32 und COM-Entwicklung. Wenn man immer schön die "+"-Symbole im Baum aufklappt und sich durch die Unterpunkte hangelt, kommt man durchaus zu sinnvollen Ergebnissen. Hier z.B. Infos über das Auslesen der Größe und des Speicherplatz eines Laufwerks:

Code: Alles auswählen

[DllImport ("Kernel32", SetLastError=true)] 
public static extern bool GetDiskFreeSpaceEx( 
  [MarshalAs(UnmanagedType.LPStr)] string lpDirectoryName, 
  ref ulong lpFreeBytesAvailable, 
  ref ulong lpTotalNumberOfBytes, 
  ref ulong lpTotalNumberOfFreeBytes 
);
Nun bleibt die Frage, wie ich das in Python verwenden kann. Irgendwelche Ideen?

P.S. Stelle ich mich eigentlich so dumm an oder findet ihr die Arbeitsweise mit win32 & Co. selbsterklärend?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 13. Februar 2008, 23:30

droptix hat geschrieben:Ich denke mal du hast mit HTML-Help-Datei die hier gemeint: [url=file:///C:/Programme/Python24/Lib/site-packages/win32com/html/docindex.html]Lib/site-packages/win32com/html/index.html[/url]. Für mich konnte ich nicht wirklich viel entdecken. Aber es ist gut zu wissen, dass ich dort was finde, falls ich mal makepy.py brauche (was ich bis heute nicht richtig verstanden habe).
Ich klicke den Link, aber nichts passiert ;)
droptix hat geschrieben:Auf der Wikipedia-Site komme ich auch nicht wirklich weiter.
http://en.wikipedia.org/wiki/Microsoft_Windows_SDK hat geschrieben:All SDK documentation is part of the online and disc-based MSDN Library
Auf der Visual Studio Express-Seite kannst du dir auch die MSDN Library runterladen. Die deutsche Version ist 2.2 GB groß (und natürlich nicht komplett übersetzt).
droptix hat geschrieben:Nun bleibt die Frage, wie ich das in Python verwenden kann. Irgendwelche Ideen?
Du hast da Managed C++-Code rausgegraben. Der hat noch mehr "Noise" als der normale C++-Code. Aber die dort beschriebene Funktion kannst du mit ctypes anzusprechen versuchen.
droptix hat geschrieben:P.S. Stelle ich mich eigentlich so dumm an oder findet ihr die Arbeitsweise mit win32 & Co. selbsterklärend?
Ich würde eher sagen, das die Win32 API ausreichend ätzend ist, dass niemand die mehr benutzt als nötig.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 13. Februar 2008, 23:33

Hallo droptix!
droptix hat geschrieben:Ich denke mal du hast mit HTML-Help-Datei die hier gemeint: [url=file:///C:/Programme/Python24/Lib/site-packages/win32com/html/docindex.html]Lib/site-packages/win32com/html/index.html[/url].
Nein, ich meinte die Hilfe-Datei, die nach dem Installieren von pywin32 über das Startmenü aufgerufen werden kann. Bei mir liegt die unter *J:\Python24\Lib\site-packages\PyWin32.chm*

Die Plattform SDK für Windows XP und Server 2003 kannst du dir hier herunterladen und installieren:
http://www.microsoft.com/msdownload/pla ... k-full.htm

Und die "Windows SDK for Windows Server 2008 and .NET Framework 3.5" bekommst du hier:
http://www.microsoft.com/downloads/deta ... layLang=en
Allerdings habe ich mit dieser PSDK noch keine Erfahrung. Für mich reicht immer noch die ältere PSDK für XP.
droptix hat geschrieben:z.B. Infos über das Auslesen der Größe und des Speicherplatz eines Laufwerks:

Code: Alles auswählen

[DllImport ("Kernel32", SetLastError=true)] 
public static extern bool GetDiskFreeSpaceEx( 
  [MarshalAs(UnmanagedType.LPStr)] string lpDirectoryName, 
  ref ulong lpFreeBytesAvailable, 
  ref ulong lpTotalNumberOfBytes, 
  ref ulong lpTotalNumberOfFreeBytes 
);
Nun bleibt die Frage, wie ich das in Python verwenden kann.
Nachdem du über das MSDN oder die Plattform SDK den API-Aufruf und die Beschreibung dazu gefunden hast, suchst du nach dieser Funktion in der Pywin32-Hilfe. Z.B. nach "GetDiskFreeSpaceEx". Dort findest du z.B. die Hilfe zu *win32file.GetDiskFreeSpaceEx*.

Und als Ergebnis kommt so etwas raus:

Code: Alles auswählen

>>> import win32file
>>> win32file.GetDiskFreeSpaceEx("J:")
[322126974976L, 400077586432L, 322126974976L]
>>> 
Die pywin32-Hilfe erklärt, was du zurück bekommst.

Aber so schön läuft das leider nicht immer. :cry:

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Donnerstag 14. Februar 2008, 08:44

Leonidas hat geschrieben:Ich klicke den Link, aber nichts passiert ;)
Hab ihn nur "kopierfähig" gemacht (Rechtsklick -> Link-Adresse kopieren). Anklicken geht zwar nicht, aber in die Browser-Adresszeile einfügen und <Enter> geht (vorausgesetzt du hast Python 2.4 nach "C:\Programme" installiert).
gerold hat geschrieben:Nein, ich meinte die Hilfe-Datei, die nach dem Installieren von pywin32 über das Startmenü aufgerufen werden kann. Bei mir liegt die unter *J:\Python24\Lib\site-packages\PyWin32.chm*
Aaaaaaaah, die Erleuchtung! Das hatte ich völlig übersehen…
Leonidas hat geschrieben:Auf der Visual Studio Express-Seite kannst du dir auch die MSDN Library runterladen. Die deutsche Version ist 2.2 GB groß (und natürlich nicht komplett übersetzt).
gerold hat geschrieben:Die Plattform SDK für Windows XP und Server 2003 kannst du dir hier herunterladen und installieren:
http://www.microsoft.com/msdownload/pla ... k-full.htm

Und die "Windows SDK for Windows Server 2008 and .NET Framework 3.5" bekommst du hier:
http://www.microsoft.com/downloads/deta ... layLang=en
Allerdings habe ich mit dieser PSDK noch keine Erfahrung. Für mich reicht immer noch die ältere PSDK für XP.
Hum, welche brauch ich denn nun :P Anscheinend gibt es nicht nur eine Library, sondern für fast jedes Windows eine einzelne… ich hab kapiert, dass das alte "Platform SDK" Windows 2000, XP und 2003 unterstützt. Das neue "Windows SDK" unterstützt z.B. kein 2000 mehr, geht dann ab XP los, über 2003 bis Vista und 2008. Ich nehme an, dass die meisten Windows für viele Dinge auch eine gemeinsame API haben, oder? Wäre unschön, wenn ich innerhalb meines Programms zwischen XP und Vista unterscheiden müsste… ich ahne aber, dass ich das tun muss.
Leonidas hat geschrieben:
droptix hat geschrieben:Nun bleibt die Frage, wie ich das in Python verwenden kann. Irgendwelche Ideen?
Du hast da Managed C++-Code rausgegraben. Der hat noch mehr "Noise" als der normale C++-Code. Aber die dort beschriebene Funktion kannst du mit ctypes anzusprechen versuchen.
Mit ctypes bin ich übrigens gescheitert.
gerold hat geschrieben:
droptix hat geschrieben:Nun bleibt die Frage, wie ich das in Python verwenden kann.
Nachdem du über das MSDN oder die Plattform SDK den API-Aufruf und die Beschreibung dazu gefunden hast, suchst du nach dieser Funktion in der Pywin32-Hilfe. Z.B. nach "GetDiskFreeSpaceEx". Dort findest du z.B. die Hilfe zu *win32file.GetDiskFreeSpaceEx*.

Und als Ergebnis kommt so etwas raus:

Code: Alles auswählen

>>> import win32file
>>> win32file.GetDiskFreeSpaceEx("J:")
[322126974976L, 400077586432L, 322126974976L]
>>> 
Die pywin32-Hilfe erklärt, was du zurück bekommst.

Aber so schön läuft das leider nicht immer. :cry:
Das ist aber schon mal ein Riesen-Fortschritt! Vielen Dank!
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 14. Februar 2008, 12:49

droptix hat geschrieben:Hab ihn nur "kopierfähig" gemacht (Rechtsklick -> Link-Adresse kopieren). Anklicken geht zwar nicht, aber in die Browser-Adresszeile einfügen und <Enter> geht (vorausgesetzt du hast Python 2.4 nach "C:\Programme" installiert).
Nö, die Executable ist bei mir in /usr/bin/. Es ist auch etwas sinnlos Lokale-links online zu stellen, da es besonders im Fall Pythons eher unwahrscheinlich ist, dass andere es in den gleichen Pfad installieren, besonders unter Windows.
droptix hat geschrieben:
Leonidas hat geschrieben:Auf der Visual Studio Express-Seite kannst du dir auch die MSDN Library runterladen. Die deutsche Version ist 2.2 GB groß (und natürlich nicht komplett übersetzt).
gerold hat geschrieben:Die Plattform SDK für Windows XP und Server 2003 kannst du dir hier herunterladen und installieren:
http://www.microsoft.com/msdownload/pla ... k-full.htm

Und die "Windows SDK for Windows Server 2008 and .NET Framework 3.5" bekommst du hier:
http://www.microsoft.com/downloads/deta ... layLang=en
Allerdings habe ich mit dieser PSDK noch keine Erfahrung. Für mich reicht immer noch die ältere PSDK für XP.
Hum, welche brauch ich denn nun :P Anscheinend gibt es nicht nur eine Library, sondern für fast jedes Windows eine einzelne… ich hab kapiert, dass das alte "Platform SDK" Windows 2000, XP und 2003 unterstützt. Das neue "Windows SDK" unterstützt z.B. kein 2000 mehr, geht dann ab XP los, über 2003 bis Vista und 2008. Ich nehme an, dass die meisten Windows für viele Dinge auch eine gemeinsame API haben, oder? Wäre unschön, wenn ich innerhalb meines Programms zwischen XP und Vista unterscheiden müsste… ich ahne aber, dass ich das tun muss.
Naja, was ich dir gepostet habe ist die MSDN Library, die Dokumentation die für so ziemlich alle Windows-Versionen gilt. Das was Gerold gepostet hat ist das Windows SDK, mit dem man Windows-Programme schreiben kann. Keine Ahnung, wozu du das brauchen könntest.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Freitag 15. Februar 2008, 11:41

Leonidas hat geschrieben:Es ist auch etwas sinnlos Lokale-links online zu stellen, da es besonders im Fall Pythons eher unwahrscheinlich ist, dass andere es in den gleichen Pfad installieren, besonders unter Windows.
Da ich eine Windows-Anfrage hatte, dachte ich dass das in Ordnung geht. Die gesuchte Datei (die ich falsch verstanden hatte) ist ja auch eine .chm Datei, also nur für Windows gedacht.
Leonidas hat geschrieben:Naja, was ich dir gepostet habe ist die MSDN Library, die Dokumentation die für so ziemlich alle Windows-Versionen gilt. Das was Gerold gepostet hat ist das Windows SDK, mit dem man Windows-Programme schreiben kann. Keine Ahnung, wozu du das brauchen könntest.
Ich hab die Library inzwischen runter geladen und werde hoffentlich glücklich damit. Man braucht die win32 Extensions ja nur in Ausnahmefällen, aber manchmal geht's halt nicht pythonischer…
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 15. Februar 2008, 11:57

droptix hat geschrieben:
Leonidas hat geschrieben:Es ist auch etwas sinnlos Lokale-links online zu stellen, da es besonders im Fall Pythons eher unwahrscheinlich ist, dass andere es in den gleichen Pfad installieren, besonders unter Windows.
Da ich eine Windows-Anfrage hatte, dachte ich dass das in Ordnung geht. Die gesuchte Datei (die ich falsch verstanden hatte) ist ja auch eine .chm Datei, also nur für Windows gedacht.
Ich will nicht sagen, dass sowas nicht in Ordnung geht, das tut es ja, nur ist es sinnlos. Du hast einen Nicht-Standard-Installationspfad für Python 2.4 angegeben (Default wäre ``%DRIVELETTER%:/Python24``), wobei es inzwischen bei den meisten Windows-Python-Usern ``25`` lautet, da Python 2.5 schon Ewigkeiten da ist und nun schon bald sein zwites Maintenance Release hat. Ich habe oft Python in ``Programme\Python`` ohne die Versionsnummer installiert und selbst ``C:\PythonXY`` stimmt nicht immer, da einige Rechner ihr Windows woanders installiert haben, etwa ``D:``. Gerold nutzt ja ``J:``. Also ist der Pfad bei fast allen falsch, somit ist es sinnlos ihn anzugeben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 15. Februar 2008, 12:05

Leonidas hat geschrieben:Gerold nutzt ja ``J:``.
Hallo Leonidas!

Sehr gut aufgepasst. :D

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

Freitag 15. Februar 2008, 13:35

Leonidas hat geschrieben:
droptix hat geschrieben:Nun bleibt die Frage, wie ich das in Python verwenden kann. Irgendwelche Ideen?
Du hast da Managed C++-Code rausgegraben.
Die genau Bezeichnung für das gepostete "C++" lautet "C#" ;)
droptix hat geschrieben:P.S. Stelle ich mich eigentlich so dumm an oder findet ihr die Arbeitsweise mit win32 & Co. selbsterklärend?
Ich würde eher sagen, das die Win32 API ausreichend ätzend ist, dass niemand die mehr benutzt als nötig.
Genau. Windows-Programmierung geht mit anderen Bibliotheken weitaus besser!

@droptix
CHM Viewer gibt es auch für Linux ;)
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Freitag 15. Februar 2008, 13:39

Okay, das war ja auch nur symbolisch gemeint und hat offensichtlich dazu beigetragen, dass der Fehler erkannt wurde… sicherlich hätte der Pfad im Python-Installationsverzeichnis gereicht. Völlig Wurscht! :P

Bin jedenfalls noch auf eine gute Geschichte heute gestoßen, und zwar die ActivePython Dokumentation auf ASPN.

Was will man mehr? Dort finde ich alle Antworten!
lunar hat geschrieben:Windows-Programmierung geht mit anderen Bibliotheken weitaus besser!
Interessiert! Welche?
lunar hat geschrieben:CHM Viewer gibt es auch für Linux ;)
Ich weiß, daher sagte ich auch "nur für Windows gedacht" und nicht "nur für Windows gemacht", hehe :D
lunar

Freitag 15. Februar 2008, 21:05

droptix hat geschrieben:
lunar hat geschrieben:Windows-Programmierung geht mit anderen Bibliotheken weitaus besser!
Interessiert! Welche?
Weiß ich nicht ;) Wenn meine Programme unter Windows laufen, ist das ein unbeabsichtigter Seiteneffekt der Bibliothekswahl (z.B. Qt4 als Toolkit).

Aber ich weiß, wie die Windows API aussieht und vor allem, wie sie dokumentiert ist. Deswegen wage ich zu behaupten, dass alles besser ist als die WinAPI. Es wäre schon eine Kunst, eine noch schlechtere API zu entwerfen...
Antworten