原文
NGA
概述:用手柄游玩FFXIV的时候,如果发生硬件变动(包括新增和删除设备),将会导致手柄短暂失去响应。这是游戏本身的问题,但我们可以通过避免设备变动的发生来规避它。

症状

在Windows用手柄游玩的时候,偶尔会有几秒钟无法操作,此时会重复之前输入的指令。

  • 不管按哪个按钮都没有反应。
  • 如果正在移动(左摇杆)的话,就算松开摇杆角色也会继续移动(无法控制)。
  • 如果正在移动视角(右摇杆)的话,就算松开摇杆视角也会继续移动(无法控制)。
  • 执行PowerShell脚本以监控是什么硬件发生了变动。

解决方案

首先是监测脚本:

# Device Manager
# 0     Other Devices
# 1     Error Devices (Yellow Bang)
# 2     Camera Number

function GetDevStatus {
    $Device_other = @()
    $Device_yellowbang = @()
    $CameraNum=0
    $All_List = Get-WmiObject -Class Win32_PNPEntity
    foreach ($i in $All_List) {
        if ($Null -ne $i.Name  -and $Null -eq $i.PNPClass) {
            $Device_other += ($i.Name)
        }
        if ($i.Status -eq "Error") {
            $Device_yellowbang += ($i.Name)
        }
        if ($i.PNPClass -eq "Camera"){
            $CameraNum+=1
        }
    }
    return $Device_other, $Device_yellowbang,$CameraNum
}

function CatchChange {
    Write-Host("************Listening Device Change************")
    $device=Get-WmiObject -Class Win32_PNPEntity
    $device_num=$device.Length
    while ($device_num -eq((Get-WmiObject -Class Win32_PNPEntity).Length)){

    }
    if ($device_num -gt((Get-WmiObject -Class Win32_PNPEntity).Length)){
        Write-Host("Remove Device")
    }
    else{
        Write-Host("Add Device")
    }
    $device_Change=Get-WmiObject -Class Win32_PNPEntity
    $device_Compare=Compare-Object $device $device_Change
    Write-Host($device_Compare.InputObject.Name)
}

# CatchChange
$a = GetDevStatus

if ($Null -eq $a) {
    Write-Host("No Error")
}
else {
    Write-Host("************Other Devices************")
    $a[0]
    Write-Host("")
    Write-Host("************YellowBang Devices************")
    $a[1]
    Write-Host("")
    Write-Host("************Camera Num************")
    $a[2]
}
while ($True){
    CatchChange
}

把这个脚本保存为 script.ps1 并右键使用PowerShell运行。
这样一来,应该可以看到如下界面。回到FFXIV接着玩,发生症状之后应该就能看到脚本监控到了设备变动。Add Device和Remove Device的下面就是我们需要注意的设备。
FF14.script.1
这里造成问题的设备是'HID-compliant vendor-defined device HID-compliant mouse'(蓝牙鼠标)。在这之前也有出现过'surface pen'。因为鼠标放置一段时间的话就会自动休眠,所以会产生设备的变动。
知道了问题所在,把蓝牙鼠标的电源关掉,把手写笔收起来之后问题就解决了。
在禁用了'Microsoft Device Association Root Enumerator'之后问题并没有解决,所以写了这篇文章。
具体的处理方法根据设备不同也会不同,如果是外接设备的话关掉应该就可以了。

Q.E.D.