; Ink_open2.ahk ; 前回(http://otzt.nobody.jp/etc/ahk_txt/Ink_open.ahk.txt)を全面修正しました。 ; 現在のファイルがBlurなどを大量に使用していて描画に時間が掛かる場合、 ; 200ms程度のDelayでは全然足りてなかった_orz ; (もしアレを使って大切なファイルが落ちちゃった方がいたらゴメンナサイ) ; あと、タイトルバーが8.3形式の短いファイル名になるのを修正。 ; フルパスにスペースが含まれていると開けなかったのも修正。 ; ついでに複数のファイルをドロップしても開けるようにしてみました。 ; %USERPROFILE%の自動バックアップファイルもアイコンにドロップして開けます。 ; ▽ 概要 ; inkscape.exeプロセスの多重起動を抑止します(ファイル間オブジェクトコピーが可能になる)。 ; AutoHotkeyインストール時に、"Enable drag & drop onto scripts" を有効に ; しないと動作しません(windows95/98では無効)。 ; ※AutoHotkeyのインストールが不要な実行ファイル版は(http://otzt.nobody.jp/etc/ink_open2.7z) ; ファイルを開いた後は常駐せずに終了します。 ; ▽ 使い方 ; Ink_open.ahkをinkscape.exeと同じ場所に置き、関連付けしたい場合はしてください。 ; 例) "C:\Program Files\AutoHotkey\AutoHotkey.exe" "C:\Program Files\Inkscape\Ink_open2.ahk" ; ショートカットを"%USERPROFILE%\SendTo"に入れても実行できます。 ; ショートカットアイコンにファイルをドロップでInkscapeを起動して開き、既にInkscapeが起動 ; していれば、常に[開くファイルを選択]ダイアログからファイルを開きます(同じPIDで起動)。 ; ファイルをドロップせずにショートカットをダブルクリックすれば、普通にInkscapeを起動します。 ; 「開くファイルを選択」という文字列は、Inkscapeのバージョンによって異なる可能性が ; あるのでご注意ください(同じバージョンでも開発版によって異なる場合もあります)。 ; 同ダイアログのロケーションバー(フルパス入力欄)を隠しているとファイルオープンに失敗 ; します(最後に使用した設定)。 ; ▽ 仕様 ; 遅延時間は、前回よりも長めに設定してあります。高速なPCをお持ちの方は重く感じるかも。 ; ファイル容量によって遅延時間を調整するようにしました。下記参照。 ; ※ 1000KB以上のファイルを開く場合、16秒掛かります。 #NoTrayIcon ClipSaved := ClipboardAll Process, Exist, inkscape.exe If ErrorLevel <> 0 { Loop %0%{ GivenPath := %A_Index% Loop %GivenPath%{ LongPath = %A_LoopFileLongPath% WinActivate, ahk_pid %ErrorLevel% file_open() delay() } } } else{ Loop %0%{ GivenPath := %A_Index% If (A_Index = 1) { Loop %GivenPath%{ FirstFile = %A_LoopFileLongPath% EnvSet, PATH, %A_ScriptDir%`;%A_ScriptDir%\python`;%PATH% ;EnvSet, LANG, en EnvSet, TEMP, C:\Temp Run, inkscape.exe "%FirstFile%", %A_ScriptDir% FileGetSize, size, %FirstFile%, K delay() Sleep, 3000 FileSpec = %FirstFile% SplitPath, FileSpec, OutFileName } continue } Loop %GivenPath%{ LongPath = %A_LoopFileLongPath% WinWait, %OutFileName% - Inkscape file_open() delay() } } If %0% = 0 { EnvSet, PATH, %A_ScriptDir%`;%A_ScriptDir%\python`;%PATH% ;EnvSet, LANG, en EnvSet, TEMP, C:\Temp Run, inkscape.exe, %A_ScriptDir% } } Clipboard := ClipSaved ClipSaved = Return ; [開くファイルを選択]ダイアログにフルパスを送る file_open(){ global Sleep, 500 Send, ^o WinWaitActive, 開くファイルを選択 ;WinWaitActive, Select file to open Clipboard = %LongPath% ClipWait Send, ^v Sleep, 500 Send, {enter} FileGetSize, size, %LongPath%, K } ; ファイルサイズ(KB)で遅延時間を調整 delay(){ global If (size = 0) ExitApp If ((size < 200) && (size >= 1)) Sleep, 500 If ((size < 500) && (size >= 200)) Sleep, 2000 If ((size < 1000) && (size >= 500)) Sleep, 8000 If (size >= 1000) Sleep, 16000 }