当前位置: 首页 > news >正文

win11、win10使用python代码打开和关闭wifi热点的正确方法

问题一

win10、win11,可以在任务栏的WIFI图标启动移动热点,但是无法设置SSID和密码。在网上搜索好久,无解。
万能的网络解决不了,只能自己动手解决了。

问题二

我当前的WiFi驱动程序不支持承载网络,如果我输入netsh wlan show drivers,显示“支持的承载网络 : 否”。更换驱动程序后还是不支持,无法解决,也就是说无法使用如下命令启动移动热点:

netsh wlan set hostednetwork mode=allow ssid=XXXXXXXXX key=YYYYYYYYYYY
netsh wlan start hostednetwork

执行“netsh wlan start hostednetwork”这条命令会提示“无法启动承载网络”。

通过在网络上查询,得知Windows 10已经抛弃了承载网络,现在的移动热点基于WiFi Direct技术。
通过cmd命令行是无法启动新的基于WiFi Direct技术的移动热点的。

解决方案

wifi.ps1:

[Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime] | Out-Null
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]Function Await($WinRtTask, $ResultType) {$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)$netTask = $asTask.Invoke($null, @($WinRtTask))$netTask.Wait(-1) | Out-Null$netTask.Result
}# 这个函数本次的功能中没有使用,可以删除
Function AwaitAction($WinRtAction) {$asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and !$_.IsGenericMethod })[0]$netTask = $asTask.Invoke($null, @($WinRtAction))$netTask.Wait(-1) | Out-Null
}$connectionProfile = [Windows.Networking.Connectivity.NetworkInformation,Windows.Networking.Connectivity,ContentType=WindowsRuntime]::GetInternetConnectionProfile()
$tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,Windows.Networking.NetworkOperators,ContentType=WindowsRuntime]::CreateFromConnectionProfile($connectionProfile)# 检查 Windows 10 移动热点的状态
$tetheringManager.TetheringOperationalState# 如果移动热点是开启状态,则关闭移动热点
if ($tetheringManager.TetheringOperationalState -eq 1){# 关闭移动热点Await ($tetheringManager.StopTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
}
# 如果移动热点是关闭状态,则设置热点名称、热点的密码,然后开启移动热点
else{# 启动前先为移动热点设置SSID、密码$accessPoint = $tetheringManager.GetCurrentAccessPointConfiguration()# 为移动热点设置SSID$accessPoint.Ssid = "wifi_stzz"# 为移动热点设置密码$accessPoint.Passphrase = "12345678"$tetheringManager.ConfigureAccessPointAsync($accessPoint)# 启动/开启移动热点Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
}

由于Windows10、Windows111系统默认的策略是禁止直接运行ps1脚本文件的,所以需要先修改一下系统策略

使用管理员权限打开powershell

set-executionpolicy remotesigned

python代码:

import os
from glob import glob
import subprocess as spclass PowerShell:# from scapydef __init__(self, coding, ):cmd = [self._where('PowerShell.exe'),"-NoLogo", "-NonInteractive",  # Do not print headers"-Command", "-"]  # Listen commands from stdinstartupinfo = sp.STARTUPINFO()startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOWself.popen = sp.Popen(cmd, stdout=sp.PIPE, stdin=sp.PIPE, stderr=sp.STDOUT, startupinfo=startupinfo)self.coding = codingdef __enter__(self):return selfdef __exit__(self, a, b, c):self.popen.kill()def run(self, cmd, timeout=15):b_cmd = cmd.encode(encoding=self.coding)try:b_outs, errs = self.popen.communicate(b_cmd, timeout=timeout)except sp.TimeoutExpired:self.popen.kill()b_outs, errs = self.popen.communicate()outs = b_outs.decode(encoding=self.coding)return outs, errs@staticmethoddef _where(filename, dirs=None, env="PATH"):"""Find file in current dir, in deep_lookup cache or in system path"""if dirs is None:dirs = []if not isinstance(dirs, list):dirs = [dirs]if glob(filename):return filenamepaths = [os.curdir] + os.environ[env].split(os.path.pathsep) + dirstry:return next(os.path.normpath(match)for path in pathsfor match in glob(os.path.join(path, filename))if match)except (StopIteration, RuntimeError):raise IOError("File not found: %s" % filename)if __name__ == '__main__':# Example:with PowerShell('GBK') as ps:outs, errs = ps.run('set-executionpolicy remotesigned')print('error:', os.linesep, errs)print('output:', os.linesep, outs)with PowerShell('GBK') as ps:outs, errs = ps.run('./wifi.ps1')print('error:', os.linesep, errs)print('output:', os.linesep, outs)

而对于win7:

def start_wifi_hotspot(ssid, password):# 设置热点配置命令set_config_cmd = 'netsh wlan set hostednetwork mode=allow ssid={} key={}'.format(ssid, password)subprocess.call(set_config_cmd, shell=True)# 启动热点命令start_hotspot_cmd = 'netsh wlan start hostednetwork'subprocess.call(start_hotspot_cmd, shell=True)# 在这里设置热点的名称和密码
ssid = "XXXXXXXXX"
password = "YYYYYYYYYYYY"start_wifi_hotspot(ssid, password)

http://www.lryc.cn/news/176004.html

相关文章:

  • spark的数据扩展
  • 前后端分离-图书价格排序案例、后端返回图片地址显示在组件上(打印图片地址)
  • Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF
  • C语言中常见的面试题
  • 协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec
  • M1/M2芯片Parallels Desktop 19安装使用教程(超详细)
  • 外包干了3个月,技术退步明显。。。。。
  • 顺风车软件搭建流程:数字化出行与社会共享的创新
  • 2023-09-26 LeetCode每日一题(递枕头)
  • excell导入十万数据慢该如何解决
  • Python异步编程常见问题与解决
  • 77. 组合
  • vue项目开发环境工具-node
  • Python | 为FastAPI后端服务添加API Key认证(分别基于路径传参和header两种方式且swagger文档友好支持)
  • nodeJs+jwt实现小程序tonken鉴权
  • 更新andriod studio版本,项目编译报could not find org.junit.jupiter:junit-jupiter
  • 【慕伏白教程】 Linux 深度学习服务器配置指北
  • 学习windows系统让python脚本在后台运行的方法
  • 华为OD机试 - 第k个排列 - 全排列递归(Java 2023 B卷 100分)
  • 流媒体播放器EasyPlayer.js无法播放H.265的情况是什么原因?该如何解决?
  • 负载均衡器监控
  • 【计算机视觉】2.图像特征提取
  • 华为存储培训
  • I帧、P帧,B帧,GOP
  • Apache DolphinScheduler在中国信通院“2023 OSCAR开源尖峰案例”评选中荣获「尖峰开源项目奖」!
  • Java Lambda 表达式
  • 数据结构--插入排序
  • 服务器搭建(TCP套接字)-epoll版(服务端)
  • 第一章:最新版零基础学习 PYTHON 教程(第十八节 - Python 表达式语句–Python 中的中断、继续和传递)
  • Spring Cloud Alibaba Ribbon负载均衡器