XREA.COM LogoXREA.COM Ad

My Scripts

管理人が作成したスクリプトを公開しています。
特に断りが無い限り、最新版のAutoHotkey+WindowsXPでの動作を想定しています。WindowsNT/2000でも動作するかもしれません。

これらのスクリプトを使用した結果何らかの問題が発生しても、管理人は一切の責任を負いません。
特に記述がない限り、ライセンスはNYSLです。

モジュール類

ActiveX
WSH等で使われるActiveXObjectを扱えるようにする
BREGEXP
BREGEXP.DLLを利用して正規表現検索・置換を行う関数群
migemo
migemo.dllBREGEXP.DLLを利用してローマ字と読みのマッチングを行う関数群
プロセスメモリ読み書き
PIDで指定したプロセスの指定アドレスのメモリ内容を読み取り/書き込みする関数。
ゲームの改造コードの実行などが可能なほか、使いようによっては通常では不可能な自動処理が実現できるかもしれない。
プロセスを起動して標準出力を読み書き
コンソールプログラムを非表示で起動し、標準入力にデータを書き込んだり標準出力から読み出したりする
対話的プログラムにも対応
プログラムファイルの説明などを取得
EXEファイルなどのプロパティに表示される「説明」などの情報を取得する関数
タスクトレイアイコン操作
タスクトレイアイコンに関連づけられたウィンドウや、アイコンを操作したときにそのウィンドウに送られるメッセージ番号などの情報を取得する関数と、アイコンの順番入れ替えや非表示を行う関数など
これにより、タスクトレイアイコンを直接操作することが可能になる
システムモニタ用関数群
以下のような様々な情報を取得できる。
システム全体のCPU使用率
システム全体のメモリ総容量、空き容量
バッテリの状態、残量
プロセスごとのCPU使用率
プロセスごとのメモリ使用状況
ネットワークの送受信速度(B/s)
システム起動時からのネットワーク総転送量(Bytes)
パフォーマンスモニタで取得できる各種の情報
統合アーカイバDLL呼び出し
統合アーカイバDLLを利用してアーカイブファイルの解凍、圧縮、格納ファイルの情報の取得を行う。
クリップボード操作関数群
テキスト以外のクリップボード形式を操作する。
ファイル名のリストをエクスプローラに貼り付け可能な形式で格納する例も用意。
ファイルドロップ関数
指定ウィンドウに改行区切りで指定されたファイルをドロップする

ツール

コマンドラインランチャー
タイプしたキーワードでインクリメンタルに候補を絞り込んでアイテムを実行するランチャ。
任意のフォルダの中のファイルを列挙するフォルダ展開機能や、指定フォルダの中の条件に一致するファイルを一括して検索候補に追加するスキャン機能などがある。
MouseGesture.ahk
マウスジェスチャを実現する。
左・右・中央・第4・第5ボタンの押し下げ、押し上げ、ホイールの上・下回転、マウスカーソルの移動を組み合わせたあらゆるジェスチャに割り当てが可能。
移動認識は4方向モードと8方向モードから選択。長距離ストロークの認識、ボタン単独やダブル〜n回クリックなどへの割り当ても可能。
アプリケーション条件は、ウィンドウクラス、コントロールクラス、ウィンドウタイトル、プロセスの実行ファイル名の他、任意のAutoHotkeyの式を使用可能。
動作はAutoHotkeyのスクリプトで定義。
ThumbRemap
タッチパッドに触れているときだけ指定のホットキー/リマップを有効化させる。
キーボードをマウスボタンの代わりにすることで、ホームポジションのままでポインタ操作が可能となる。
SynapticsかALPS製のドライバで動作するタッチパッドが必要。
リスト型タスク切り替え
開いているウィンドウの一覧をListViewで表示し、クリックで切り替える。
常駐版では、マウスの第4ボタンを押したときに表示され、第4ボタンを放したときにポイントしていた項目に決定するという独特のインターフェイスを採用している。
ウィンドウアイコンのハンドルの取得、ListViewにアイコンハンドルで指定したアイコンを表示する、ListViewに任意のサイズのアイコンを表示するなどのテクニックを使用している。
タスクトレイに最小化
タイトルバーをホイールクリックしたウィンドウを非表示にし、代わりにタスクトレイにアイコンを表示する。
アイコンをクリックするとウィンドウを復元する。
DllCallでShell_NotifyIconを呼ぶとことで、複数のタスクトレイアイコンの使用を実現している。
ウィンドウ縮小
任意のウィンドウのタイトルバーをホイールクリックすると、そのウィンドウを縮小したGUIウィンドウに置き換える。
ウィンドウはD&Dで移動でき、ダブルクリックで復元される。
ウィンドウの表示内容の変化は縮小ウィンドウにも反映される。
DllCallでGetWindowDCとStretchBltなどを使用している
虫眼鏡
マウスカーソルの周辺を拡大表示する。
マウスクリックは拡大画面を透過するので、普通にマウス操作が可能。
DllCallでGetWindowDCとStretchBltなどを使用している
デスクトップモザイク
デスクトップの任意の矩形領域(複数指定可能)にモザイクを掛ける
StretchBltで一旦縮小した後、再度拡大することでモザイク的な画像にしている。
ホイールリダイレクト
マウスホイールの回転をアクティブウィンドウではなくカーソル下のコントロールに送る。
MouseGetPosでは正しいコントロールが取得できないことがあるが、WM_NCHITTESTでコントロールが正しいかを確認しているため、確実にマウスカーソル下のコントロールを操作できる。
トレイアイコン一覧からの操作
タスクトレイアイコンをリスト表示し、キーボードからクリック、ダブルクリック、ホイールクリックの操作が行える。
Inspecting Toolbar IDs
WM_COMMAND(PostMessage,0x111,...)で送信するコマンドIDを調査するにはResource Hackerを使った方法が簡単ですが、これではツールバーのコマンドIDは調べられない。
ツールバー関連のウィンドウメッセージを使用することで、ボタンに対応するコマンドIDを調べられる。
マウスカーソルの下のコントロールをツールバーとみなして調査する。
Sendコマンド用日本語コード変換
Sendコマンドやホットストリングの自動入力には、日本語の文字列を直接指定して入力させることは出来ない。
しかし、{ASC nnnnnn}で指定すると日本語文字列も入力させられる。
このスクリプトを実行すると、クリップボード内のテキストをSendの引数の形式に変換する。
あまり確実性はないので、普通にクリップボードを経由して貼り付けた方がよい。

サンプルコード類

2 stroke key

Emacsのような2ストロークキーを実現する例。
下記の例ではC-c xC-c sを再現している。

^c::                                     ;first key
    Input,InputChar,C I L1 T2,{Esc},x,s  ;second keys
    if ErrorLevel=Match
    {
        if InputChar=x                   ;actions
            Send,!{F4}
        else
        if InputChar=s
            Send,^s
    }
    return

Ctrl key double tap

Ctrlキーをマウスのダブルクリックのように素早く2回押すと記述されたアクションが実行される。

~Ctrl::
if A_TickCount < %ctrldouble%
{
                                 ;some action
    ctrldouble=0
}
else
{
    ctrldouble=%A_TickCount%
    ctrldouble+=400
}
return

ListViewに任意の大きさの画像サムネイルを表示

DllCallで自前のImageListを生成することにより、任意の大きさのアイコンを表示できる

Gui,Add,ListView, w640 h480 r%w% vLv Icon,name
himl:=DllCall("ImageList_Create",Int,256,Int,256,UInt,0x21,Int,w,Int,w,UInt)
LV_SetImageList(himl,0)
n:=IL_Add(himl,"F:\pictures\cats\c22.jpg",0,1)
LV_Add("Icon" . n ,"aaaaaaaa")
Gui,Show


番号の空いているGUIウィンドウを生成

他のスクリプトとマージするときにGUIウィンドウの番号が衝突しないように、空いているGUIウィンドウの番号を検索して生成する例

newGui(){
    Process,Exist
    mypid:=ErrorLevel
    DetectHiddenWindows,On
    WinGet,h,list,ahk_pid %mypid% ahk_class AutoHotkeyGUI
    DetectHiddenWindows,Off
    Loop,99{
        found=0
        Gui,%A_Index%:+LastFound
        WinGet,hwnd,id
        Loop,%h%{
            if(h%A_Index%=hwnd){
                found=1
                break
            }
        }
        if(found=0){
            return A_Index
        }
    }
    return 0
}

/*
Gui,Add,text,,MyGUI
Gui,Show

w1:=newGui()
Gui,%w1%:Default
Gui,add,text,,DynamicGUI 1
Gui,Show

w2:=newGui()
Gui,%w2%:Default
Gui,add,text,,DynamicGUI 2
Gui,Show
*/