PowerShell实现双屏连接模式切换、输入法切换、软件进程开启及关闭(Quicker和uTools)ps1脚本实现

背景

最近写了个PowerShell的ps1脚本,方便我实现电脑打游戏(主要是战地2042)和工作学习打代码模式的切换。

功能

实现两个模式的切换。

模式一:游戏模式

双屏连接方式:仅第二屏幕

输入法:英文(en-US)

软件Quicker和uTools关闭。

模式二:工作模式

双屏连接方式:扩展

输入法:中文(zh-CN)

软件Quicker和uTools打开。

具体代码

主体change.ps1脚本代码:

$lan = (Get-WinUserLanguageList | Select-Object -First 1).LanguageTag  # 获取当前输入法状态

write-host $lan

if ($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'
    # 打开uTools
    Start-Process -FilePath $uToolsIconPath
    #>

    # 调用启动uTools软件的程序
    # 直接启动,关闭该窗口会连带关闭uTools,调用另一个即时关闭的ps1脚本就不会
    # 目前不知道原因
    powershell.exe -File "C:\Users\64859\Desktop\startuTools.ps1"  # 打开uTools
    Write-Host "已启动uTools"

    # 获取Quicker图标路径
    $QuickerIconPath = Join-Path $desktopPath 'Quicker'
    # 打开Quicker
    Start-Process -FilePath $QuickerIconPath
    Write-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.Id
        Write-Host "已停止进程$ProcessName,进程 ID 为 $($TargetProcess.Id)"
    }
    else {
        Write-Host "未找到进程 $ProcessName"
    }

    # 关闭Quicker
    # 因为需要管理员权限,所以就另写了一个ps1脚本,调用管理员权限启用它来关闭Quicker
    Start-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.Id
    Write-Host "已停止进程$ProcessName,进程 ID 为 $($TargetProcess.Id)"
}
else {
    Write-Host "未找到进程 $ProcessName"
}

Read-Host -Prompt "按任意键继续..."

注意

三个ps1文件放同一个文件夹下,比如都放桌面方便即点即切。

效果图

切换游戏模式:

切换工作模式:

总结

注释在代码里面就很详细了,就不总结其他的了。

这几段都是我问chatGPT一个个功能去问问出来的。如果直接问它这几个功能一起写怎么写出来,可得到的很乱。最好是分解成具体一个个小功能去问,然后借助自己的代码功底去试它给的方法靠不靠谱,不靠谱就问它有没有其它方法,问到自己调试出来成功为止。最后拼接到一起,写进去就能用。

chatGPT4.0出来了,不知道能不能一问就问出来。

猜你喜欢

转载自blog.csdn.net/m0_46948660/article/details/129581727