AutoHotKey_Lで、EverythingSearchのカラムとウィンドウ幅を自動調整してみた。

 一般的なListView等には「Ctrl+NumpadAdd(テンキーのプラス)」でカラム(列)幅の自動調整を行うショートカットが存在するらしく、Everythingも例外ではない。だが当然ながらこの機能はカラム幅を変更するだけで、ウィンドウサイズはそのままだ。ゆえに、普段はウィンドウを小さくしている場合、面倒なことになる。
 Everythingの1.3βにはウィンドウサイズの変更ショートカットがあり、「自動」もあるのだが、この機能はマルチモニタ環境を考慮しないため、ひとつのモニタに収まりきらない可能性がある。そもそも二回もショートカット使うというのがスマートでない。自動化すべきである。

 というわけで、Everything上でCtrl+NumpadAddすると、カラム幅を自動調節したのち、それがすべて見渡せるようにウィンドウ幅も自動調節する(ウィンドウのあるモニタ幅が上限)AHKスクリプト書いた。少し変えればEverything以外にも使えるかも?

;--------------------------------------------------------------------------------------
; Everything
;--------------------------------------------------------------------------------------
#IfWinActive ahk_class ahk_class EVERYTHING

$^NumpadAdd::
  ACtrl :=
  while ("EVERYTHING_LISTVIEW1" != ACtrl) {
    ControlFocus, EVERYTHING_LISTVIEW1
    ControlGetFocus, ACtrl
  }
  Send, ^{NumpadAdd}
F12::
  WinGetPos, WinX, WinY, WinW, WinH
  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 (MntLeft < WinX)
    AftWinX := WinX
  else
    AftWinX := MntLeft
  AftWinW := MntRight - AftWinX
  
  Sleep, 50
  SysGet, FW, 32
  SysGet, VSW, 2
  ControlGet, Hwnd, Hwnd, , EVERYTHING_LISTVIEW1
  GetScrollInfoAll(Hwnd, SB_HORZ, , nMax)
  AftWinW2 := nMax + VSW + FW * 2 + 1
  if (AftWinW > AftWinW2)
    AftWinW := AftWinW2
  
  WinMove, , , %AftWinX%, , %AftWinW%
return

; https://sites.google.com/site/agkh6mze/strage 窓調査.ahk
GetScrollInfoAll(hwnd, type, ByRef nMin="", ByRef nMax="", ByRef nPage="", ByRef nPos="", ByRef nTrackPos="") {
    VarSetCapacity(SCROLLINFO, 7*4, 0x00)
    NumPut(28, SCROLLINFO, 0, "Int")
    NumPut(0x17, SCROLLINFO, 4, "Int") ; SIF_RANGE & SIF_PAGE & SIF_POS & SIF_TRACKPOS = 0x17
    nMin:="", nMax:="", nPage:="", nPos:="", nTrackPos:=""
    if (!DllCall("user32.dll\GetScrollInfo", "UInt", hwnd, "Int",type, "Ptr", &SCROLLINFO, "Int"))
      Return false
    nMin := NumGet(SCROLLINFO, 8, "Int")
    nMax := NumGet(SCROLLINFO, 12, "Int")
    nPage := NumGet(SCROLLINFO, 16, "Int")
    nPos := NumGet(SCROLLINFO, 20, "Int")
    nTrackPos := NumGet(SCROLLINFO, 24, "Int")
    Return true
}

 横スクロールバーの範囲を取得して、ウィンドウサイズをそれ+縦スクロールバーの幅に拡縮してるだけ。

 たまにちゃんと働かんことがあるのだが、何度か繰り返す運用でカバー。


[PR]
by lordnoesis | 2013-05-21 19:41 | テクノロジ | Trackback | Comments(0)
トラックバックURL : http://poimono.exblog.jp/tb/20243619
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
名前
URL
画像認証
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

ブログトップ | ファンになる