MediaCoderのワナ

エンコードしながらうたた寝してしていたら、「募金してください」的なポップアップが表示されてた。ただそれが午前4時のことで、寝起きでボーッとしていたので、よく読む前に「あとで」的なボタンを押してた。
あれは何だったのだろう、と思ってググってみたら、どうもあのポップアップが表示されている間はエンコードが止まる仕様になっているらしい。表示されてから1時間が経過するとtime-outとなり、再びエンコードが続行されるらしい。僕が見たときは残り20分と表示されていたので、20分以内に押さないと中止します、の意かと思って焦ってlaterを押してしまったのだった。
どのタイミングでポップアップが表示されるのかはわかりませんが、これは非常に煩わしい。まさかこんなところで1時間lossしてしまうだなんて。
まあ僕ってばもう大人ですから、じゃあdonateしてしまうか、と思ったのですが、20ダラ寄付しないことにはあのメッセージは消えないそうです。円高とはいえ、結構しますね。まあ非常にいいソフトではあるんですけれど……。ちょっと……。せめて、千円以内位に、して貰えませんかね……。
ということでどうにか無料で解決出来ないか考えてみます。ポップアップ監視して、laterボタンを押すだけなので、マウスジェスチャに使っているAutoHotkeyで一つ簡単に出来ないかな、なーんて。後でやります。later.


#追記
できたお。

#Persistent

myFunc := RegisterCallback("WinActivateHandler")

myHook := DllCall("SetWinEventHook"
, "UInt", 0x00000003 ; eventMin : EVENT_SYSTEM_FOREGROUND
, "UInt", 0x00000003 ; eventMax : EVENT_SYSTEM_FOREGROUND
, "UInt", 0 ; hModule : self
, "UInt", myFunc ; hWinEventProc :
, "UInt", 0 ; idProcess : All process
, "UInt", 0 ; idThread : All threads
, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
, "UInt")

WinActivateHandler(hWinEventHook, event, hwnd, idObject, idChild, thread, time) {
WinGetTitle, title, ahk_id %hwnd%
WinGetClass, class, ahk_id %hwnd%
Tooltip, 「%title% ahk_class %class%」がアクティブになった
}

http://sites.google.com/site/agkh6mze/howto/winevent

一定時間ごとに監視しようかなーと思ってたけど、なにやらwindowsのイベントをdllが拾ってワッホイということらしい。そういうの全くわからないんですが、ウィンドウのフォーカスが移ると「アクティブになった」とツールチップが表示されるという神サンプルがあったので、tooltipのところを、ポップアップのタイトルにContinue inって文字列が入ってたらlaterを押す、という風に書き換えたら即死だった。まさかの一行書き換えでfinishです。ありがとうございました。


#追記
と思ったら全然うまくいってなかった。これもまたよくある話……。
仕方が無いので、当初の予定通り、一定時間ごとに監視することにしました。そこはかとなくアホっぽい。どうせ高性能なんだからどうでもいいわ! ということで30秒毎に例のウィンドウを監視することで、無事に突破できそうです、今度こそ。


#追記
観察していて気が付きましたが、Laterボタンが初めのうちはdisableになっていることがあるようですね。Later[5]...Later[4]....Later[3]...と表示が変わっていき、5秒後に初めてクリックできるようになる、という。このため、先のウィンドウがアクティブになった時に実行するパターンだと上手くいかなかったのでは……と思ったのですが、ちょうどいまそのウィンドウが出てきて、Later[3]の段階で消えました。クリックできないボタンに対してもクリックイベント送れるんですかもしかして? じゃあ他に原因があるということですね。まあ一定時間ごとの監視でもすこぶる順調に動くのでよしとします……。