背景
最近写了个PowerShell的ps1脚本,方便我实现电脑打游戏(主要是战地2042)和工作学习打代码模式的切换。
功能
实现两个模式的切换。
模式一:游戏模式
双屏连接方式:仅第二屏幕
输入法:英文(en-US)
软件Quicker和uTools关闭。
模式二:工作模式
双屏连接方式:扩展
输入法:中文(zh-CN)
软件Quicker和uTools打开。
具体代码
主体change.ps1脚本代码:
$lan = (Get-WinUserLanguageList | Select-Object -First 1).LanguageTag # 获取当前输入法状态write-host $lanif ($lan -eq 'en-US') {# 检测到当前输入法为英文,即目前处在游戏模式,所以下一步是切换到工作模式set-winuserlanguagelist 'zh-CN' -force # 切换输入法为中文write-host '切换输入法为中文'displayswitch /extend # 切换双屏连接方式为扩展write-host '切换双屏连接方式为扩展'# 获取桌面路径$desktopPath = [Environment]::GetFolderPath('Desktop')<# 这样做,关闭窗口也会同时关闭uTools!# 获取uTools图标路径$uToolsIconPath = Join-Path $desktopPath 'uTools'# 打开uToolsStart-Process -FilePath $uToolsIconPath#># 调用启动uTools软件的程序# 直接启动,关闭该窗口会连带关闭uTools,调用另一个即时关闭的ps1脚本就不会# 目前不知道原因powershell.exe -File "C:\Users\64859\Desktop\startuTools.ps1" # 打开uToolsWrite-Host "已启动uTools"# 获取Quicker图标路径$QuickerIconPath = Join-Path $desktopPath 'Quicker'# 打开QuickerStart-Process -FilePath $QuickerIconPathWrite-Host "已启动Quicker"write-host '已切换到工作模式'} else {# 检测到当前输入法为中文,即目前处在工作模式,所以下一步是切换到游戏模式set-winuserlanguagelist 'en-US' -force # 切换输入法为英文write-host '切换输入法为英文'displayswitch /external # 切换双屏连接方式为仅第二屏幕write-host '切换双屏连接方式为仅第二屏幕'Start-Sleep -Seconds 2 # 注意,这里需要等2秒,因为调用切换要时间,不然下面关闭操作会打断# 关闭uTools$ProcessName = "utools"$Processes = Get-Process # 获取当前正在运行的所有进程# 过滤得到uTools进程$TargetProcess = $Processes | Where-Object { $_.ProcessName -eq $ProcessName }if ($TargetProcess) {Write-Host "找到了进程 $ProcessName,进程 ID 为 $($TargetProcess.Id)"Stop-Process -Id $TargetProcess.IdWrite-Host "已停止进程$ProcessName,进程 ID 为 $($TargetProcess.Id)"}else {Write-Host "未找到进程 $ProcessName"}# 关闭Quicker# 因为需要管理员权限,所以就另写了一个ps1脚本,调用管理员权限启用它来关闭QuickerStart-Process powershell -Verb RunAs -ArgumentList '-File "C:\Users\64859\Desktop\stopQuicker.ps1"'write-host '已切换到游戏模式'
}
Read-Host -Prompt "按任意键继续..."
启动uTools脚本startuTools.ps1代码:
# 获取桌面路径
$desktopPath = [Environment]::GetFolderPath('Desktop')# 获取uTools图标路径
$uToolsIconPath = Join-Path $desktopPath 'uTools'# 打开uTools
Start-Process -FilePath $uToolsIconPath# Read-Host -Prompt "按任意键继续..."
停止Quicker脚本stopQuicker.ps1代码:
# Start-Process powershell -Verb RunAs$ProcessName = "Quicker"$Processes = Get-Process # 获取当前正在运行的所有进程
# 过滤得到Quicker进程
$TargetProcess = $Processes | Where-Object { $_.ProcessName -eq $ProcessName }if ($TargetProcess) {Write-Host "找到了进程 $ProcessName,进程 ID 为 $($TargetProcess.Id)"Stop-Process -Id $TargetProcess.IdWrite-Host "已停止进程$ProcessName,进程 ID 为 $($TargetProcess.Id)"
}
else {Write-Host "未找到进程 $ProcessName"
}Read-Host -Prompt "按任意键继续..."
注意
三个ps1文件放同一个文件夹下,比如都放桌面方便即点即切。
效果图
切换游戏模式:
切换工作模式:
总结
注释在代码里面就很详细了,就不总结其他的了。
这几段都是我问chatGPT一个个功能去问问出来的。如果直接问它这几个功能一起写怎么写出来,可得到的很乱。最好是分解成具体一个个小功能去问,然后借助自己的代码功底去试它给的方法靠不靠谱,不靠谱就问它有没有其它方法,问到自己调试出来成功为止。最后拼接到一起,写进去就能用。
chatGPT4.0出来了,不知道能不能一问就问出来。