59 votes

Comment utiliser l'API Win32 avec Python ?

Comment puis-je utiliser l'API win32 en Python ? Quel est le meilleur moyen et le plus simple de le faire ?
Pouvez-vous fournir quelques exemples ?

7 votes

Oui, je l'ai fait avant de poser la question, et j'ai trouvé plusieurs résultats. mon but est de commencer à apprendre la solution la plus recommandée pour mon problème. d'ailleurs, une telle question n'a pas été posée dans stack overflow avant, donc j'ai pensé que de bonnes réponses de programmeurs plus expérimentés peuvent montrer le bon chemin à prendre pour les débutants comme moi =)

13 votes

J'ai fait des recherches sur Internet et suivi les liens, mais je ne sais toujours pas comment faire.

0 votes

Y a-t-il un cas d'utilisation spécifique ? Qu'essayez-vous de faire qui ne fait pas partie de la bibliothèque standard de Python ?

41voto

Eli Bendersky Points 82298

PyWin32 est la voie à suivre - mais comment l'utiliser ? Une approche consiste à commencer par un problème concret que vous rencontrez et à tenter de le résoudre. PyWin32 fournit des liens pour les fonctions de l'API Win32, qui sont nombreuses, et vous devez vraiment commencer par choisir un objectif spécifique.

Dans mon installation de Python 2.5 (ActiveState sous Windows), le paquet win32 contient un dossier Demos contenant des exemples de code de diverses parties de la bibliothèque.

Par exemple, voici CopyFileEx.py :

import win32file, win32api
import os

def ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred,
    StreamNumber, CallbackReason, SourceFile, DestinationFile, Data):
    print Data
    print TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile
    ##if TotalBytesTransferred > 100000:
    ##    return win32file.PROGRESS_STOP
    return win32file.PROGRESS_CONTINUE

temp_dir=win32api.GetTempPath()
fsrc=win32api.GetTempFileName(temp_dir,'cfe')[0]
fdst=win32api.GetTempFileName(temp_dir,'cfe')[0]
print fsrc, fdst

f=open(fsrc,'w')
f.write('xxxxxxxxxxxxxxxx\n'*32768)
f.close()
## add a couple of extra data streams
f=open(fsrc+':stream_y','w')
f.write('yyyyyyyyyyyyyyyy\n'*32768)
f.close()
f=open(fsrc+':stream_z','w')
f.write('zzzzzzzzzzzzzzzz\n'*32768)
f.close()

operation_desc='Copying '+fsrc+' to '+fdst
win32file.CopyFileEx(fsrc, fdst, ProgressRoutine, operation_desc, False,   win32file.COPY_FILE_RESTARTABLE)

Il montre comment utiliser la fonction CopyFileEx avec quelques autres (comme GetTempPath et GetTempFileName). Cet exemple vous donne une idée générale de la façon de travailler avec cette bibliothèque.

3 votes

Remarques sur le style : 3 open(fn, 'w').write('data') en CPython communiquent le même message que 9 lignes 'open,write,close'.

25voto

Alex Martelli Points 330805

PyWin32, comme mentionné par @chaos, est probablement le choix le plus populaire ; l'alternative est ctypes qui fait partie de la bibliothèque standard de Python. Par exemple, print ctypes.windll.kernel32.GetModuleHandleA(None) affichera le module-handle du module actuel (EXE ou DLL). Un exemple plus complet de l'utilisation de ctypes pour accéder aux API win32 est le suivant ici .

0 votes

@RadimCernej : Essayez une recherche google pour import ctypes github . Vous obtiendrez de nombreux résultats. Ou essayez cet exemple sur GitHub qui utilise from ctypes import * : github.com/erochest/snippets/blob/master/win32named.py

0 votes

Ils n'ont pas réussi à faire fonctionner pyWin32 avec la version MSYS2 de Python. CTypes le fait.

8voto

Tabares Points 565

Les fonctions importantes que vous pouvez utiliser dans Win32 Python sont les boîtes de message, comme par exemple OK ou Cancel.

result = win32api.MessageBox(None,"Do you want to open a file?", "title",1)

  if result == 1:
     print 'Ok'
  elif result == 2:
     print 'cancel'

La collection :

win32api.MessageBox(0,"msgbox", "title")
win32api.MessageBox(0,"ok cancel?", "title",1)
win32api.MessageBox(0,"abort retry ignore?", "title",2)
win32api.MessageBox(0,"yes no cancel?", "title",3)

0 votes

Existe-t-il une option pour afficher un lien hypertexte dans une telle MessageBox (ou similaire) avec win32api ?

5voto

chaos Points 69029

J'imagine que vous voudrez utiliser PyWin32 .

3voto

Onorio Catenacci Points 6130

Vous pouvez également vérifier Extension Python pour Windows à SourceForge .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X