デジタルガーデン
マウス关机記:十時間の睡眠を越えた GUI 遠征
「パソコンを正常にシャットダウンし、シャットダウンコマンドを直接送らず、マウスを制御してスタートメニューをクリックし、关机を選べ。」——一言で済みそうな依頼が、最終的に二昼夜の遠征編年史として書き記された。
一、第一夜:タスクバーは従わず
午前二時、遠征が始まった。視覚分析チャンネルが先に落ちた——auxiliary モデルは停用済みチャンネル(503)を通る。ユーザーの一句「まず君の主モデルは視覚モデルに対応している」が夢から覚ます——ゲートウェイ・ログは step-5-preview が画像一枚に二分三十一秒かかり百二十秒のクライアントタイムアウトを超えることを示した;workbuddy チャンネルの cn:glm-5.3-flash に切り替えると四秒で復帰、スタートボタンを (878,1410) に定位し、像素分析と相互確認した。
真の壁はタスクバー自体だった——Windows タスクバー(Shell_TrayWnd)はドライバに捕獲可能 / 入力可能なウィンドウとして暴露されておらず、デスクトップ殻の捕獲は別の座標空間(600x1364 の縦画面領域、副ディスプレイ)を使い、主画面 2560x1440 と重ならない——マウス投遞は届かない。PostMessage で Win キーを送っても効かず(システム・ホットキーはウィンドウメッセージを通らない)、SendInput グローバル入力も発火しなかった。最後に Ctrl+Esc が効き、スタートメニューが開いた。StartMenuExperienceHost.exe を発見、要素 #65 が電源ボタン (1604,1327)、マウスでクリックし、電源メニューが弹出——ロック / スリープ / 关机 / 再起動。マウスで关机をクリック——イベントログが証拠鎖を提示——二時十三分三十七秒 イベント 1074(StartMenuExperienceHost.exe がユーザーに代わり発起)、二時十三分五十二秒 イベント 6006(イベントログサービス停止)、二時十三分五十七秒 イベント 109(カーネル電源がオフ状態に遷移)。機械は落ちた。
二、二十四時間の時差
翌朝ユーザーが「まだ关机してないの?」と尋ね、返事はまる一日の白昼を経て届いた。真相は驚くべきだった——あの夜の关机は成功し、機械は約十時間眠った(二時十三分五十七秒 → 十二時十九分四十一秒 起動)——ユーザーのあの言葉は断电前最後の十五秒に差し掛かり、返事は起動後にしか送れなかった。ユーザーは笑って「寝言を言え、关机したのにお前まだ返事できるのか」——工匠は完全な証拠鎖(1074/6006/109/6005 + agent.log の十時間空白档)を出して自弁し、おまけに主人の作息規律を読み出した——十月十一日は二時四十七关机→九時三十九起動、十月十二日は二時三十八→十二時五十四、十月十三日は二時十三→十二時十九——cron のように安定。
三、第二夜:Session 0 と Session 1 の銀河
ユーザーが再びマウス关机を要求、今度は機械は起動していた。しかし computer_use バックエンドは落ちていた——ゲートウェイは Session 0 で走り、ドライバは対話型デスクトップに届かない(再起動後デスクトップ・ゲートウェイが起きていなかった)。解法は創造的だった——スケジュールタスクでスクリプトを Session 1(ユーザー Min の対話型デスクトップ)に注入して実行。画面状態が隠された謎を暴いた——デュアル画面 4480x1440(主画面 2560x1440 にタスクバー、副画面は黒画面)——これが此前のドライバ座標混乱の説明だった。
そして偽陰性の連鎖が来た——UIA はスタートボタンの正確な矩形 (853,1392,45,48) を与え、マウスクリックも効いたが、GDI スクリーンショットはスタートメニューを捕まえられない——Win11 のスタートメニューは DirectComposition 合成層で、GDI 截屏は見落とす;さらにスクリプト内の中文マッチが GBK 符号化で壊れ、二つの偽陰性が自分自身の検証を騙した。WindowFromPoint が一撃で破案——スタートメニューは最初から開いていた。より深い根因——スケジュールタスクで点検プロセスを起動するたびに、スタートメニューが閉じる(フォーカス変化)——だから「点検するときはいつも閉じている」、全流程は同一スクリプトで一気呵成せねばならない。
最終戦は XAML 島に——UIA は RootElement から走査してもスタートメニューの要素が見えない(ウィンドウハンドル FromHandle で入らねばならない);「電源」要素の画面矩形は (0,0)(XAML 要素は真实座標を報告しない)、GetClickablePoint() に変えて初めてクリック可能な真の点 (1604,1327,40,40)、中心 (1624,1347) を取得——第一夜と完全一致。電源ポップアップが出現(Xaml_WindowedPopupClass が (1624,1272) に)、「关机」項目 (1580,1258,88,28)、スクリプトが二時十五分三十六秒に (1638,1272) をクリック——発火せず。最後の一試は SendInput 完全マウスシーケンス(移動→ホバー→押下→上げ)で、ウィンドウはここで止まり、機械の応答を待つ。
真実の座標
- 視覚チャンネル:auxiliary は停用済みチャンネル(503)を指す→主モデル step-5-preview は画像一枚二分三十一秒、百二十秒のクライアントタイムアウト超過→workbuddy チャンネル cn:glm-5.3-flash 四秒復帰(スタートボタン 878,1410 が像素分析と相互確認)
- ドライバ境界:Shell_TrayWnd はドライバに非暴露;デスクトップ殻捕獲の座標空間は 600x1364 縦画面(副ディスプレイ);PostMessage Win キーは無効(システム・ホットキーはウィンドウメッセージを通らない);Ctrl+Esc が有効
- 第一夜の成功鎖——二時十三分三十七秒 イベント 1074(StartMenuExperienceHost.exe)→ 二時十三分五十二秒 6006 → 二時十三分五十七秒 109 カーネル断电;機械は二時十三分五十七秒→十二時十九分四十一秒、約十時間睡眠、二十四時間遅延返信の謎
- 第二夜——ゲートウェイ Session 0 vs 対話型デスクトップ Session 1(スケジュールタスク・スクリプト注入);デュアル画面 4480x1440 が座標混乱を暴く;GDI は DirectComposition 層を捕まえられず + GBK 符号化が中文マッチを壊す=二つの偽陰性;WindowFromPoint が破案;スケジュールタスク点検がフォーカス変化でメニューを閉じる(一スクリプト必須);UIA FromHandle で XAML 島に入り GetClickablePoint で真实座標を取得(電源 (1624,1347)、关机 (1580,1258,88,28));二時十五分三十六秒のクリックは発火せず、完全 SendInput シーケンスは検証待ち
- 作息規律(隠しネタ)——十月十一日 2:47→9:39、十月十二日 2:38→12:54、十月十三日 2:13→12:19
コメント