AutoHotKey_Lで、引数を動作中のソフトに渡すツール作った。ver.2.1.0

 S2WAは、あらかじめAppListを用意しておき、リスト内のソフトが起動済みならそのソフトに、そうでなければリストの一番上のソフトに、自身が受け取った引数を丸投げするツール。
 例えばいくつかのブラウザを使い分けている環境で、HTTPなどをS2WAに関連付けておけば、リンクを踏んだ時起動済みのブラウザで開かれるため、無駄にブラウザを起動せずに済む。

 ver.2.1.0では、OperaNext15が妙なディレクトリ構成なので、それに対応すべくAppListで正規表現を使えるようにした。

; ////////////////////////////////////////////////////////////////////////////////
;
; S2WA.ahk ver.2.1.0
;
; ////////////////////////////////////////////////////////////////////////////////

  FileEncoding, CP1200

  IfNotExist, %A_ScriptDir%\AppList.txt
  {
    MsgBox, %A_ScriptDir%\AppList.txt が存在しません!
    ExitApp
  }

  for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
    if process.ExecutablePath
      ProcessList .= process.ExecutablePath "`n"

  TrgExe := ""
  Loop, Read, %A_ScriptDir%\AppList.txt
  {
    if !A_LoopReadLine
      continue
    
    StringLeft, CharBuf, A_LoopReadLine, 1
    if ("*" == CharBuf)
      StringTrimLeft, SearchExe, A_LoopReadLine, 1
    else {
      StringReplace, SearchExe, A_LoopReadLine, \, \\, All
      StringReplace, SearchExe, SearchExe, ., \., All
      StringReplace, SearchExe, SearchExe, [, \[, All
      StringReplace, SearchExe, SearchExe, ], \], All
      StringReplace, SearchExe, SearchExe, +, \+, All
      StringReplace, SearchExe, SearchExe, {, \{, All
      StringReplace, SearchExe, SearchExe, }, \}, All
      StringReplace, SearchExe, SearchExe, ^, \^, All
      StringReplace, SearchExe, SearchExe, $, \$, All
      StringReplace, SearchExe, SearchExe, (, \(, All
      StringReplace, SearchExe, SearchExe, ), \), All
    }
    
    if RegExMatch(ProcessList, "im`n)^(" SearchExe ")$", $) {
      MsgBox, %$1%
      TrgExe := $1
      break
    }
  }

  If !TrgExe
    FileReadLine, TrgExe, %A_ScriptDir%\AppList.txt, 1

  Loop, %0%
  {
    CmdlineBuf := %A_Index%
    Run, %TrgExe% "%CmdlineBuf%"
    Sleep, 1000
  }

 使用するには、スクリプトと同じディレクトリにAppList.txtを用意し、S2WAを呼び出すだけ。S2WAはAppListを上から順に起動済みプロセスと照合し、いずれもHitしなければ一番上のソフトを起動する。

 AppListの仕様は以下の通り。

  • 文字コードはUnicode(UTF-16LE)。
  • 1行につきひとつのフルパス。
  • 行が*から始まった場合、その行は正規表現とみなされる。

 ただし、1行目は正規表現であってはならない。OperaNext15を最優先にしたいなら、以下のように記述する。

R:\Opera Next\launcher.exe
*R:\\Opera Next\\.*\\opera\.exe

 WindowsVista以降、httpなどのプロトコルへの関連付けは面倒になっている。詳しくはver.2.0.0の記事参照。


[PR]
by lordnoesis | 2013-06-20 17:57 | Trackback | Comments(0)

AutoHotKeyで、ウィンドウを瞬間移動してみた(マルチモニタ対応)。

 ウィンドウを、いちいちマウスで移動するのが面倒だったので、アクティブなウィンドウを移動するAHK作った。
 デスクトップを3*3(右/中央/左、上/中/下)に区切って、ウィンドウを指定したデスクトップ淵に合わせる。マルチモニタ対応。

WinMoveG9(MntIdx = 0, MoveArea = 7) {
/*
 MntIdx : 異動先となるモニタ。デフォルトは0(移動しない)。
 MoveArea : 移動先となるグリッド(位置はテンキー参照)。デフォルトは7(左上)。
*/
  WinGet,WinId, ID, A
  WinGetPos, WinX, WinY, WinW, WinH, ahk_id %WinId%
  if MntIdx
    SysGet, Mnt, MonitorWorkArea, %MntIdx%
  else {
    WinYC := WinH // 2 + WinY, WinXC := WinW // 2 + WinX
    MntNum := 2 ; 有効なモニタ数(頻繁に変更するなら↓をアンコメント)
    ;~ SysGet, MntNum, 80
    Loop, %MntNum%
    {
      SysGet, Mnt, MonitorWorkArea, %A_Index%
      if (MntTop < WinYC) && (WinYC < MntBottom) && (MntLeft < WinXC) && (WinXC < MntRight)
        break
    }
  }

  if (7 == MoveArea || 4 == MoveArea || 1 == MoveArea)
    MoveX := MntLeft
  else if (8 == MoveArea || 5 == MoveArea || 2 == MoveArea)
    MoveX := (MntRight - MntLeft - WinW) / 2 + MntLeft
  else  ; if (9 == MoveArea || 6 == MoveArea || 3 == MoveArea)
    MoveX := MntRight - WinW

  if (7 == MoveArea || 8 == MoveArea || 9 == MoveArea)
    MoveY := MntTop
  else if (4 == MoveArea || 5 == MoveArea || 6 == MoveArea)
    MoveY := (MntBottom - MntTop - WinH) / 2 + MntTop
  else ; if (1 == MoveArea || 2 == MoveArea || 3 == MoveArea)
    MoveY := MntBottom - WinH

  WinMove, ahk_id %WinId%, , %MoveX%, %MoveY%
}

#Numpad1::WinMoveG9(0, 1)
#Numpad2::WinMoveG9(0, 2)
#Numpad3::WinMoveG9(0, 3)
#Numpad4::WinMoveG9(0, 4)
#Numpad5::WinMoveG9(0, 5)
#Numpad6::WinMoveG9(0, 6)
#Numpad7::WinMoveG9(0, 7)
#Numpad8::WinMoveG9(0, 8)
#Numpad9::WinMoveG9(0, 9)

#1::
  WinMoveG9(1)
return
#2::
  WinMoveG9(2)
return

#c::
  WinMoveG9(0, 5)
return

 例えば、Win+NumPad7で今いるモニタの基準位置(左上)に、Win+NumPad3なら今いるモニタの右下に移動。Win+NumPad5かWin+Cで画面中央に移動。Win+1でモニタ1の基準位置へ移動。


[PR]
by lordnoesis | 2013-01-31 21:00 | Trackback | Comments(1)

AutoHotKeyで、常駐AHKスクリプトの運用を少し便利に。

 常駐AHKスクリプトの運用(編集やリロード)を便利にするホットキー。

;--------------------------------------------------------------------------------------
; AHK
;--------------------------------------------------------------------------------------

; 5秒後にスクリプトリロード
; もう一度呼び出せば即座にリロード。一時的にホットキーを無効化する作用も。
#R::
  Suspend, Permit
  if ("#R" == A_PriorHotkey)
    Reload
  Suspend, On
  SplashTextOn, 100, 20, , AHK Reload
  SetTimer, AHK_Reload, -5000
return

AHK_Reload:
  Reload
return

; スクリプト編集
#E::
  Run, Edit %A_ScriptFullPath%
return

; WinSpy呼び出し
; WinSpy起動済みならアクティブに。
#W::
  SplitPath, A_AhkPath, , AhkDir
  IfWinExist, Active Window Info (Shift-Alt-Tab to freeze display) ahk_class AU3Reveal
    WinActivate
  else
    Run, %AhkDir%\AU3_Spy.exe
return


[PR]
by lordnoesis | 2012-09-30 18:05 | Trackback | Comments(0)

AutoHotKeyで、Explorerの並べ替えを便利に。

 エクスプローラの並べ替えにショートカットつけると地味に便利。Ctrl+Nで名前順、Ctrl+Mで更新日時順、Ctrl+Tで種類順、Ctrl+Sでサイズ順。ちなみに、現在と同じ項目で並べ替えをすると逆順になる。

 まずXP向け。それ以前で動くかは知らん。

;--------------------------------------------------
; WindowsExplorer
;--------------------------------------------------
#IfWinActive ahk_class CabinetWClass
^n::PostMessage, 0x111, 30210, 0, , A
^s::PostMessage, 0x111, 30211, 0, , A
^t::PostMessage, 0x111, 30212, 0, , A
^m::PostMessage, 0x111, 30213, 0, , A

#IfWinActive ahk_class ExploreWClass
^n::PostMessage, 0x111, 30210, 0, , A
^s::PostMessage, 0x111, 30211, 0, , A
^t::PostMessage, 0x111, 30212, 0, , A
^m::PostMessage, 0x111, 30213, 0, , A

; デスクトップ
#IfWinActive ahk_class Progman
^n::PostMessage, 0x111, 30210, 0, , A
^s::PostMessage, 0x111, 30211, 0, , A
^t::PostMessage, 0x111, 30212, 0, , A
^m::PostMessage, 0x111, 30213, 0, , A

; ファイルダイアログ
#IfWinActive ahk_class #32770
^n::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30210, 0, , ahk_id %CntHwnd%
return
^s::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30211, 0, , ahk_id %CntHwnd%
return
^t::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30212, 0, , ahk_id %CntHwnd%
return
^m::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30213, 0, , ahk_id %CntHwnd%
return

 そして7向け。Vistaでも動く……んじゃないかな。

;--------------------------------------------------
; WindowsExplorer
;--------------------------------------------------
#IfWinActive ahk_class CabinetWClass
^n::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30211, 0, , ahk_id %CntHwnd%
return
^m::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30212, 0, , ahk_id %CntHwnd%
return
^t::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30213, 0, , ahk_id %CntHwnd%
return
^s::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30214, 0, , ahk_id %CntHwnd%
return

#IfWinActive ahk_class ExploreWClass
^n::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30211, 0, , ahk_id %CntHwnd%
return
^m::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30212, 0, , ahk_id %CntHwnd%
return
^t::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30213, 0, , ahk_id %CntHwnd%
return
^s::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30214, 0, , ahk_id %CntHwnd%
return

;デスクトップ
#IfWinActive ahk_class Progman
^n::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30211, 0, , ahk_id %CntHwnd%
return
^s::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30212, 0, , ahk_id %CntHwnd%
return
^t::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30213, 0, , ahk_id %CntHwnd%
return
^m::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30214, 0, , ahk_id %CntHwnd%
return

;ファイルダイアログ
#IfWinActive ahk_class #32770
^n::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30211, 0, , ahk_id %CntHwnd%
return
^m::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30212, 0, , ahk_id %CntHwnd%
return
^t::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30213, 0, , ahk_id %CntHwnd%
return
^s::
ControlGet, CntHwnd, hwnd, , SHELLDLL_DefView1, A
PostMessage, 0x111, 30214, 0, , ahk_id %CntHwnd%
return

 Vista以降はウィンドウ直接狙っても効果がなかったり、番号揺らいでたり、ややこしい。
 あと、WinGetでクラス名指定してもダメだったからControlGetでClassNN指定したけども、そういうもんなん? 正直7版は自信ない。まあウチでは動いてるからいいやー、っていう。XP版のファイルダイアログ操作も、7版を移植しただけなので同様。

 なお、いわば[右クリック>並べ替え]の操作を省略しているにすぎないので、「詳細表示の設定」から項目増やしたり順番いじるとずれる。

 Windows7のはグループ表示がONになってしまうことがあるようなので、グループ表示をOFFにするホットキーも作成。

^g::
ControlGet, CntHwnd, hwnd, , ShellTabWindowClass1, A
PostMessage, 0x111, 30210, 0, , ahk_id %CntHwnd%
return


[PR]
by lordnoesis | 2011-06-13 00:11 | Trackback | Comments(0)

Return of the VAIO

 "VAIOの復讐"が後に"VAIOの帰還"に訂正されます(お。

 という訳で修理に出してたVAIOが帰ってまいりました!

c0031643_16174024.jpg これが噂の日通のパソコンポかー。
 修理に出した時はじっくり見れなかったが、実際間近で触ってみると案外硬い。

 ……と、なにやらディスクメディアが入っていますね。
 心を入れ替えてロハでドライバCDでもつけてくれたんでしょうか?
 SONYはドライバがサイトで公開されてない上にCD有料。
 ――って、こりゃ私のDVD-Rじゃねぇかッ!! うう、入れっぱなしだったのか(恥)

 設置ついでに部屋の配線を見直すついでに軽く大掃除(何。)してしまいました。
 しかし……まあ、あたりまえなのだが、代わり映えしない(そりゃ。
 まあ代替機より動作がサクサクしてるのは嬉しいが。他のマシンはどれも1GHz以下だから厳しい物が。

 とりあえず今回の反省を踏まえ、ギコナビのログデータもNASに移す事にします。
 PSP生還スレ、3つも流れてた……。


[PR]
by lordnoesis | 2005-05-29 16:17 | Trackback | Comments(0)

VAIO修理中……。

 PC三号機こと通称「VAIO」を修理に出す時に2,3失敗した事がありました。

 1.自動ログインにしてあったので起動すればアレ気なデータが見放題(お。
 2.BIOSパスワードを設定してあったのだが、間違って連絡したために「正しいの教えろー」と電話がかかってきた(汗)
 3.Card Wirth関連のデータを移し忘れたので、暇でしょうがない>FFCC始めた。

 4.ギコナビのログを移し忘れた>PSP生還スレ流れてるだろうなぁ orz


[PR]
by lordnoesis | 2005-05-26 22:54 | Trackback | Comments(0)

VAIOの死んだ日。

 えー、昨日死亡したメインPC、PC三号機ことVAIOですが、電源ユニットについて検索してみたら公式サイトに情報がありました。

「バイオRZ」シリーズの一部で、ご使用中に電源が切れたり、起動時に電源が入らなくなる可能性があることを確認いたしました

 モロでした。
 どうりで型番調べても「燃えた」とか「交換部品が欲しい」とかしか引っかからないハズだ……(汗)
 早速電話したら明日取りに来るとの事でした。

 いやー、無償交換でよかったよかった
 ――って、欠陥品で悪かったんだ! orz


[PR]
by lordnoesis | 2005-05-24 10:42 | Trackback | Comments(0)

徹夜でクリア>睡眠>起床>死亡発覚

 ラグっちからPS2版AIRを、明池からPS2を借りました。そこまでして私にやらせたいかお前ら……。

 つーか、それとは一切関係なく、
 VAIOの電源ユニット死にました orz

 バチィ!とかアニメっぽい音がなるよぅ……。
 ハッ!? まさか始めは電源、次にドライバ、さらにHDD、最後にはBIOSでゴールっ!?(電源の時点で終わっとる。


[PR]
by lordnoesis | 2005-05-23 19:12 | Trackback | Comments(0)
ブログトップ | ファンになる