AutoHotKeyで、Operaの起動をより便利にしてみた。

 マスターパスワード入力ダイアログをアクティブにしてみたの発展版。

 前回のOpera終了時に大量のタブ開いてたけど、そのセッションは残しつつ、まっさらなOperaを起動したいなーと思ったのでやってみた。はじめStringGetPosとStringMidでセッションファイル解析してたんだが、よく考えたら標準INI形式だったんでIniReadでよかったっつー……。

 「はい」で普通に起動、「いいえ」で最終セッションを現在日時でリネーム。起動時のマスターパスワード入力ダイアログをアクティブにする機能もあるよ! AHKスクリプトにマスターパスワードとか記入するなよ! 絶対するなよ!

#WinActivateForce
  SessionsPath := "セッション保存先のパス"

  IniRead, WinCnt, %SessionsPath%autosave.win, session, window count
  if("ERROR" != WinCnt)
    GoSub, SessionAnalyze

  run, Opera.exeのパス, , , OpPid
  OpTitle := "パスワード"
  WinWaitActive, %OpTitle% ahk_pid %OpPid%, , 20
  if(ErrorLevel != 0)
    Exit
  WinWaitNotActive, %OpTitle% ahk_pid %OpPid%, , 20
  WinActivate, %OpTitle% ahk_pid %OpPid%, , 20
Exit


SessionAnalyze:
  loop, %WinCnt%
  {
    IniRead, HisCnt, %SessionsPath%autosave.win, %A_Index%history title, count
    if("ERROR" == HisCnt)
      Continue
    HisCnt--
    IniRead, WinTitle, %SessionsPath%autosave.win, %A_Index%history title, %HisCnt%
    WinTitles := WinTitles " " U2A(WinTitle) "`n"
  }
  if("" == WinTitles)
    return

  MsgBox, 3, 表示後30秒で強制的に起動します。, 最終セッションを退避せずに起動しますか?`n`n◆最終セッションの内容◆`n%WinTitles%, 30
  ifMsgBox, No
  {
    TimeNum := A_Now
    FileMove, %SessionsPath%autosave.win, %SessionsPath%%TimeNum%.win
    if(0 < ErrorLevel)
    loop
    {
      FileMove, %SessionsPath%autosave.win, %SessionsPath%%TimeNum%_%A_Index%.win
      if(0 == ErrorLevel)
        Break
    }
  }
  ifMsgBox, Cancel
    Exit
return


; ↓encutil.ahk(http://yak3.myhome.cx:8080/junks/index.html#afx.afxscript)由来
U2W(ByRef result, str)
{
  len := DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0, "Str", str, "Int", -1, "UInt", 0, "UInt", 0)
  If len > 0
  {
    VarSetCapacity(result, len * 2)
    DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0, "Str", str, "Int", -1, "Str", result, "UInt", len)
  }
}

W2A(ByRef str)
{
  len := DllCall("WideCharToMultiByte", "UInt", 0, "UInt", 0, "Str", str, "Int", -1, "UInt", 0, "UInt", 0, "UInt", 0, "UInt", 0)
  If len > 0
  {
    VarSetCapacity(result, len)
    len := DllCall("WideCharToMultiByte", "UInt", 0, "UInt", 0, "Str", str, "Int", -1, "Str", result, "UInt", len, "UInt", 0, "UInt", 0)
  }
  return result
}

U2A(str)
{
  U2W(t, str)
  result := W2A(t)
  return result
}

 これをrun_opera.ahkとか適当に保存して実行するだけ。

 セッション保存先のパスは「ヘルプ > Operaについて」の「保存されたセッション」でわかる(ファイル名までは書かないように)。
 AHKのダメ文字対策はしてない。起きてもダイアログの表示が欠けるだけだから気にすんな!(えー。


 おまけ。

#IfWinActive ahk_class OperaWindowClass

  F1::^w
  F2::^+Tab
  F3::^Tab


[PR]
by lordnoesis | 2011-05-21 13:59 | テクノロジ | Trackback(1) | Comments(0)
トラックバックURL : http://poimono.exblog.jp/tb/16358599
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Tracked from 名称未定っぽい。 at 2011-06-20 17:51
タイトル : AutoHotKey_Lで、Operaの前回セッションを..
 ふとAHK_Lに乗り換えたら、文字コード関連で動かなくなった「AutoHotKeyで、Operaの起動をより便利にしてみた。」のAHK_L版。  機能的には変わってない。#WinActivateForce &nbsp;&nbsp;SessionsPath := "C:\Documents and Settings\ln\AppData\Roaming\Opera\Opera\sessions\" &nbsp;&nbsp;IniRead, WinCnt, %SessionsPath%autosa...... more
名前
URL
画像認証
削除用パスワード

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

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