关于c++控制windows wifi断线重连

关于皓月Tunnuel联机(感谢皓哥一波),有个朋友用的是网卡重刷驱动连接pspWifi进行联机的,不过每次退出集会后都要点开电脑设置手动连接Wifi,于是萌生了个制作Wifi断线重连程序的想法。


基本想法是 system控制dos 来实现对wifi的控制

1、定时dos检测当前wifi连接状态

netsh wlan show interfaces

2、dos连接指定wifi

netsh wlan connect name=wifissid


不过还需要准备一些东西

1、在c++中控制dos可用system()函数,例如:

system("netsh wlan show interfaces");

2、c++中如何控制定时函数(python好方便啊!!!!!!)

找了半天用了settimer,但是还是不懂怎么用,于是直接套用别人的代码了

#include <stdlib.h>
#include <Windows.h>
#include <iostream>
using namespace std;

void Work()
{
    cout<<"working~"<<endl;
}

VOID CALLBACK TimerProcess(HWND hwnd, UINT uMsg, UINT idEvent,DWORD dwTime)
{
    Work();
}

int main()
{
    cout <<"start"<<endl;
    HWND hwndTimer;
    MSG msg;

    SetTimer(NULL,1,3000,TimerProcess);//三千毫秒间隔时间

    int itemp;
    while ((itemp = GetMessage(&msg, NULL,NULL,NULL))&& (itemp!=0) &&(-1 != itemp))
    {
        if(msg.message == WM_TIMER)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return 0;
}


需要使用的话把work()代码改一下就可以了,但是到现在还是不能理解(捂脸),只会套用


然后还需要识别dos命令的结果,不过好像没找到直接写入变量的方法,所以只能先写入文件中然后再从文件中读取

在dos命令后加上  >文件名.txt    就可以了

netsh wlan show interfaces > wifi_info.txt



最后贴上源码:

#include <stdlib.h>
#include <Windows.h>
#include <iostream>
#include <fstream>
using namespace std;

string name = "PSP_AULJM05800_L_MHP3Q000";

int GetWiFi(string wifiname)
{
    char *filename = "wifi_info.txt";
    string text;
    ifstream f;
    f.open(filename);
    while(getline(f,text))
    {
        if (text.find(wifiname)>0&&text.find(wifiname)<=100) return 1;
    }
    return 0;
}

void Work(string wifiname)
{
    system("netsh wlan show interfaces > wifi_info.txt");
    int statue = GetWiFi(wifiname);
    if(statue==0)
    {
        string body = "netsh wlan connect name=";
        string S = body + wifiname;
        char * s = (char*)S.data();
        system(s);
    }
}

VOID CALLBACK TimerProcess(HWND hwnd, UINT uMsg, UINT idEvent,DWORD dwTime)
{
    Work(name);
}

int main()
{
    cout <<"保持连接中......"<<endl;
    HWND hwndTimer;
    MSG msg;

    SetTimer(NULL,1,3000,TimerProcess);

    int itemp;
    while ((itemp = GetMessage(&msg, NULL,NULL,NULL))&& (itemp!=0) &&(-1 != itemp))
    {
        if(msg.message == WM_TIMER)
        {
            //cout<<"test"<<endl;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return 0;
}

检测时间间隔为3秒,wifi名为”PSP_AULJM05800_L_MHP3Q000“,如果需要重连其它WiFi只需要把WiFi名改一下就可以了


欢迎守着psp的 萌死它夯它瓦鲁多 的猛汉们来 皓月tunuel联机平台 一起联机

(最后插一句:python真  *  *  的方便啊!!!!!!但我这次还是不知道为什么用了c++)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,你需要使用 Windows 应用程序开发工具,如 Visual Studio 来创建 C 语言程序。 接下来,你需要在代码中包含 Windows 头文件 "wlanapi.h",并调用 WlanOpenHandle 函数来打开 WLAN API 句柄。 然后,你可以使用 WlanEnumInterfaces 函数来获取系统中可用的 WLAN 接口列表。 接着,你可以遍历每个接口,并使用 WlanSetInterface function 设置 WLAN_INTF_OPCODE_HIDDEN_NETWORK 标志来隐藏该接口。 最后,你需要调用 WlanCloseHandle 函数来关闭 WLAN API 句柄。 以上是一种使用 C 语言隐藏 Windows WiFi 列表的方法。你还可以使用其他方法,如使用 Windows Management Instrumentation (WMI) 或者直接调用 Windows 内部函数。但是需要注意,有些方法可能需要你在代码中包含特定的头文件或者链接特定的库文件,或者在系统中具有特定的权限。 ### 回答2: 在C语言中,要隐藏Windows WiFi列表,可以通过修改Windows的注册表来实现。 首先,需要使用C语言中的Windows API函数来访问和修改注册表。可以使用RegOpenKeyEx函数打开注册表项,使用RegSetValueEx函数来修改注册表项的值,以及使用RegCloseKey函数关闭注册表项。 要隐藏WiFi列表,需要将下面这个注册表项的值设置为1: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Network\HideScanAssociations 在C语言中,可以使用以下代码片段来实现这个功能: #include <stdio.h> #include <windows.h> int main() { HKEY hKey; DWORD dwData = 1; // 打开注册表项 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Settings\\Network", 0, KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) { printf("Failed to open registry key\n"); return 1; } // 修改注册表项的值 if (RegSetValueEx(hKey, "HideScanAssociations", 0, REG_DWORD, (BYTE*)&dwData, sizeof(dwData)) != ERROR_SUCCESS) { printf("Failed to set registry value\n"); RegCloseKey(hKey); return 1; } // 关闭注册表项 RegCloseKey(hKey); printf("Successfully hid WiFi list\n"); return 0; } 上述代码片段可以将WiFi列表隐藏,使其不再显示。通过以上操作,我们可以在C语言中使用Windows API函数来隐藏Windows WiFi列表。 ### 回答3: 要隐藏WindowsWiFi列表可以使用C语言来编写一个小程序来实现。具体实现的步骤如下: 1. 使用C语言编写一个Windows应用程序。你可以使用C语言中的WinAPI来处理Windows的网络设置。 2. 使用WinAPI中的函数来获取WiFi列表。可以使用函数`WlanEnumInterfaces`来获取当前系统中的无线网络接口列表。该函数需要调用头文件`wlanapi.h`并且要链接`wlanapi.lib`库文件。 3. 遍历WiFi列表,找到所需隐藏的WiFi网络。使用函数`WlanGetNetworkBssList`来获取当前无线网络接口的BSS(基础服务集)列表,然后遍历列表中的每一个BSS,通过比较SSID(服务设备标识符)来找到需要隐藏的WiFi网络。 4. 使用`WlanSetProfile`函数将需要隐藏的WiFi网络的配置文件从可见状态改为隐藏状态。可以创建一个XML格式的配置文件,然后通过函数`WlanSetProfile`来修改该配置文件中的`<connectionType>`节点的值为`hidden`。最后使用函数`WlanConnect`来更新网络连接。 5. 将编写好的C代码进行编译和构建,生成可执行文件。 6. 运行生成的可执行文件,即可隐藏WindowsWiFi列表。 需要注意的是,编写这样一个功能的程序需要具备一定的C语言编程和Windows网络编程的知识,并且要了解WinAPI中相关的函数和数据结构。还需要确保程序有足够的权限来进行网络设置的修改。同时,对网络设置的修改也可能会造成一些不可预料的问题,建议在操作前备份重要数据以免造成损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值