Saltar al contenido

¿Cómo usar la API de Win32 con Python?

Si te encuentras con algo que te causa duda puedes dejarlo en la sección de comentarios y trataremos de ayudarte rápidamente.

Solución:

PyWin32 es el camino a seguir, pero ¿cómo usarlo? Un enfoque es comenzar con un problema concreto que tenga e intentar resolverlo. PyWin32 proporciona enlaces para las funciones de la API Win32 para las cuales hay muchas, y realmente debe elegir un objetivo específico primero.

En mi instalación de Python 2.5 (ActiveState en Windows), el paquete win32 tiene una carpeta Demos repleta de código de muestra de varias partes de la biblioteca.

Por ejemplo, aquí está 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('xxxxxxxxxxxxxxxxn'*32768)
f.close()
## add a couple of extra data streams
f=open(fsrc+':stream_y','w')
f.write('yyyyyyyyyyyyyyyyn'*32768)
f.close()
f=open(fsrc+':stream_z','w')
f.write('zzzzzzzzzzzzzzzzn'*32768)
f.close()

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

Muestra cómo usar la función CopyFileEx con algunas otras (como GetTempPath y GetTempFileName). A partir de este ejemplo, puede obtener una “sensación general” de cómo trabajar con esta biblioteca.

PyWin32, como lo menciona @chaos, es probablemente la opción más popular; la alternativa es ctypes, que forma parte de la biblioteca estándar de Python. Por ejemplo, print ctypes.windll.kernel32.GetModuleHandleA(None) mostrará el identificador de módulo del módulo actual (EXE o DLL). Un ejemplo más extenso del uso de ctypes para llegar a las API de win32 está aquí.

Las funciones importantes que puede usar en Win32 Python son los cuadros de mensaje, este es un ejemplo clásico de Aceptar o Cancelar.

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



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

La colección:

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)

valoraciones y reseñas

Puedes confirmar nuestra función fijando un comentario o valorándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *