投稿者: the 猫

  • デスクトップの表示

    少し修正したので貼っておこー

    仕様変更

    • 60秒のタイムアウトで復元は廃止
    • Escキー長押しで復元は廃止
    • 二重起動で復元を実行するように修正

    バグ修正

    • デスクトップ上のアイコンを右クリックして「その他のオプションを確認」を選択すると復元が開始されてしまう動作を修正
    • 最小化されている画面も復元してしまっていたので修正

    機能追加

    • デスクトップの表示時にデスクトップのアイコンにフォーカスを当てるように処理を追加

    作ったもの

    show_desktop_ext_20240602.zip

    「デスクトップの表示」のソースファイル

    #SingleInstance force
    #WinActivateForce
    
    ; define
    DATA_FILE := "デスクトップの表示.dat"
    DESKTOP_CLASS := "ahk_class Progman"
    POPUP1_CLASS := "XamlExplorerHostIslandWindow_WASDK"
    POPUP2_CLASS := "WorkerW"
    
    ; ----------------------------------------
    ; helper function
    ; ----------------------------------------
    
    getString(hwndList) {
        ret := ""
        for index, value in hwndList
            ret .= "|" . value
        return LTrim(ret, "|")
    }
    
    restoreWindow(hwndList, statusList) {
        for index, value in hwndList {
            reverseIndex := hwndList.Length - index + 1
            hwnd := Integer(hwndList[reverseIndex])
            if WinExist(hwnd)
                if (statusList[reverseIndex] != -1) ; skip minimize window
                    WinActivate(hwnd)
        }
    }
    
    ; ----------------------------------------
    ; duplicate run
    ; ----------------------------------------
    
    if FileExist(DATA_FILE) {
        ; read data file
        FileObj := FileOpen(DATA_FILE, "r")
        hwndString := FileObj.ReadLine()
        hwnd := StrSplit(hwndString, "|")
        statusString := FileObj.ReadLine()
        status := StrSplit(statusString, "|")
    
        ; restore window
        restoreWindow(hwnd, status)
    
        ; delete data file
        FileDelete(DATA_FILE)
    
        ; exit
        ExitApp
    }
    
    ; ----------------------------------------
    ;  main process
    ; ----------------------------------------
    
    ; get window handles for restore
    hwnd := WinGetList()
    
    ; get window status
    status := []
    for index, value in hwnd
        status.Push(WinGetMinMax(value))
    
    ; creat data file
    FileAppend(getString(hwnd), DATA_FILE)
    FileAppend("`n", DATA_FILE)
    FileAppend(getString(status), DATA_FILE)
    FileAppend("`n", DATA_FILE)
    
    ; show desktop and focus
    Send "#d"
    Sleep 1000
    hwndDesktop := WinGetID(DESKTOP_CLASS)
    ControlFocus(hwndDesktop)
    
    ; get window handles for monitoring
    hwnd1 := WinGetList()
    
    ; wait new window
    WinWaitNotActive WinExist("A")
    Loop {
        Sleep 500
        hwnd2 := WinGetList()
        try {
            className := WinGetClass("A")
            if ((className != POPUP1_CLASS) && (className != POPUP2_CLASS))
                if getString(hwnd1) != getString(hwnd2)
                    break
        } catch {
        } finally {
            activeId := WinExist("A")
            hwnd2 := WinGetList()
        }
    }
    
    ; restore window
    restoreWindow(hwnd, status)
    
    ; active new window
    try {
        WinActivate(activeId)
    } catch {
        WinActivate(hwnd2[1])
    }
    
    ; delete data file
    if FileExist(DATA_FILE)
        FileDelete(DATA_FILE)

    インストール手順/野良EXE…

    https://kozawa.tokyo/?p=1079

    以下の2ファイルを差し替えてください。

    C:\tool\desktop
    ├─デスクトップの表示.ahk
    └─デスクトップの表示.exe

    ショートカットファイルの再作成は不要です。

    タスクバーの最左端にショートカットファイルを配置し、「Win」+「1」キーで実行する使用方法を想定しています。「Win」+「Tab」、「Alt」+「Tab」などと共に使用してください。

    機能追加予定

    たまに動作おかしいのでまたバグ修正するかもしれません。

    備忘

    いじわるテストするとすぐに不具合が発生する。

    プロセスの一覧に変更があったことを検知して画面の復元を開始しているが、デスクトップを表示して1秒未満でアプリを実行されると画面の復元が開始できない。Autohotkeyで正しくプロセスの一覧が取得できるようになるまでタイムラグがあり1秒待ちを外すとプロセスを正しく監視できない。

    また、起動されるアプリについても多様なアプリが存在していてプロセスの一覧が変わったからといって画面を復元するためのウインドハンドルが取得できるわけではないため、ここでも待ち時間が必要となり動きとしては復元開始までにタイムラグが発生してしまっている。動きがもっさりして気持ち悪いが、仕方ないかと。

    デスクトップを表示した後、以下のようなアプリや操作ではプロセスの状態が正しく取得できず画面が復元されない場合がある。

    • スプラッシュ画面が表示されるような起動時間が長いアプリを起動する
    • スタートメニューやタスクビューを操作する
    • タスクマネージャーなどWindowsのシステムのアプリを最小化から復元する

    二重起動したら画面を復元するようにしたので画面の配置を壊して終わることはなくなったが、正しく動かないケースが多々あると思われる。

    コンパイル方法

    自分でソースを修正するような人は、そもそもこんなツールは使わないのかもしれないけれど、個々の環境で待ち時間のチューニングなどが必要かもしれないのでコンパイル方法を記載しておきます。

    1. スタートメニューで「AutoHotkey Dash」を選択する。

    2. 「Compile」を選択する。

    初回の選択時にコンパラがインストールされます。

    3. 「Compile」を起動し、「Base File」を選択を「Sava」ボタンをクリックします。

    4. 「デスクトップの表示.ahk」ファイルを右クリックし、「Compile script(GUI)」を選択します。

    C:\tool\desktop
    ├─デスクトップの表示.ahk
    └─デスクトップの表示.exe

    5. 「Convert」ボタンをクリックします。

    →「デスクトップの表示.exe」が生成されます。

    コンパイル方法を書いておけば怪しげなEXEファイルを添付する必要がないかもしれない。これを貼っておこー

    「デスクトップの表示.ahk」を直接実行できるが、「デスクトップの表示.ahk」をタスクバーにピン止めするとアイコンが変更できない。アイコンを変更するためにはEXEファイルのショートカットである方が都合が良いとの理由でEXEを添付したのだけど、怪しげな野良EXEセキュリティ的には実行したくはないよな。

    Windows セキュリティに除外を追加する

    https://support.microsoft.com/ja-jp/windows/windows-セキュリティに除外を追加する-811816c0-4dfd-af4a-47e4-c301afe13b26

    環境によっては、「C:\tool\desktop」フォルダに対して除外の設定が必要かもしれない。

  • 夢を叶えるために脳はある 「私という現象」、高校生と脳を語り尽くす

    読んだ。👍

    脳の解説本。この3冊、高校生に講義するシリーズいいね。

  • 見出しテスト

    見出し1

    テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト

    見出し2

    テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト

    見出し3

    テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト

    見出し4

    テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト

    見出し5

    テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト

    見出し6

    テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト

  • 【ChatGPT-4oとAI激戦時代①】AIと人間らしい会話ができるようになった!

    🤖

    「もうAIって人間と区別つかないよね……」 米研究者らがGPT-4などでチューリングテスト 結果は?

    https://www.itmedia.co.jp/aiplus/articles/2405/29/news052.html

    😮

  • デスクトップの表示

    「デスクトップの表示.exe – ショートカット」を作ったので貼っておこー

    背景

    「通り抜けループ」や「WipeOut」でデスクトップ上のアイコンにアクセスしようとしたけれど古いアプリなので正常に動作しないことが分かった。

    やりたいこと

    macOSのミッションコントロールのホットコーナーで「デスクトップ」を指定したときのようにデスクトップにアクセスしたい。

    Windows標準機能

    「Win」キー + D でデスクトップが表示できる。
    →デスクトップを表示した後、アプリを起動した場合、再度ショートカットを押下しても画面の配置が復元されない。

    やったこと

    「通り抜けループ」や「WipeOut」の動作確認、および類似ソフトを調査した。

    WinXCornersRegistryFix
    https://github.com/vhanla/winxcorners/releases

    Windowsでもホットコーナーの「デスクトップ」が設定可能かと思ったら元の画面の配置は復元されなかった。

    作ったもの

    show_desktop_ext_20240526.zip

    「デスクトップの表示」のソースファイル

    #SingleInstance force
    
    ; show desktop
    Send "#d"
    Sleep 1000
    
    ; get window handles
    hwnd1 := WinGetList()
    
    ; time out 60s.
    Loop 60
    {
        Sleep 1000
    
        ; window handles monitoring
        hwnd2 := WinGetList()
        if getString(hwnd1) != getString(hwnd2)
            break
        if GetKeyState("Esc")
            break
    }
    
    ; window restore
    for index, value in hwnd2
    {
        hwnd := hwnd2[hwnd2.Length - index + 1]
        if WinExist(hwnd)
            WinActivate(hwnd)
    }
    
    ; helper function
    getString(array)
    {
        ret := ""
        for index, value in array
            ret .= "|" . value
        ret := LTrim(ret, "|")
        return ret
    }

    「デスクトップの表示」を実行するとデスクトップが表示されます。デスクトップで何かしらのアプリを起動/操作などすると元の画面の配置を復元します。

    また、Escキーの長押し、60秒経過でも終了します。

    インストール手順/野良EXE…

    以下の手順では、ショートカットファイルを作成してアイコンを変更しています。アイコンを変更する必要がない場合は作業不要です。直接、ahkファイルを実行してください。

    1.「show_desktop_ext_20240526.zip」ファイルを展開し、C:ドライブの直下に格納します。

    C:\tool\desktop
    ├─デスクトップの表示.ahk
    └─デスクトップの表示.exe

    ※格納場所任意。

    2. 「デスクトップの表示.exe」を右クリックして「ショートカットの作成」を選択します。

    3. 作成された「デスクトップの表示.exe – ショートカット」を右クリックして「プロパティ」を選択します。

    4. 「ショートカット」タブで「アイコンの変更」ボタンを選択します。

    5. 「参照」ボタンでエクスプローラーを指定し、アイコンを選択します。

    6. 「デスクトップの表示.exe – ショートカット」をタスクバーにピン止めして実行します。

    アンインストール

    1. タスクバーにピン止めしたアイコンを削除します。

    2. ダウンロードしたフォルダごと削除します。

    動作確認環境

    • Windows 11
    • Autohotkey V2

    機能追加予定

    たまに動作おかしいのでバグ修正するかもしれません。

    WinGetList
    https://ahkscript.github.io/ja/docs/v2/lib/WinGetList.htm

    戻り値
    ウィンドウは、(デスクトップ上の積み重ね方に従って)最上位から最下位へと順番に検索される。

    おかしいなぁ…