Bonjour,
J'essaie d'intégrer l'API NativeWifi (http://msdn.microsoft.com/en-us/library/windows/desktop/ms706873%28v=VS.85%29.aspx) dans un projet Python. J'essaie d'obtenir la liste et le nombre d'interface WiFi sur ma machine (1 seule) un peu comme dans l'exemple sur la page de MSDN. J'ai écris ça :
from ctypes import wintypes
import ctypes
ole32 = ctypes.oledll.ole32
WlanApi = ctypes.windll.wlanapi
hClientHandle = wintypes.HANDLE()
phClientHandle = ctypes.pointer(hClientHandle)
dwNegotiatedVersion = wintypes.DWORD()
pdwNegotiatedVersion = ctypes.pointer(dwNegotiatedVersion)
dwClientVersion = wintypes.DWORD()
dwClientVersion.value = 2L
rc = WlanApi.WlanOpenHandle(dwClientVersion, None, pdwNegotiatedVersion, phClientHandle)
class GUID(ctypes.Structure):
_fields_ =[("Data1", wintypes.DWORD),
("Data2", wintypes.USHORT),
("Data3", wintypes.USHORT),
("Data4", wintypes.BYTE * 8)]
_as_parameter_ = property(ctypes.byref)
def __init__(self, name=None):
if name is not None:
ole32.CLSIDFromString(unicode(name), ctypes.byref(self))
def __str__(self):
s = ctypes.create_string_buffer(39)
ole32.StringFromGUID2(ctypes.byref(self), s, 39)
return "<guid:%s>" % s.value
def __cmp__(self, other):
if isinstance(other, GUID):
result = ole32.IsEqualGUID(ctypes.byref(self), ctypes.byref(other))
return not result
return -1
class WLAN_INTERFACE_INFO (ctypes.Structure):
_fields_ =[('InterfaceGuid', GUID),
('strInterfaceDescription', wintypes.WCHAR * 256),
('isState', wintypes.USHORT)]
class WLAN_INTERFACE_INFO_LIST(ctypes.Structure):
_fields_ =[('dwNumberOfItems', wintypes.DWORD),
('dwIndex', wintypes.DWORD),
('InterfaceInfo', wintypes.POINTER(WLAN_INTERFACE_INFO) * 10)]
InterfaceList = WLAN_INTERFACE_INFO_LIST()
ppInterfaceList = ctypes.pointer(InterfaceList)
rc = WlanApi.WlanEnumInterfaces(hClientHandle, None, ppInterfaceList)
print rc
print "Number of Interfaces: %s" % InterfaceList.dwNumberOfItems
Je n'arrive pas à obtenir un nombre cohérent d'interfaces (je n'ai jamais le même).
Toutefois, en remplaçant le wintypes.DWORD du dwNumberOfItems par un Array de Byte, j'obtiens ça :
Num Entries: -32 76 80 00 00 00 00 00
Num Entries: -32 76 60 00 00 00 00 00
Le troisième élément change à chaque nouvelle exécution... Est-ce que quelqu'un arrive à situer le problème ?
Merci d'avance