Qt显示笔记本wifi列表 windows

来源:互联网 发布:五大流氓知乎 编辑:程序博客网 时间:2024/05/04 04:10

关于怎样设计你程序显示自己电脑的wifi列表的问题,微软已经提供相关api.这里也是参考网上的资源在这里用Qt实现。

首先用到的几个类:

    PWLAN_INTERFACE_INFO_LIST    

    PWLAN_INTERFACE_INFO        

    PWLAN_AVAILABLE_NETWORK_LIST 

    PWLAN_AVAILABLE_NETWORK     

    WLAN_CONNECTION_PARAMETERS 

关于这几个类得说明以及使用msdn上都有描述。这里直接上代码:

wifi::wifi(QWidget *parent, Qt::WFlags flags)
 : QMainWindow(parent, flags)
{
 ui.setupUi(this);
 
 
 PWLAN_INTERFACE_INFO_LIST    pIfList = NULL;
    PWLAN_INTERFACE_INFO         pIfInfo = NULL;

    PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;
    PWLAN_AVAILABLE_NETWORK      pBssEntry = NULL;

 unsigned long  dwResult,dwCurVersion,dwMaxClient=2;
 void *hCilent = NULL;

  dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion,&hCilent);
    if (dwResult != ERROR_SUCCESS) {
        wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
        return ;

    }
  dwResult = WlanEnumInterfaces(hCilent, NULL, &pIfList);
    if (dwResult != ERROR_SUCCESS)
 {
       // wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
        return ;
        // You can use FormatMessage here to find out why the function failed
    }
 else
 {
  for (int i = 0; i < (int) pIfList->dwNumberOfItems; i++)
  {
            pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
  }
 }
    dwResult = WlanGetAvailableNetworkList(hCilent, &pIfInfo->InterfaceGuid,0, NULL, &pBssList);
    if (dwResult != ERROR_SUCCESS)
 {
        //wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n",dwResult);
        dwResult = 1;
        // You can use FormatMessage to find out why the function failed
    } else {
        //wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n");

        // wprintf(L"  Num Entries: %lu\n\n", pBssList->dwNumberOfItems);
        for (int j = 0; j < pBssList->dwNumberOfItems; j++) {
            pBssEntry = (WLAN_AVAILABLE_NETWORK *) & pBssList->Network[j];
            // wprintf(L"  Profile Name[%u]:  %ws\n", j, pBssEntry->strProfileName);
   qDebug()<<pBssEntry->strProfileName;
   char *ch = UnicodeToAnsi(pBssEntry->strProfileName);
   QString str;
   str.append(ch);
   qDebug()<<str;

   char *p;
    if (pBssEntry->dot11Ssid.uSSIDLength != 0)
     {
      p = (char*) pBssEntry->dot11Ssid.ucSSID;
      QString str1;
      str1.append(p);
      qDebug()<<str1;
    }
            }
 }
}

wifi::~wifi()
{

}

 

关于连接请参考msdn  http://msdn.microsoft.com/en-us/library/windows/desktop/ms706613(v=vs.85).aspx

PS:关于Qt怎么使用windows的api,这里笔者取了一下巧,就是用VS去写了Qt的程序,只要在项目属性连接器输入里加入wlanapi.lib;ole32.lib;就可以了,如果用QtCreater写的话,请参考http://bbs.csdn.net/topics/360069804