Windows WlanApi и Python Ctypes

1

Я работаю над плейером портала в Windows. Я написал этот фрагмент кода (аналогично этому):

from ctypes import wintypes
import ctypes

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)
print rc

class GUID(ctypes.Structure):
    _fields_ = [("Data1", wintypes.DWORD),
                ("Data2", wintypes.WORD),
                ("Data3", wintypes.WORD),
                ("Data4", wintypes.BYTE * 8)]

class WLAN_INTERFACE_INFO (ctypes.Structure):
    _fields_ = [('InterfaceGuid', GUID),
                ('strInterfaceDescription', wintypes.WCHAR * 256),
                ('isState', wintypes.????)]

class WLAN_INTERFACE_INFO_LIST(ctypes.Structure):
    _fields_ = [('dwNumberOfItems', wintypes.DWORD),
                ('dwIndex', wintypes.DWORD),
                ('InterfaceInfo', WLAN_INTERFACE_INFO * 10)]

IfList = WLAN_INTERFACE_INFO_LIST()
pIfList = ctypes.pointer(IfList)
rc = WlanApi.WlanEnumInterfaces(hClientHandle, None, pIfList)

print rc
print "Num Entries: %s" % IfList.dwNumberOfItems

Я не могу найти, как структурировать " перечисление WLAN_INTERFACE_STATE ", и когда я пытаюсь использовать массив WCHAR или что-то еще, этот скрипт возвращает мои 6000000 беспроводных интерфейсов !!!

Может кто-нибудь мне помочь?

  • 0
    Если я заменю dwNumberOfItems байтовым массивом, мой сценарий вернет следующее: \ nNum Entries: -32 76 80 00 00 00 00 00 \ nПри втором запуске я получаю \ nNum Entries: -32 76 60 00 00 00 00 00 \ n \ Может, проблема в указателе HANDLE?
Теги:
ctypes
wifi

2 ответа

0

Хм это начинает иметь смысл, так как большинство этих структур имеют соответствующий указатель.

По словам мальчиков в PInvoke

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WLAN_INTERFACE_INFO
{
  /// GUID->_GUID
  public Guid InterfaceGuid;
  /// WCHAR[256]
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
  public string strInterfaceDescription;
  /// WLAN_INTERFACE_STATE->_WLAN_INTERFACE_STATE
  public WLAN_INTERFACE_STATE isState;
}

Где WLAN_INTERFACE_STATE

public enum WLAN_INTERFACE_STATE
{
  wlan_interface_state_not_ready = 0,
  ...
  // 1 to 6
  ...
  wlan_interface_state_authenticating = 7,
}

PInvoke в WLAN...

0

Это просто целое число, нет структуры 0 = не готово, 1 = связано и т.д.

  • 0
    Я уже пробовал это ... но у меня та же проблема ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню