愛用しているHWiNFO。
フリー版では、ずっと動かしていて12時間を超えると情報取得をしなくなる。
PC動かしっぱなしの俺には死活問題である。
なので、回避するために原始的な手法を使っていた。
これで問題は無かったんだけど、最近バージョンアップした時から
12時間を経過して値を取得していない状態になることが多発。
どうやらプロセスを落として再起動する方法が封じられた模様w
まぁ作者としては有料のProを使って欲しいのはわかる。
「Free版」が存在するアプリは大抵そういう機能制限をするけど、
ボタンを押したら「買え!」と言われるよりはずっと良心的に思える。
タダで使わせてもらってるんだ。文句を言うのはお門違いだ。
さて、気に入る/気に入らない の問題は置いといて、
一技術者の底辺に居る人間の好奇心で、どうやって実現しているのかが気になった。
まず、前に行った対処。
バッチファイル(*.bat)で複雑怪奇なことをやっているけど、簡単に言うと
プロセスをKillして再度アプリを起動
ということをやっているだけだ。
それをタスクスケジューラで8時間おきに実行する。
このやりかただと、
時間になった時に一瞬コマンドプロンプトが開いて見えてしまう
のが気に入らない。
あとゲームをやっているとアクティブなウィンドウが変わってしまって
消えても元々アクティブだったウィンドウに戻るわけじゃないので操作不能になる。
自分で取った選択とはいえイケてないなぁ と。
あれ?コレってAutoHotkeyをバッチみたいに使えば解決するんじゃね?
ちょっと調べたら簡単にできそうだ。
PROCESS_NAME = HWiNFO64.EXE
PROCESS_FULL_PATH := PROCESS_DIR . PROCESS_NAME
Process, Exist, %PROCESS_NAME%
If (%ErrorLevel% != 0) {
Process, Close, %ErrorLevel%
}
Run, %PROCESS_FULL_PATH%, %PROCESS_DIR%
ExitApp
わかりやすい。
Process, Exist
の結果(=プロセスID)がErrorLevel
に入るのが気持ち悪いけど。
HWiNFOは管理者権限じゃないと落とせないし、起動する時にも管理者権限が必要なので注意。
タスクスケジューラに登録する時に「最上位の特権で実行する」のチェックボックスを入れておけばOK。
・・・とスッキリしたはずが、対策を打たれてしまった。
ということで、「どうやってリミットの12時間をチェックしているのか」わかれば手の打ちようがある。
ググってなんとなく斜め読みしていたら、リバースエンジニアリングして
バイナリを書き換えるという真っ黒な人が居た。
バージョンによってアドレスも値も違うので、その時点でダメだ。
スマートじゃない。いや、マズいでしょソレ。
まず、12時間の測定の仕方。
開始時間がわかれば12時間を足して計算できる。
終了時間をどこかに保持していて現在時刻と比較する というやり方もあるけど
そんなアホなロジックにはしないだろうw
次に保持している場所。
設定ファイル(*.ini)にオープンに書いちゃうのはあり得ないな。
ちなみに設定ファイルはC:\Program Files\HWiNFO64\HWiNFO64.INI
にある。
中を見ると
これがモロにチェックボックスON/OFFだ。
他を見ても日時っぽい設定は無い。
レジストリ?
ザッと検索してみたけど、それっぽい項目は無かったか見落とした。
HWiNFOとは関係ない文字列だったり、ハッシュ化して隠されたりしたら手の打ちようが無い。
今後、最終的にそこに行き着く気がする。
何か回避策がないか引き続き調査しよう。