タグ:Opera ( 34 ) タグの人気記事

auのJAVA対応ケータイにOpera Miniを入れてみた。

 auのオープンアプリ/Ezアプリ(J)対応機種でOpera Miniを使う方法の備忘録。公式訪れるだけじゃ入れられないとか、そのままじゃQVGAで見難く醜いとか、入れても通信エラーが多発するといった、いくつかある壁の解決方法。Opera Miniに限らず、野良アプリのインストールに応用できる。
 Opera Miniの魅力は改めて説明するまでもないので割愛。知らない人は公式サイトに行ってみよう!


Opera Miniの準備

 まず、OperaのOpera Mini & Opera MobileからOpera Miniをダウンロード。対象環境がカッコ書きされていないものがJ2ME版。今回は「Opera Mini 6.5」を選択し、言語選択で「日本語」を選んでからjadとjarを保存する。
  Opera Mini 7.0リリースされたけど、CA007だと設定が保存されたり、されなかったりだなぁ。6.5のままでいいような。でも7.0はページ描画の高速化がウリのひとつなんだよなー。

 次に、jadの編集。といっても、テキストエディタで開きOAP-Screen-Size: WVGAと書き加えるだけ。機種がWVGA非対応の場合は適当に。詳しくは、auの公式資料(後述)を参照。なお、公式資料には「jadはUTF-8」とあるが、おそらく罠。s-jisでないと失敗した。

Opera Miniの公開

 次に、用意したjad jarをwebで公開する。jad対応アップローダーを利用する手もあるが、今回は04WebServerでサーバーを立てた。04WSは、個人用途であれば十二分。
 設定は適当に。MIMEタイプの設定だけは必須。「サーバ設定 > MIMEタイプの設定」を開き、text/vnd.sun.j2me.app-descriptorjadapplication/Java-archivejarの二行を加える。コメントに「右がMIME、左が拡張子」とあるがこれは誤り。
 次に、htmlを用意してjadへのリンクを張る。リンクは<a href="device:jam?http://example.com/opera-mini-6.5.26955-advanced-ja.jad">Opera Mini</a>のような書式で、jadへの絶対パスを書く。パスも適当に。

Opera Miniのインストール

 次に、ケータイの標準ブラウザ(not PCSV)でこのリンクを踏み、インストールを行う。これまでの作業に問題がなければインストールは完了する。

 最後に、Opera Mini上で「メニューキー > Oメニュー > 設定」を開いて設定を行う。オープンアプリ/Ezアプリ(J)は「同時接続数は1」という制限があるので、Opera Linkは基本的に使えない。また、「Socket非対応」なので「詳細設定」からプロトコルを「http」のみにしておく(しなくても自動で判断するが)。

 一応、簡単な使い方を説明しておくと、Opera Miniは方向キーでカーソルを動かす他に、「8462キーで大きく移動」「5で拡大」、「#や*に続けていずれかのキーでショートカット」という操作がある。ショートカットについては「メニューキー > Oメニュー > ヘルプ > ショートカット」から確認可能。


 適切な解像度で運用するOpera Miniの美しく、便利なことよ。まさにOpera最強現実

 はじめ、接続エラーが多発して困ってたのだが、同時接続数1なのにOpera Linkが接続してるのが原因の模様。どうしてもOL使いたい人は、OLが同期してる間は我慢するしかない。

 ちなみに、アプリはSDカードからインストールも可能なのだが(PRIVATE/AU_INOUT/OAP/にjad jarを配置し、「Ezアプリ設定 > SD内アプリ一覧」)、Operaは上手くいかんかった。成功するアプリもあるが、差がわからん。OAP-Backupあたりが関係してる?

KDDI au: 技術情報 > EZアプリ(J)


[PR]
by lordnoesis | 2012-04-06 21:21 | テクノロジ | Trackback | Comments(0)

AutoHotkey_Lで、Operaの起動を便利にしてみた。

 以前書いたOpera用AHKスクリプトの「起動時に最終セッションを退避」に「セッションをブックマークに変換」を合わせてみた。あと細かいミスも修正。

 このスクリプトを実行すると、Operaの最終(前回終了時の)セッションのタイトル一覧が表示され、セッションを退避するか問われる。YESにすると、セッションを現在日時で変名し、空のOperaが起動する。また、退避する場合、自動でセッションの内容をブックマークに変換することも可能。
 「前回、大量にタブ開いたまま終了したから起動がおっくうだなー」とか「最終セッション全部は必要ないなー」という場合に便利。自動変換に興味ない旧runOpera.ahkユーザーも、文字化けがなくなったので更新する価値はある、ような。

 使うには、以下のコードを適当に保存し、「SessionsPath」と「BookmarksPath」を埋めれば、最低限OK。初期設定ではセッションは自動変換されないし、bookmarks.adrへの書き込みも行われないので、安全を確認してから好みの設定にするよろし。
 書くべきパスはopera:about参照のこと。SessionsPathはファイル名いらないので注意。

 パスの確認を最初に行うように変更。失敗しても実害ないし、そもパス間違えるやつなんていないだろHAHAHA、と思っていたら、試験で存在しないパス入れたままなのを忘れてry

; --------- --------- --------- --------- ---------
; RunOpera.ahk
; --------- --------- --------- --------- ---------

#WinActivateForce

  SessionsPath := ""  ; セッションフォルダのフルパスを指定。末尾は"\"。
  BookmarksPath := ""  ; bookmarks.adrのフルパスを指定。

  AutoConvSW := 0  ; 最終セッションを退避させる場合、自動でブックマークに変換する設定。 0:変換しない。 1:変換する。
  ACMoveSW := 1  ; 自動変換(↑)したセッションを隔離する設定。 0:隔離しない。 1:隔離する。

  HisReadSW := 0  ; タブ履歴(タブで表示したページの履歴)の設定。 0:最新のみ読み込む。 1:すべて読み込む。
  WriteTrgSW := 0  ; ブックマーク情報を書き込む場所の設定。 0:セッションフォルダにテキストで保存。 1:bookmarks.adrに書き込む。

; --------- --------- --------- --------- ---------

  IfNotExist, %SessionsPath%
  {
    MsgBox, 48, セッションフォルダが見つかりません。`n%SessionsPath%
    Exit
  }
  If (1 == WriteTrgSW) {
    IfNotExist, %BookmarksPath%
    {
      MsgBox, 48, bookmarks.adrが見つかりません。`n%BookmarksPath%
      Exit
    }
  }

  IfExist, %SessionsPath%autosave.win
    GoSub, SessionAnalyze

  Run, C:\Program Files\Opera\Opera\opera.exe, , , OpPid
  OpTitle := "パスワード"
  WinWait, %OpTitle% ahk_pid %OpPid%, , 60
  If(0 != ErrorLevel)
    Exit
  WinActivate
  Sleep, 500
Exit

; --------- --------- --------- --------- ---------

SessionAnalyze:
  FileRead, OSession, *P65001 *t %SessionsPath%autosave.win
  If (0 != ErrorLevel) {
    MsgBox, 48, Sessionの読み込みに失敗しました。`n%SessionsPath%autosave.win
    Return
  }

  Idx := 0
  WinTitles := ""
  Loop {
    Idx := RegExMatch(OSession, "\[(\d+)history url\].+?count=(.*?)\n", $, Idx + 1)
    If (0 == Idx)
      Break
    WinNum := $1
    HisNum := $2 - 1
    HisTitle := GetHisTitle(OSession, WinNum, HisNum, Idx)
    WinTitles := WinTitles " " HisTitle "`n"
  }
  If("" == WinTitles)
    Return

  MsgBox, 259, 30秒後に通常起動します。, 起動時に最終セッションを退避しますか?`n`n◆最終セッションの内容◆`n%WinTitles%, 30
  IfMsgBox, Yes
  {
    TimeNum := A_Now
    BackupName := TimeNum ".win"
    Loop {
      FileMove, %SessionsPath%autosave.win, %SessionsPath%%BackupName%
      If(0 == ErrorLevel)
        Break
      BackupName := TimeNum "_" A_Index ".win"
    }
    If (1 == AutoConvSW)
      GoSub, SessionConvert
  }
  IfMsgBox, Cancel
    Exit
Return

; --------- --------- --------- --------- ---------

SessionConvert:
  If (1 == WriteTrgSW)
    FileCopy, %BookmarksPath%, %BookmarksPath%_%A_Now%

  CmdLine := SessionsPath BackupName
  SplitPath, CmdLine, , , , SessionName
  Result := "#FOLDER`n  NAME=[Session] " SessionName "`n`n"
  ResultBuf := Result

  Idx := 0
  Loop {
    Idx := RegExMatch(OSession, "\[(\d+)history url\].+?count=(.*?)\n", $, Idx + 1)
    If (0 == Idx)
      Break
    WinNum := $1
    HisNum := $2 - 1

    HisTitle := GetHisTitle(OSession, WinNum, HisNum, Idx)
    HisUrl := GetHisUrl(OSession, WinNum, HisNum, Idx)

    If (0 == HisReadSW) {  ; タブ履歴を無視する場合
      Result .= "#URL`n  NAME=" HisTitle "`n  URL=" HisUrl "`n`n"
      Continue
    }

    StringLen, HisNumLen, HisNum

    If (0 == HisNum) {
      Result .= "#URL`n  NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n  URL=" HisUrl "`n`n"
      Continue
    }
    Result .= "#FOLDER`n  NAME=" HisTitle "`n`n#URL`n  NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n  URL=" HisUrl "`n`n"

    Loop, %HisNum% {
      HisNum--
      HisTitle := GetHisTitle(OSession, WinNum, HisNum, Idx)
      HisUrl := GetHisUrl(OSession, WinNum, HisNum, Idx)
      Result .= "#URL`n  NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n  URL=" HisUrl "`n`n"
    }
    Result .= "-`n`n"
  }

  If (ResultBuf == Result)
    Return
  Result .= "-`n`n"

  If (1 == WriteTrgSW) {
    FileAppend, %Result%, %BookmarksPath%, CP65001
  } Else {
    FileDelete, %CmdLine%.txt
    FileAppend, %Result%, %CmdLine%.txt, CP65001
  }

  If (1 == ACMoveSW) {
    IfNotExist, %SessionsPath%AutoConv\
      FileCreateDir, %SessionsPath%AutoConv\
    FileMove, %CmdLine%, %SessionsPath%AutoConv\%BackupName%
    If (0 != ErrorLevel)
      MsgBox, 48, 変換済みセッションの移動に失敗しました。`n%SessionsPath%AutoConv\
  }
Return

; --------- --------- --------- --------- ---------

GetHisTitle(ByRef OSession, WinNum, HisNum, Idx){
  RegExMatch(OSession, "\[" WinNum "history title\].+?" HisNum "=(.*?)\n", $)
  Return $1
}

GetHisUrl(ByRef OSession, WinNum, HisNum, Idx){
  RegExMatch(OSession, "\[" WinNum "history url\].+?" HisNum "=(.*?)\n", $)
  Return $1
}

ZeroSupply(Num, Digit){
  StringLen, NumLen, Num
  LoopNum := Digit - NumLen
  Loop, %LoopNum%
    Num := "0" Num
  Return, Num
}

 余談だが、SnakeCaseもPascalCaseもCamelCaseもしっくりこなくて困る。いやPascalCaseでおおむね問題ないのだが、ifとかloopとかreturnみたいな単語が大文字だと違和感が。慣れか。


[PR]
by lordnoesis | 2012-02-09 19:25 | テクノロジ | Trackback | Comments(0)

AutoHotKey_Lで、Operaのセッションをブックマークに書き込んでみた。

 Operaのセッションを解析してブックマークに書き込むスクリプト。bookmarks.adrの仕様が不明瞭だったので、とりあえずテキストに書き出したのが前回。だがつい先日、実は最低限必要なのはNAMEとURLだけ(他はOperaの起動時に補完される)と知り、さっそくやってみた。

 以下のスクリプトを適当に保存し、"bookmarks.adr"のフルパスを書き込んだら準備完了。あとはセッションファイルを引数にして呼び出す(ドロップ可。複数ファイル対応)と、ブックマークに変換される。その後、Operaを起動すると数秒ののち、"[Session] セッションファイル名"というフォルダにセッションの内容が!

 ちょっといじって、スクリプト冒頭で挙動設定を可能にしてみた。デフォルトだと「タブ履歴無視」「プレーンテキストで保存」なので、いじってみるよろし。bookmarks.adrの指定も忘れないように。

; -------- --------- --------- --------- ---------
; OperaSession2Bookmarks.ahk
; -------- --------- --------- --------- ---------
  BookmarksPath := "C:\Program Files\Opera Next\profile\bookmarks.adr"  ; bookmarks.adrのフルパスを指定。
  HisSW := 0  ; タブの履歴(そのタブで表示したページの履歴)をどうするかの設定。 0:最後に表示したアドレスのみ読み込む。 1:すべて読み込む。
  WriteSW := 0  ; 書き込み先の設定。 0:セッションと同じ位置にプレーンテキストで保存。 1:bookmarks.adrに書き込む。

  If (1 == WriteSW) {
    IfNotExist, %BookmarksPath%
    {
      MsgBox, %BookmarksPath%が見つかりません。
      Exit
    }
    FileCopy, %BookmarksPath%, %BookmarksPath%_%A_Now%
  }

  Loop, %0%
  {
    CmdLineBuf := %A_Index%
    Loop %CmdLineBuf%, 1
      CmdLine := A_LoopFileLongPath
    FileRead, OSession, *P65001 *t %CmdLine%
    If (ErrorLevel) {
      MsgBox, Session File Read Error
      Exit
    }

    SplitPath, CmdLine, , , , SessionName
    Result := "#FOLDER`n  NAME=[Session] " SessionName "`n`n"
    Header := Result
    Idx := 0

    Loop
    {
      Idx := RegExMatch(OSession, "\[(\d+)history url\].+?count=(.*?)\n", $, idx + 1)
      If (0 == Idx)
        Break
      WinNum := $1
      HisNum := $2 - 1
      StringLen, HisNumLen, HisNum

      RegExMatch(OSession, "\[" WinNum "history title\].+?" HisNum "=(.*?)\n", $)
      HisTitle := $1
      RegExMatch(OSession, "\[" WinNum "history url\].+?" HisNum "=(.*?)\n", $)
      HisUrl := $1

      If (0 == HisSW) {  ; タブ履歴を無視する場合
        Result .= "#URL`n  NAME=" HisTitle "`n  URL=" HisUrl "`n`n"
        Continue
      }

      If (0 == HisNum) {
        Result .= "#URL`n  NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n  URL=" HisUrl "`n`n"
        Continue
      }

      Result .= "#FOLDER`n  NAME=" HisTitle "`n`n#URL`n  NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n  URL=" HisUrl "`n`n"

      Loop, %HisNum%
      {
        HisNum--
        RegExMatch(OSession, "\[" WinNum "history title\].+?" HisNum "=(.*?)\n", $)
        HisTitle := $1
        RegExMatch(OSession, "\[" WinNum "history url\].+?" HisNum "=(.*?)\n", $)
        HisUrl := $1
        Result .= "#URL`n  NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n  URL=" HisUrl "`n`n"
      }
      Result .= "-`n`n"
    }

    If (Header == Result)
      Continue
    Result .= "-`n`n"

    If (1 == WriteSW) {
      FileAppend, %Result%, %BookmarksPath%, CP65001  ; bookmarks.adrに直接書き込む
    } Else {
      FileDelete, %CmdLine%.txt  ; ↓のファイルがすでに存在していたら削除(やらないと追記)
      FileAppend, %Result%, %CmdLine%.txt, CP65001  ; セッションと同じ位置に書き出す
    }
  }
  MsgBox, Finish!
Return

ZeroSupply(Num, Digit){
  StringLen, NumLen, Num
  LoopNum := Digit - NumLen
  Loop, %LoopNum%
    Num := "0" Num
  Return, Num
}

 これで大量のタブを気軽に記録できる。あと、OperaLinkでセッション(だったもの)が共有できる副作用も。
 まさにすべてのOpera-erへの福音(えー。


[PR]
by lordnoesis | 2012-01-10 20:32 | テクノロジ | Trackback | Comments(0)

AutoHotKey_Lで、Operaのセッションをテキストに書きだしてみた。

 OperaのセッションファイルからURLとタイトルを抽出してプレーンテキストにするスクリプト。

 セッション溜め過ぎたので整理しようと思ったのだが、Operaでは確認も編集もできないという……。でもきっと世界の誰かが補助ツール作ってるに違いない!と思ったのだが見当たらず。なぜだ。Donutにすらお気に入りグループ編集ツールがあるというのに……。

 使い方は、セッションファイル(.win)のパスを引数にしてスクリプトを呼び出すだけ(スクリプトにドロップで可)。あとは勝手にセッションと同じ位置にテキストファイルが作られる。

  loop, %0%
  {
    CmdLineBuf := %A_Index%
    Loop %CmdLineBuf%, 1
      CmdLine := A_LoopFileLongPath

    FileRead, OSession, *P65001 *t %CmdLine%
    if (ErrorLevel)
    {
      msgbox, File Read Error
      Exit
    }

    WinNum := 2
    result :=
    loop
    {
      idx := RegExMatch(OSession, "\[" WinNum "history url\].+?count=(.*?)\n", $)
      if (0 == idx)
        break
      HisNum := $1 - 1

      RegExMatch(OSession, "\[" WinNum "history title\].+?" HisNum "=(.*?)\n", $)
      HisTitle := $1
      RegExMatch(OSession, "\[" WinNum "history url\].+?" HisNum "=(.*?)\n", $)
      HisUrl := $1
      Result = %Result%%HisTitle%`n%HisUrl%`n

      loop, %HisNum%
      {
        HisNum--
        RegExMatch(OSession, "\[" WinNum "history title\].+?" HisNum "=(.*?)\n", $)
        HisTitle := $1
        RegExMatch(OSession, "\[" WinNum "history url\].+?" HisNum "=(.*?)\n", $)
        HisUrl := $1
        Result = %Result%  %HisTitle%`n  %HisUrl%`n
      }
      Result = %Result%`n`n
      WinNum++
    }
    if (""==Result)
      Continue
    FileDelete, %CmdLine%.txt
    FileAppend, %Result%, %CmdLine%.txt
  }

 今回使った正規表現を移植すればAutoHotKey_Lで、Operaの前回セッションを確認・退避できるようにしてみた。2のスクリプトもUTF-8対応になるが、別に困ってないのでいいやっていう。


[PR]
by lordnoesis | 2011-10-28 23:43 | テクノロジ | Trackback(1) | Comments(0)

Operaでエキブロの「プレビュー」が使えないと思ったら、設定ミスだった。

 Operaでエキサイトブログの投稿画面にある「プレビュー」が使えないと思ったら、JSをブロックしていたせいだった。
 検証用Operaでは利用可能なために発覚したもので、原因はコンテンツブロックではなく、拡張「ContentBlockHelper」のURLフィルタだった。コンテンツブロックより簡単に登録できてしまうため、注意が必要である。

 Operaのスタンドアロンインストール(ファイルを分散させない、リムーバブルドライブでの持ち運びを想定したモード)はこういう時にも便利やね。


[PR]
by lordnoesis | 2011-08-26 11:24 | テクノロジ | Trackback | Comments(0)

AutoHotKey_Lで、Operaの前回セッションを確認・退避できるようにしてみた。2

 前回のとほぼ同じもの。Opera11.50は、起動時にマスターパスワード入力ダイアログがアクティブになるようになったので、その辺を修正しただけ。アクティブになってるけど、入力欄にフォーカスあたってないようなので、Tabを1回。違いは行差分にして3行。

#WinActivateForce
  SessionsPath := "セッション保存先のパス"
  IniRead, WinCnt, %SessionsPath%autosave.win, session, window count
  if("ERROR" != WinCnt)
  {
    FileRead, SessionBuf, %SessionsPath%autosave.win
    FileDelete, %SessionsPath%autosaveA.win
    FileAppend, %SessionBuf%, %SessionsPath%autosaveA.win, CP932
    GoSub, SessionAnalyze
  }

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

  Send, {Tab}
Exit


SessionAnalyze:
  loop, %WinCnt%
  {
    IniRead, HisCnt, %SessionsPath%autosaveA.win, %A_index%history title, count
    if("ERROR" == HisCnt)
      Continue
    HisCnt--
    IniRead, WinTitle, %SessionsPath%autosaveA.win, %A_index%history title, %HisCnt%
    WinTitles := WinTitles " " 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

 そもそもOpera自体が起動時にアクティブとは限らないので、やっぱり強制的にアクティブにするように少し変更。結果として11.50関係なくなったはず。

 11.60では入力欄にフォーカス当たってるので、Opera起動後の"Send, {Tab}"は必要ない。


[PR]
by lordnoesis | 2011-06-29 20:29 | テクノロジ | Trackback | Comments(0)

AutoHotKey_Lで、Operaの前回セッションを確認・退避できるようにしてみた。

 ふとAHK_Lに乗り換えたら、文字コード関連で動かなくなった「AutoHotKeyで、Operaの起動をより便利にしてみた。」のAHK_L版。
 機能的には変わってない。

#WinActivateForce
  SessionsPath := "セッション保存先のパス"
  IniRead, WinCnt, %SessionsPath%autosave.win, session, window count
  if("ERROR" != WinCnt)
  {
    FileRead, SessionBuf, %SessionsPath%autosave.win
    FileDelete, %SessionsPath%autosaveA.win
    FileAppend, %SessionBuf%, %SessionsPath%autosaveA.win, CP932
    GoSub, SessionAnalyze
  }

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


SessionAnalyze:
  loop, %WinCnt%
  {
    IniRead, HisCnt, %SessionsPath%autosaveA.win, %A_index%history title, count
    if("ERROR" == HisCnt)
      Continue
    HisCnt--
    IniRead, WinTitle, %SessionsPath%autosaveA.win, %A_index%history title, %HisCnt%
    WinTitles := WinTitles " " 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

 IniReadはSJISしか読み込めないようなので、自動保存セッションをSJISに変換するという力技。文字化けするかもしれんが気にすんな!


[PR]
by lordnoesis | 2011-06-20 17:50 | テクノロジ | Trackback | Comments(0)

ブラウザトラブル解決!

 ここしばらく、ChromeとOperaに不可解なトラブルが相次いで起きたのだが、それらが解決できたので解決法を書いておこうと思う。
 なお、以下の問題は現行PC(Windows7環境)で起きている。

Operaでエキブロの記事投稿・編集画面がおかしい

 投稿日時が空欄になるなど。

 原因はUserJSのフォルダにあるファイル。UserJSはUniteアプリの「UJS Manager」で管理していたんだが、どうもファイル名によっては無視されるらしく、意図しないUserJSがまだ残っていた。うっかり。でも、UserJSのON/OFF切り替えるカスタムボタンでUserJSが原因かどうか検証済みだったんだけどなあ。

Chromeが正常に動作しない

 Aeroが有効でもXP以前の青いウィンドウが起動し、操作を受け付けない。一時的な対処方法としては互換モードをWindows7に設定することだが、確実ではなかった。

 原因はChromeを起動するのに使っているランチャーが互換モードで動いていたこと。
 互換モードのソフトから呼び出されたソフトも互換モードを引き継ぐ仕様だったのか……。うっかり。

Operaの一部挙動がおかしい

 "保存"や"開く"などのコモンダイアログを表示すると落ちる。Ctrl+クリックやCtrl+Sやメニュー、設定画面からなど、どの方法で呼び出してもダメ。他にも、OperaからChromeを呼び出すと前述の青いウィンドウのトラブルに遭遇。

 原因は、Operaを呼び出すのに使っていたAHKが互換モードで動いていたこと。
 ってまたかよ進歩ねえぇぇぇぇ!! というか「OperaからChrome呼び出したら互換モード」って時点で気づけよ。うっかりってレベルじゃねーぞ!

結論

 互換モードには気をつけよう。「いじくるつくーる」あたりで互換モード設定のレジストリを確認できるので活用しよう。


[PR]
by lordnoesis | 2011-05-25 22:38 | テクノロジ | Trackback | Comments(0)

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)

AutoHotKeyで、Operaのマスターパスワード入力ダイアログをアクティブにしてみた。

 Operaの設定ファイルは暗号化されているが、解読は比較的容易である。そこで、「マスターパスワード(以下MP)」の出番となる。MPを設定しておけば、Wandのパスワード情報は基本的には総当たりでしか解除できなくなる。まあ、総当たり対策にMPはできるだけ長くしておくべきだろう。

 そのMPをいつ入力するのかというと、これはOperaを起動してから最初にWandを利用する時だ。つまり、まずどこかのサイトを開いてから――と思うかもしれないが、実は設定によってはOpera起動と同時に要求される。OperaLinkが起動と同時に同期をとるためだ。

 ――これがもう、ウザいのなんのって。いやMPの入力はいい。問題は、MP入力ダイアログがメインウィンドウより先に出現することだ。つまり、「Opera起動 --> 入力ダイアログ出現 --> 入力を試みる --> メインウィンドウ出現・アクティブ化 --> イラッ☆」という流れ。そして入力ダイアログは、手動でアクティブにしなければならない。わぁウザい。

 というわけで今回のは、Operaを起動し、メインウィンドウが出現したあとで改めてマスターパスワード入力ダイアログをアクティブにするAHKスクリプト。これでもうイライラとはおさらばさ!

#WinActivateForce
  run, C:\Program Files\Opera\opera.exe, , , op_pid
  op_title := "パスワード"
  WinWaitActive, %op_title% ahk_pid %op_pid%, , 10
  if(ErrorLevel != 0)
    Exit
  WinWaitNotActive, %op_title% ahk_pid %op_pid%, , 10
  WinActivate, %op_title% ahk_pid %op_pid%, , 10
Exit

 あとはこれを"run_Opera.ahk"とか適当な名前で保存して、実行するだけだ。

 おっと、けっして「Send, MasterPassword」とか書いちゃぁダメだぞ、L.Nとの約束だ!


[PR]
by lordnoesis | 2011-04-21 19:38 | テクノロジ | Trackback | Comments(0)
ブログトップ | ファンになる