スキップしてメイン コンテンツに移動

注目

初めまして、イラストレーターのi-mixsと申します。 現在フリーでゲームを中心としたキャラクターイラストを描かせて頂いております。 イラストのお仕事についてのご相談につきましては、メニューの「Contact」、個人の方でございましたらメニューの「Plofile」にありますSkillots(スキロッツ)のページからご依頼を頂けましたら幸いでございます。 どうぞよろしくお願いいたします。

PowerMate 最短導入・安定化手順(Windows 11対応)


※作成した手順をGoogleのGeminiでまとめました。

【ステップ 1】ZadigでWinUSBドライバーを適用する

Windows 11のセキュリティ機能(メモリ整合性など)が有効でも、汎用のWinUSBであれば安全に動作します。
  1. PowerMateをUSBポートに接続します。
  2. Zadig をダウンロードして起動します。
  3. メニューの Options > List All Devices にチェックを入れます。
  4. ドロップダウンから 「PowerMate」 を選択します。
  5. ターゲットドライバー(緑の矢印の右側)を WinUSB に指定し、Replace Driver をクリックします。

【ステップ 2】Pythonコードと監視バッチを準備する
任意の場所(例: C:\PowerMate\)にフォルダを作成し、以下の2つのファイルを保存します。
※Windows 11環境でのエラー(文字コード問題)を防ぐため、日本語は1文字も含めていません。
① powermate.py (本体スクリプト)
python
from winusbpy import *
from sendinput import PressKey, ReleaseKey, VK_LEFT, VK_RIGHT
from autoshiftcache import AutoShiftCache
import threading
import time

vid = "077d"
pid = "0410"

class PowerMateReader(threading.Thread):
    def __init__(self):
        self.shiftCache = AutoShiftCache()
        threading.Thread.__init__(self)
        
    def run(self):   
        api = WinUsbPy()    
        result = api.list_usb_devices(deviceinterface=True, present=True)
        
        if result:            
            if api.init_winusb_device(vid, pid):
                api.timeout = 1000
                while True:                
                    try:
                        data = api.read(0x81, 6)
                        if not data or len(data) == 0:
                            continue
                        idx_btn = 0
                        idx_rot = 1
                        buttonDown = ord(data[idx_btn])
                        offset = ord(data[idx_rot])
                        self.shiftCache.updatePush(buttonDown == 1)
                        if offset > 127:
                            offset = -(256 - offset)
                        if offset > 0:
                            self.shiftCache.increment(offset)
                        elif offset < 0:
                            self.shiftCache.decrement(-offset)
                        time.sleep(0.001)
                    except Exception:
                        break
            else:
                print "device not found"
                    
if __name__ == "__main__":
    pmr = PowerMateReader()
    pmr.start()
    while True:
        is_alive = pmr.is_alive() if hasattr(pmr, 'is_alive') else pmr.isAlive()
        if not is_alive:
            break
        pmr.shiftCache.tick(time.time())
        time.sleep(0.01)

② powermate_start.bat (5秒生死監視バッチ)
bat
@echo off
:loop
tasklist /fi "IMAGENAME eq pythonw.exe" 2>nul | find /i "pythonw.exe" >nul
if errorlevel 1 (
    start "" "C:\Python27\pythonw.exe" "C:\PowerMate\powermate.py"
)
ping localhost -n 6 >nul
goto loop
【ステップ 3】完全非表示(バックグラウンド)用のスクリプトを作る
Windows 11では.vbs(VBScript)が将来的に非推奨化される方針が発表されているため、よりモダンでセキュリティに弾かれないPowerShellベースの非表示ショートカットを採用します。
  1. デスクトップの何もないところで右クリックし、「新規作成」 > 「ショートカット」 を選択します。
  2. 「項目の場所」に、以下のコマンドを一行でそのまま貼り付けます。
    text
    powershell -WindowStyle Hidden -Command "Start-Process 'C:\PowerMate\powermate_start.bat' -WindowStyle Hidden"
    
    「次へ」を押し、ショートカットの名前を PowerMate_Silent などにして完了します。
  3. 作成されたショートカットを、先ほど作ったフォルダ(C:\PowerMate\)の中に移動させておきます。

【ステップ 4】タスクスケジューラで「Windows 11最優先起動」を設定する
Windows 11のスタートアップ遅延を回避し、ログオンした瞬間に爆速で起動させます。
  1. キーボードの Windowsキー + R > taskschd.msc と入力して Enter でタスクスケジューラを起動します。
  2. 右メニューの 「タスクの作成...」 をクリックします。
  3. 各タブを以下のように設定します。
    • 「全般」タブ:
      • 名前: PowerMate_Win11_Startup
      • 最下部の「構成」: Windows 10 (※Windows 11でもこれで問題ありません)
      • 注意: 「ユーザーがログオンしているときのみ実行する」のままにします。
    • 「トリガー」タブ:
      • 「新規...」 > 最上部のタスクの開始を 「ログオン時」 にして「OK」。
    • 「操作」タブ:
      • 「新規...」 > プログラム/スクリプトの欄に、ステップ3で作った ショートカットのフルパス を指定して「OK」。
        (例: C:\PowerMate\PowerMate_Silent.lnk)
    • 「条件」タブ:
      • 「コンピューターをAC電源で動かしている場合のみタスクを開始する」の チェックを外す (ノートPCのバッテリー駆動対策)。
  4. 「OK」を押して保存します。
これで設定は完了です。Windows 11のPCを再起動すると、デスクトップが表示された瞬間に画面やタスクバーを一切汚さず、裏でPowerMateが起動します。万が一、USBの瞬断でプログラムが落ちても5秒以内に無音で自動復帰します。

人気の投稿