AutoHotKey_Lで、マンガミーヤCEを便利にしてみた&「sz7」の読み込みに対応させたかった……。

 以前書いたマンガミーヤCE向けの「ホイールによるタブ移動」と「表示している書庫/画像のパス保存≒タブセッション保存」をクリンナップしつつ、パス保存で作ったパスリストの読み込み機能も実装してみた。

 あと、基本的なキー設定をすべてAHKでメニューID叩いて実現してみた。Win7だとキーカスタマイズができない問題があって、いちいちVMWareでXPを起動するのが面倒だったので、もう全部AHKでいいじゃん!みたいな。キー割り当てはソースを見れ。
 なお上下キーはページ移動だが、押しっぱなしにした場合の移動を、キーリピートに頼らず実現している(キーリピートだと早すぎる)。二連打でリミッター開放。

;--------------------------------------------------------------------------------------
; マンガミーヤCE MangaMeeyaCW
;--------------------------------------------------------------------------------------
#IfWinActive ahk_class MainFrameDockWindow

MCE_MenuRepeat(MenuID) {
  PostMessage, 0x111, %MenuID%, 0, , A
  RegExMatch(A_ThisHotkey, "(\w+)", $)
  if (A_PriorHotkey == A_ThisHotkey ) && (150 > A_TimeSincePriorHotkey) {
    TipView("Turbo")
    WaitTime := 1
  } else {
    WaitTime := 100
  }
  KeyWait, %$1%, T0.5
  if ErrorLevel
    while GetKeyState($1, "P") {
      PostMessage, 0x111, %MenuID%, 0, , A
      Sleep, %WaitTime%
    }
  TipView("")
}


WheelUp::  ; タブバー上ならタブ移動
  MouseGetPos, , , , Ctrl
  if Ctrl
    PostMessage, 0x111, 20128, 0, , A
  else
    Send, ^+{Tab}
return

WheelDown::  ; タブバー上ならタブ移動
  MouseGetPos, , , , Ctrl
  if Ctrl
    PostMessage, 0x111, 20127, 0, , A
  else
    Send, ^{Tab}
return

Up::MCE_MenuRepeat("20092")  ; 戻る
Down::MCE_MenuRepeat("20091")  ; 進む

left::
Numpad1::
  send, ^+{Tab}  ; 右のタブ(ビューウィンドウ)
return

right::
Numpad3::
  send, ^{Tab}  ; 左のタブ(ビューウィンドウ)
return

^left::
Numpad4::
  PostMessage, 0x111, 20093, 0, , A  ; 1p進む
return

^right::
Numpad6::
  PostMessage, 0x111, 20094, 0, , A  ; 1p戻る
return

Numpad0::PostMessage, 0x111, 20151, 0, , A  ; 新規ビューウィンドウ

NumpadDot::PostMessage, 0x111, 20170, 0, , A  ; 画像情報表示

Space::  ; 見開き切替(1p/2p/自動見開き)
  MMCESW++
  if (1 == MMCESW) {
    PostMessage, 0x111, 20041, 0, , A
    TipView("1p")
  } else if (2 == MMCESW) {
    PostMessage, 0x111, 20042, 0, , A
    TipView("2p")
  } else {
    PostMessage, 0x111, 20044, 0, , A
    TipView("Auto")
    MMCESW := 0
  }
return

s::  ; 表示画像のパスをリストに保存(書庫内パス対応)
w::  ; パス保存後、タブ移動
  WinGet, AWinID, ID, A
  if (PreAWinID != AWinID)
    Prefix := A_Now
  PreAWinID := AWinID

  PostMessage, 0x111, 20151, 0, , A
  Sleep, 100
  PostMessage, 0x111, 20151, 0, , A

  WinGetText, WinTxt, A
  RegExMatch(WinTxt, "sJS)(?:([A-Z]:\\[\S ]+).*((?1))|((?1)))", $)
  if $3
    FileAppend, %$3%`n, MCE_%Prefix%.txt
  else
    FileAppend, %$1%`n%$2%`n, MCE_%Prefix%.txt
  SplashView($1 $3 "`n" $2)

  IfWinNotExist, MCE_%Prefix%.txt
    Run, MCE_%Prefix%.txt

  if ("w" == A_ThisLabel)
    Send, ^{Tab}
return

l::
  IfWinActive, A
  MsgBox, 262179, MangaMeeyaCEでパスリストを開く, クリップボードをパスリストと見なして開きますか?`n`n「いいえ」を選択した場合、パスリスト選択ダイアログを開きます。
  
  IfMsgBox, Cancel
    return
  IfMsgBox, Yes
    PathList := Clipboard
  IfMsgBox, No
  {
    FileSelectFile, ListPath, 3, .\, パスリストを開く, *.txt; *.sz7
    if !ListPath
      return
    FileRead, PathList, *t *P932 %ListPath%
    SplitPath, ListPath, , , ListExt
  }
  if !PathList
    return
  
  WinGet, MCE_PID, PID
  wmi := ComObjGet("winmgmts:")
  queryEnum := wmi.ExecQuery(""
    . "Select * from Win32_Process where ProcessId=" . MCE_PID)
    ._NewEnum()
  if queryEnum[process] {
    RegExMatch(process.CommandLine, """?([^""]+|\S+)""?", $)
    MCE_Path := $1
  }
  wmi := queryEnum := process := ""
  
  if ("sz7" == ListExt)
    MCE2sz7(PathList, MCE_Path)
  else {
    Loop, Parse, PathList, `n, %A_Space%%A_Tab%
    {
      Run, %MCE_Path% "%A_LoopField%"
      Sleep, 100
    }
  }
return

MCE2sz7(PathList, TrgPath, TrgHwnd = 0) {  ; ※sz7疑似展開機能は書庫内パス対応不可能
  if !TrgHwnd
    TrgHwnd := WinExist()
  
  Run, %TrgPath% "Dummy"
  Sleep, 100
  
  Loop, Parse, PathList, `n, \%A_Space%%A_Tab%
  {
    FileGetAttrib, FileAttrib, %A_LoopField%
    IfInString, FileAttrib, D  ; フォルダなら無視
      continue
    if (PrePath == A_LoopField)  ; ひとつ前と同じなら無視
      continue
    PrePath := A_LoopField
    
    if FileExist(A_LoopField) {  ; 実在するパス
      DropFiles(TrgHwnd, A_LoopField)
      Cnt++
    }
  }
  return, Cnt
}

 ソースみればわかるが、以前も作成スクリプトを書いたりしてたsz7の読み込みに、疑似的に対応してみた。というか、本当はコレがメイン。
 パスリスト読み込みは「n個のパスをn個のタブで開く機能」だが、sz7読み込みは「複数のパスをひとつのタブに開く機能」。ただし書庫内パスには非対応。CEの対応ファイルが"実在"していないとならない。

 CEはSusieプラグイン非対応なのでaxpathlist2.spiが使えないが、DnDの仕様をうまく利用すればいけるんじゃね?と思いやってみたが、「書庫はDnDでもリスト追加でなく新規に開く」「無理に書庫内パスを複数渡しても、読み込みエラー」という仕様の前に敗れ去る。無念。
 冷静に考えると(今時はメモリも有り余ってるのだし)、axpathlist2.spi入れた本家マンガミーヤを複数開いて、疑似的にタブ化すればいいよねっていう……。





オマケという名の夢の跡。

 断念したsz7疑似展開で使っていた、書庫内パス関連の関数。あと、マンガミーヤCEのメニューIDのてきとーなメモ。

CorrArcPath(TrgPath) {
  ArcPath := GetArcPath(TrgPath)
  if ErrorLevel
    return, ArcPath
  StringReplace, InternPath, TrgPath, %ArcPath%
  StringReplace, InternPath, InternPath, \, /, 1
  return, ArcPath "\" RegExReplace(InternPath, "^[\/]")
}

GetArcPath(TrgPath) {
  if FileExist(TrgPath) {  ; 実在するパス
    ErrorLevel := 1
    return, TrgPath
  }
  StringReplace, TrgPath, TrgPath, /, \, 1
  Loop {
    SplitPath, TrgPath, , TrgPath
    StringLen, Cnt, TrgPath
    if (3 > Cnt) {  ; 実体を発見できなかったら
      ErrorLevel := 0
      return
    }
    Attrib := FileExist(TrgPath)
    if Attrib  ; 実在すれば
      IfNotInString, Attrib, D  ; フォルダでなければ
        break
  }
  ErrorLevel := 0
  return, TrgPath
}

20001 ファイル開く
02 フォルダ開く
03 URL
04 保存
05 閉じる

11 設定ファイル1読み込み

20 設定10読み込み

30 設定10保存

32 終了

34 ブックマーク画面
35 保存設定
36 jpeg?保存

41 見開き1p
42 見開き2p
44 見開き自動

47 自動表示設定

58
59 サムネイルモード
60 エクスプローラモード

63 サムネ設定
64 エクスプローラ設定
65 フルスクリーン
66 ルーペ

71 倍率固定
72
73 ウィンドウサイズ

77 指定スケール設定
78 指定スケール

81 拡縮アルゴリズム

89 ?フリーズ

91 進む
92 戻る
93 1p進む
94 1p戻る
95 指定ページ(1)進む
96 〃戻る
97 指定ページ(2)
98 〃
99 指定ページ(3)
100 〃
101 Home
102 End
103 指定ページ移動

127 進む?
128 戻る?

151 画像情報表示

159 フォルダツリー
160 ファイルリスト
169 次のビューウィンドウ
170 新規ビューウィンドウ

176 カスタマイズ
177 環境設定
178 コンテキストメニュー表示

171 キャッシュ
172 先読み
173 エフェクト

181 キャッシュ情報
182 バージョン情報

185 回転90
186 回転0
187 回転90
188 回転180
189 回転270
190 回転設定
191 クリッピング

193 明るさ

195 シャープネス

197 リサイズ

201 ソート>パス
202 ソート>パス逆

217 ソート>ランダム


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

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

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