ついにうちのDeathAdderさん(マウス)がチャタリングを起こし始めたよ・・・
鉄は熱いうちに打てということなのでチャタリング抑制ソフトを作ってみた。Chattering Blocker。
トレイに常駐してマウスおよびキーボードのチャタリングをブロックする。
なお、自分のチャタリングマウスをサンプルとして調整したので環境によっては効果が薄いかもしれない。
そもそもはInputWireに実装したもののスピンオフで、防止したいボタンやキーのみに特化したもの。
InputWireとの併用時はInputWire側のチャタリング防止をOFFにした上で防止対象に割り当てをしないこと。

img180527_01.png
メインウィンドウ

チャタリング防止ソフトといえば他にも2つほどフリーソフトで存在しているけど、それらは通知ブロックのために
グローバルフックDLLを使っている。そのため外部DLLの読み込みを許さない厚いプロテクトのプロセスには
効果が期待できない。(Battle EYEとかXIGNCODE3とかHackShieldとかのゲーム系)
また、タイマー精度を変更したりもするのでWindows全体に影響が及んでしまう。
Chattering Blockerは別の手段でチャタリング防止を行うのでどのプロセスにも効果が乗るはずだ。
そもそも自分が使えないと意味ないからね・・・

このソフトにホイールを指定した場合、ゆるゆるホイール対策としても動作する。
初動1カウントを破棄するようになるのでちょっとしたことでスクロールが暴発する場合にも有効だと思う。
管理者権限で動作するためWindowsと合わせて自動起動する場合は同梱のバッチファイルを使う。
詳しくはreadme.txtを読んで欲しい。

ダウンロード


[2018/05/29]
ファイルを新しいものに差し替えました。
OutputWireの影響でタイマー精度が上がっていたためメッセージ処理の調整に問題があったようです。
スポンサーサイト



2018.05.27 09:55 | プログラム | トラックバック(-) | コメント(-) |

以前より度々記事に書くことのあったサウンドデバイスの切り替え問題。
「既定のデバイス」を切り替える方法では対応していないアプリで音が消えてしまったり
ハード側での切り替えではスピーカーとヘッドホンの音量を独立して設定できない問題があった。
今回はデバイス切り替え問題に決着をつけるべく、この前作ったVBRedirectをさらに発展させてこんなソフトを作ってみた。
個人的には脱EqualizerAPOに近い使い道になっているかもしれない。
副次的に切り替え以外のトリッキーな使い方もできるようになったので後半でご紹介。

img180501_01.png
OutputWire


●このソフトでできること

・既定のデバイス/通信デバイスの設定
・音量のアップ/ダウン/指定/他デバイスに揃える
・ミュートのオン/オフ/トグル
・音量のリンク(2つのデバイスの音量とミュートがシンクロする)
・出力のコピー(指定デバイスからも同時再生させる)/VSTプラグインでの加工

img180501_02.png
実装済みの動作一覧

これらをホットキーに割り当ててマクロ的に実行できるようにしようというもの。
個人的な用途のために作ったものなのでかなりニッチなものであることは否めない・・・。
VSTプラグイン対応は完全にオマケでVST3対応は面倒なのでパス。
VSTプラグインといえばEqualizerAPOでも使用できるものの、デバイスが持つAPOを上書きしないといけない上に
32bit版プラグインは使用できず、実際の動作はAudioDG.exeで行われるので設定ソフトからは波形入力されず
インジケーターが動かない問題が。

img180501_03.png
VSTプラグイン対応

自分の使い方で例を挙げよう。
スピーカー出力Aとヘッドホン出力Bを切り替えたい。ただしヘッドホン出力Bは既定の通信デバイスB2も使いたい。
そんな場合は以下のようになる。
※前回記事で扱ったVB-Cableのデバイスを使用

[Startup]
①VB-Cableを規定のデバイスにする

[スピーカー]
①VB-Cableを規定の通信デバイスにする
②Aの音量をVB-Cableの音量にコピー
③VB-CableとAの音量操作をリンクさせる
④VB-Cableへの出力をAにコピーする

[ヘッドホン]
①B2を既定の通信デバイスにする
②Bの音量をVB-Cableの音量にコピー
③VB-CableとBの音量操作をリンクさせる
④VB-Cableへの出力をBにコピーする

他にもこんな用途を考えてみる
・普通に出力を分岐させてヘッドホンとスピーカーの同時出力
・マイクから仮想デバイスへ出力コピーしてVST効果で加工、仮想録音デバイスをアプリに指定させボイスチェンジャー化
・SoundBlasterから出力コピーしてコピー先でスカウトモードを使う (出力コピーはコピー元のAPO効果を付与できる)

夢が広がるなぁ・・・
仮想デバイスや未接続な光出力デバイス、ディスプレイ側でミュートにしたHDMIサウンドなど実際に音が出ないデバイスを
経由させて普段使いのデバイスに出力コピーすることで、Sonic StudioやAcoustic Engineといった専用ソフトウェアのAPOを
上書きすることなくVST効果を乗せられる。どうしてもVSTプラグインを使いたいんだって人にも良い手段を提供できそうだ。


●このソフトの細かい仕様と制限
箇条書きで手抜きをさせてもらうけれど・・・
・StartupプロファイルはOutputWire起動時に自動実行される
・出力コピーおよび音量リンクはそれぞれ1つしか維持できない
・出力コピーは 出力デバイス→出力デバイス または 入力デバイス→出力デバイス が可能。前者が低遅延
・出力コピーはコピー元とコピー先両方のAPO効果を受ける
・音量リンクはAとBどちらがどちらでも動作は同じ
・VSTプラグインの効果は出力コピー先にしか乗らない
・VSTプラグインはプロファイル共通扱い
・VSTプラグインはOutputWireと同じbit版しか読み込めない
・VST処理は64bit版のほうが32bit版より2倍以上軽い。
・VST処理は2chプラグインであっても7.1ch出力全てに効果を乗せる
・入力と出力のチャンネル数が異なるプラグインの動作は未定義

等々。
出力コピーや音量リンクが1つなのは実装が面倒なのもあるけれどループバックが怖いから。
簡単に言うとスピーカーにマイクを近づけてハウリングが起きるのと同じで、ループが出来上がると
無限増幅でデバイスにどんな影響があるかわからない。
どうしても出力コピーを2系統使いたい場合はVBRedirectと併用する手もある。
(本当はVBRedirectを置き換えるためのソフトでもあるわけだけど・・・)


●ダウンロード
こちらからどうぞ。32bit/64bit同梱。
VBRedirectと同じく、WASAPIの自動コンバート機能を使うためWindows10でしか動かないので注意。


[2018/05/02]
いくつかのプラグインの動作不良を改善。
他にも不定期で改良していくのでページ右上のバージョンをチェックしていただければ。

img180501_04.png
お気に入りのTDR Novaの操作がまともにできるようになった。
音の成分をリアルタイムで見ながらいじれるイコライザ。知識がなくてもいじりやすいUI。ステキ。
OutputWireのVSTウィンドウはOKを押さない限り設定を保存しないので、いじりすぎて不満が出たときは
Cancelすることで以前の設定に戻すことが可能。とにかくいじって体感して覚えていくのだ。

2018.05.01 19:27 | プログラム | トラックバック(-) | コメント(-) |

Windows10対応のSound Blaster X-Fi MB3 1.00.06(以下SBXFIMB3)がでてからしばらくになるけれど、
使う人によってはひどいと言える不具合があるため適当にバイナリをいじって常用している。

1.00.06ではOS起動時に自動で立ち上がるときの起動オプション "/r" がつくとWindows10のFastBootを意識してのことか
とても素早くSBXFIMB3が起動する。これは前バージョンの1.00.04とは比較にならない起動速度なのだけど、
そのせいかホットキーを検出するサービスが実行されないらしく、PCを起動したあとトレイから一回引き出してあげないことには
プロファイルの切り替えをキー操作でできないという大問題が発生した。

問題といえばもう一つ、Windows10のTH2からアニバーサリーアップデートを行ったときになぜかSBXFIMB3が
1.00.04に勝手にダウングレードされていたこと。Windows10に対応してないバージョンを強制的にいれてくるとか正気なのかな…
ちなみにWindows10上での1.00.04は対応するサウンドデバイスが検出できない深刻なバグが発生する。

というわけでパッチを更新して公開したので奇特な方は是非。
なお、同梱のDLLも不具合があったため新しい物に変更済み。
[1.00.04]/[1.00.06]
・短い音の末尾が途切れる問題の修正
・起動時のスプラッシュロゴを削除
・プロファイルの切り替え通知
[1.00.06]
・自動起動時にホットキーでプロファイルが切り替わらない問題の修正

ダウンロード

2016.08.18 17:59 | プログラム | トラックバック(-) | コメント(-) |

正月早々にInputWireをこっそり更新。
マクロの処理や他ライブラリのテストベッドとしていろいろいじったので設定も互換なし。
マクロにループ機能を持たせたんだけど今日いまさらながらにコレが寝マクロ可能なことに気づいてしまった・・・
といっても寝マクロするようなタイトルを遊んでるわけでもないけど。
使い手しだいとはいえ、マクロの扱いというのは一般の方からしたらどういう位置づけなんだろうなぁ・・・

img150108_00.png
マウスの相対座標移動やループを実装した図

そもそもマザーボードメーカーであるASUSの最新ROGシリーズにはKeyBotなる専用チップを乗せていて
繋ぐキーボードに依存せずマクロ機能を与えてたり、先日さわったSonicStudioのSonicRader(これもASUS)も同様に
Direct3D(あるいはオーバーレイ?)へ音が発生した方向を表示したりと徐々に行き過ぎ感が。

img150108_01.jpg
KeyBotチップ。マクロ機能を実現する専用チップをマザーボードが搭載するという時代・・・

汎用的に使えることを目的としたInputWireもそこまでとは言わないものの余り機能を付け足してはいけないのかも。
これに指定座標カラーピックと条件分岐でもつけようものなら完全にBOT運用じゃないか。
ソフトウェアのモラルというのは作り手にあるべきなんだろうか?使い手にあるべきなんだろうか?

2015.01.08 20:25 | プログラム | トラックバック(-) | コメント(-) |

以前の記事からお世話になっている Sound Blaster X-Fi MB3 なんだけども、気になる点が。
①起動するときに画面中央にロゴというかスプラッシュ画面が出る
②フォルダを移動するときの音など短い音が尻切れトンボになる
以上2点。
神経質といわれればそれまでだけど、自分にとってはどちらもいただけないものだったので
ついカッとなってsbxfimb3.exeにパッチしてスプラッシュ画面を消し、WrapperDLLをかませることで
あらかじめWASAPIを共有モードで開いて音が途切れる問題を抑えてみた。
ついでにホットキーでプロファイルを切り替えたときに切り替わったことを通知するバルーンがでるようにしてみたよ。

img141218_00.png
"ヘッドホン"と"スピーカー"を切り替える身としてはコレ大事。

そもそもSound Blaster X-Fi MB3を使ってる絶対数が少ないとは思うけど、自分だけが使うよりはと思い公開しよう。
このニッチさが変態チックでいいじゃないか。
ダウンロードは左上のメニューより。

2014.12.18 18:57 | プログラム | トラックバック(-) | コメント(-) |

いまではよほどのマウスにサイドボタンがついている。
標準ではブラウザの進む/戻るに対応しているだけで他に使う場面はよほど無い。
かといってInputWireのようなドライバタイプを用意して活用するのも敷居が高いと思う。

今回は気まぐれでホイールクリックやサイドボタンにキーを割り当てられるものを作ってみた。
ドライバを使用しない簡易タイプで、管理者権限上で動作する。
ゲーミングマウス以外でもボタンにキーを割り当てられるようなソフトをメーカーが用意してることがあるけど
必要以上にごっちゃりしてたり、どんなマウスでも使えないともったいない。

img141213_00.png
今回作成したソフト、「Sidekick」

コピー&ペースト(Ctrl+C/Ctrl+V)を割り当てたり音楽プレイヤーのトラック制御を入れるとなかなか便利に。
ウィンドウを指定すると動作対象を限定することが可能。指定がないと全プロセスで有効になる。
なお、ホイール上下やチルトを含まなかったのはDirectX上ではその動作をブロックできないため。
キーは発動するけど元のスクロールをとめてくれないので面倒なことになる。
他にも似たようなフリーソフトがあるかもだけど、自己満足ってことで投げておこう。

続きを読む

2014.12.13 21:13 | プログラム | トラックバック(-) | コメント(-) |

ネトゲ用タイマー(仮称)を作り直したのでアップロード。
なにげに需要が多いようでダウンロード数が意外に多いので手直し。
進捗を表示するバーと残り時間を大きく表示するだけのシンプルなタイマー。
操作の邪魔をせず素早くささっと使えるタイマーを目指して作ってみた。

img141207_00.png
Windows7での見た目。プログレスバーのデザインに依存なのでOSごとに表示は異なる

img141207_01.png
これでもうiniファイルをいじらなくていい・・・

このタイマーの特徴
・設定したキーを設定した回数(1~3回)押すとタイマーのオンオフを操作可能。(デフォルトではCtrlを三回)
・タイマーのスタート/ストップ/フィニッシュは音で通知
・タイマーに対するクリックは下にあるウィンドウに通り抜ける (ゲームの邪魔にならない)
・タイマーへのクリック操作はShiftを押しながら行う
・[+]アイコンをドラッグしてウィンドウを指定しておくと、タイマー完了時に点滅してお知らせ
・画面端に吸い付く (マルチディスプレイ環境ではタスクバーのある画面のみ)

ダウンロード


[2018/06/01]
新しいファイルに差し替えました。
記事も手直ししました。

2014.12.07 12:26 | プログラム | トラックバック(-) | コメント(-) |

MouseToKeyをリリースしてからしばらくになるけど、不満というか無駄というかそういうのが見えて来るんだよね。
ダブルクリック、トリプルクリック、ロングクリックなんて誰得なんだっていう。
自分が使う分には不必要だしドライバのソースもだいぶスパゲティになってきたので完全に作り直してみたりね。
見た目にはソックリだけどまるで別物な一品が完成しましたよ、「InputWire」。

img141202_00.png
見た目にさほど違いが無い新作さん


MouseToKeyと同じく機能をざっと並べると
●マウスのボタンにキーまたは別のマウスボタンを割り当てることが可能
●キーに別のキーまたはマウスボタンを割り当てることが可能
●Ctrl+CやCtrl+左クリックなどのコンビネーションを登録可能
●Winキーのコンボやメディアキーに対応
●プロセスごとに設定可能
●左右/中央/ホイール上下/チルト左右/サイドx2 のボタンに割り当て可能
●マウス/キーボードの簡易チャタリング防止機能
●ゆるゆるホイール対策機能
●10個までの簡易マクロ機能
●ドライバは32bit/64bit両対応(本体側は32bit)

こんなところかな。
使用中のマウスはほぼチャタリング状態でホイールゆるゆるなので、設定項目にある
チャタリング防止やゆるゆるホイール対策が最大の目的だったりする。割り当てやマクロはオマケ。
でも今回メディアキーや特殊キーにも対応したことでなかなか便利になったと思う。
マイコンピューターが1キーって気持ちいい。

img141202_01.png
使わないのに作っちゃったマクロ機能

もちろん今回もドライバ経由の入力方式なのでDirectXやRawInputでもちゃんと使えると思う。
例によってオレオレ署名なのでドライバの署名問題やテストモードのお話を分かってる人のみ使用してくださいねっと。

ダウンロード

続きを読む

2014.12.02 17:10 | プログラム | トラックバック(-) | コメント(-) |

なんかUO用タイマーの需要がそこそこにあるようで、必要ないかなーとメニューから消したあとにお問い合わせが。
ソースコードは消しちゃってもう存在しないのですよ。手抜きだし。
ソフトウェアって基本的には孫の手みたいなもので、大半は自分用に作るんだよね。
けど自分用だから気合いれて作るわけじゃないし、あれこれ要望聞くというのも好きじゃない。
どんなに小さな要望でも人が必要とする機能は千差万別で、それを逐一取り込んでたら膨れる一方だ。

んでタイマーのお話にもどすと、そもそもUOやその他のネトゲで時間を計る必要性ができたときって
画面外にカーソルもっていってボタンをポチっというのはどうもナンセンスな気がする。
「今タイマーをセットしたいんだ」というその瞬間にささっと扱えないとねぇ・・・
ってことでだいぶ前に自分用に作った、手元でぱぱっと操作できるネトゲ向けタイマー置いとくよ。
設定画面つくってないからiniを編集して使ってくださいまし。
点滅させるウィンドウのタイトルではなくて「ウィンドウクラス名」を指定すること。
タイトル指定だと厳密に一致させないといけなかったり、部分検索させるのめんどいので。
(既にこの時点で一般向けではないが・・・)
前のタイマーよりはあきれるくらい便利に使えるとは思う。

2013.03.17 16:11 | プログラム | トラックバック(-) | コメント(-) |

今年の春ごろ知り合いに頼まれてマウスのボタンにキーを割り当てるプログラムを試作したとき。
HK_MOUSE_LLで通知をブロックしつつキーをSendInputしてたんだけれども、DirextXなプログラム上では
ホイールの動作をブロックできなかった。なにより、SendInputを使用しないといけない前提そのものが
最近増えつつあるHackShieldやnProtectと折り合いが悪い。
既存のソフトを使うにしてもプロセスごとに割り当ての設定ができたり、64bit対応っていうのもない・・・

・・・と思ったので素人ながらアレコレ勉強しながら作ってみた。「MouseToKey」。
ざっと箇条書きすると
●マウスのボタンにキーを割り当てることが可能
●Ctrl+C などのコンビネーションも登録可能
●プロセスごとに設定可能
●シングル・ダブル・トリプル・ロングクリックそれぞれに設定可能
●左右/中央/ホイール上下/チルト左右/サイドx2 のボタンに割り当て可能
●マウスとキーボードの簡易チャタリング防止機能つき
●32bit/64bit両対応(本体側は32bit)

なんてインチキくさいソフトなんだ・・・
素人が書いたドライバなので当然ブルスクになったりOSが起動しなくなるかもしれない
真っ当な署名をつけられないのでオレオレ署名を施してあったり。
ドライバの署名問題と動作時におけるその回避方法を知っていて、なおかつ
素人の作ったドライバでもかまわない!っていう無謀な方のみ使ってくださいまし。
当然ながらこのソフトで起きたいかなる問題の責任も負いかねますよっと。
サポートもしませんよっと。

続きを読む

2012.12.19 21:12 | プログラム | トラックバック(-) | コメント(-) |

C++のプログラミングで比較的大きなプロジェクトを扱ったときそれは突然発症し、
それこそガンのようにしつこく手を打つにも難しい問題がでてくる。
その一つが相互参照、あるいは循環参照。
今まさに直面していたり(´・ω・`)

よくあるサンプルで示すと
// ----- A.h -----
#include "B.h"
class A
{
public:
B b;
};

// ----- B.h -----
#include "A.h"
class B
{
public:
A a;
}

クラスAのメンバはBのインスタンスを持ち、かつクラスBはAのインスタンスを持つ。
こうなってはC++ではコンパイルできない・・・
そしてこれまたよくある解決法を示すと
// ----- A.h -----
class B; // 前方宣言(A::bのため)
class A
{
public:
B* b;
};

// ----- B.h -----
class A; // 前方宣言(B::aのため)
class B
{
public:
A* a;
}

includeをやめて前方宣言にし、ポインタを持たせるとすんなり通る。
cppでそれぞれのヘッダをincludeしてやり、ポインタをセットするメンバ関数を作れば問題なし。

・・・なのだが、僕の場合はもうすこし複雑な事情があって問題だらけに。
普通ならC++プログラムはソース(.cpp)とヘッダ(.h)で構成されているのだけど、
ヘッダひとつで宣言と実装を済ませて1クラス1ファイルにしているため、
ポインタからメンバを呼び出そうものなら上記のような解決法ではムリなのだ・・・
(だったら宣言と実装を分けろよって言われたらそれまでなんだけど)

本来、相互参照や循環参照はプログラムの設計そのものが間違っているからこそ
起きることが多いんだけど、世の中必要な相互参照もあるっちゃあるわけで。
機能別にカプセル化しようにも、条件に左右されやすい機能では条件の参照が必要に。
たとえば、BをAに委譲したとき。
(DoIt関数を使った自己委譲は無いものとする)
// ----- A.h -----
#include "B.h"
class A
{
public:
B b;
unsigned long m_uFlags;

A() { b.SetA(this); };
int DoIt() { return b.DoIt(); };
unsigned long GetState() { return m_nFlags; };
};

// ----- B.h -----
class A; // 前方宣言
class B
{
public:
A* pa;

void SetA(A* p) { pa = p; };
int DoIt() { return (pa->GetState() != 0) ? 100 : 50; };
};

例なので荒くざっくり書いたけど、結局エラーがでてコンパイルならず。
じゃぁどうしたらいいんだろう。
卑怯(?)なコードだとこうかな?
// ----- A.h -----
#include "B.h"
class A
{
public:
B<A> b;
unsigned long m_uFlags;

A() { b.SetA(this); };
int DoIt() { return b.DoIt(); };
unsigned long GetState() { return m_nFlags; };
};

// ----- B.h -----
template<class T>
class B
{
public:
T* pa;

void SetA(T* p) { pa = p; };
int DoIt() { return (pa->GetState() != 0) ? 100 : 50; };
};

ポインタを扱わなきゃいけない上にテンプレートorz
あああああああ まどろっこしい!!まどろっこC!!!!!
どのみち委譲なら継承しちゃってもかまわないよね!よね!!!!?

// ----- A.h -----
#include "B.h"
class A : public B<A>
{
public:
unsigned long m_uFlags;

unsigned long GetState() { return m_nFlags; };
};

// ----- B.h -----
template<class T>
class B
{
public:
int DoIt() { return (dynamic_cast<T*>(this)->GetState() != 0) ? 100 : 50; };
};

スッキリ。A.DoIt()も可能だし。
ただ、宣言と実装をまとめたいだけのためにテンプレートまで引っ張り出す必要ってあるんだろうか?
本当はAのデータをクラスCとでもして、A、Bから参照させたほうがベストなんだろうけど。
宣言と実装を分けるべきか、継承か委譲か、設計をどうするか、非常に悩ましい。

2010.08.16 10:39 | プログラム | トラックバック(-) | コメント(1) |

最近やる気がまったくでないわけで、それが暑さからくるかと言われたらNOで。
なにもまったく手につかないって由々しいので気分転換に映画「INCEPTION」見に行ったりね。

これ、なかなか面白かった。内容も意味もある意味「深い」上、やってることが
プログラムでいう再帰関数だなぁとか思いながら見てたよ。
各所で言われているように、見終わった後誰かと内容について議論できるような、
多少小難しいけれど濃いめなシナリオ。
でもなんというか、そういう話し相手になる人と見に行かないと意味ないんだよね・・・orz


UOからしばし離れてやる気充填のため、Cottonのソースなんかをいじくり。
今現在使っているVBScriptから借用したIRegExpでベンチをとってみると・・・遅い。
すんごい遅い。マクロの処理が重いのはこのせいかぁ。
C++で正規表現、しかもUnicodeで扱うとなると選択肢はかなり限られるわけで、
他の正規表現ライブラリを使おうと鬼車ライブラリとにらめっこしたり。
イマイチ好きになれないんだよね、外部ライブラリに頼るの。
なにかいいものないかなと探してたところ、ありましたよ。
UnicodeもOKで将来性もあって高速なのが。

std::tr1::regex君。

テンプレートで文字列をコンテナとして扱えるので臨機応変だし
C++0xの一部として盛り込まれてるので安泰だ。
Ollyさんで見る限り特殊なランタイムもいらないし、最高。
とりあえず自分用メモでも張って満足感に浸ろう。
#include <tchar.h>
#include <iostream>
#include <string>
#include <regex>
using namespace std;
using namespace std::tr1;
#ifdef _UNICODE
#define _tcout wcout
#else
#define _tcout cout
#endif

int _tmain(int argc, _TCHAR* argv[])
{
// 正規表現のコンパイルとマッチ結果用変数
basic_regex<TCHAR> rx(_T("abc(.+)abc"));
match_results<const TCHAR*> mr;

// 完全一致か確認 regex_matchをregex_searchに置き換えると部分検索になる(1ヒットのみ)
bool bMatched = regex_match(_T("abcdefabc"), mr, rx);
if (bMatched)
{
_tcout << _T("regex_match: matched_string=") << mr.str(0);
_tcout << _T(" $1=") << mr.str(1);
_tcout << _T(" $1.begin=") << mr.position(1);
_tcout << _T(" $1.end=") << mr.position(1) + mr.length(1) << endl;
}

// 置換
basic_string<TCHAR> strText, strFmt, strResult;
strText = _T("abcdefabc abcghiabc");
strFmt = _T("_$1_");
strResult = regex_replace(strText, rx, strFmt);
_tcout << _T("regex_replace: replaced_string=") << strResult << endl;

// すべての一致結果列挙
regex_iterator<basic_string<TCHAR>::const_iterator> rxi(strText.begin(), strText.end(), rx);
regex_iterator<basic_string<TCHAR>::const_iterator> rxi_end;
for(; rxi != rxi_end; ++rxi)
{
_tcout << _T("regex_iterator: matched_string=") << rxi->str(0);
_tcout << _T(" $1=") << rxi->str(1);
_tcout << _T(" $1.begin=") << rxi->position(1);
_tcout << _T(" $1.end=") << rxi->position(1) + rxi->length(1) << endl;
}

return 0;
}

2010.08.05 16:50 | プログラム | トラックバック(-) | コメント(2) |

先日のUOCooler、思いのほか反響があってうれしい限り。
>>157さんにあっという間に届いたのには驚いたけど、ちゃんと効果が出てるようなのでヨカッタ。
そしてちらちらと上がっているお声に反応してみる。


>これはログイン画面の時だけ効果が出る?
>ログイン後は効果が無いってこと?

UOのパッチチェック、ゲーム本体の起動から終了まですべて効果デルヨ!!
なのでしっかり発熱をおさえてうるさいファンの音ともおさらばできる「はず」なんだ。
うちはファンコンでファンの回転数が固定なので実感しようがないヨ。


>i7 860だと効果無いみたいヨ。
>個人的にはインストーラ形式じゃない方がいいヨ。

うーん、クーリングの実装はCPUを選ばない単純な方法で行っているので、動かないのは悔しい・・・
あと、確実に動かすためには、
・UOCoolerを先に起動しておく(スタートアップ推奨)
・UOの実行ファイル名を変えていない
・管理者権限で実行されている
くらいしか思いつかないTT
インストーラなのは、温度を下げたいけどソフトをどうやって毎回起動できるように
設定するかわからない、っていう方のために採用したよ。
僕もインストーラはキライなのでよくわかる・・・


>スタートアップにあんまりソフトいれたくないヨ。
>2Dクライアントと一緒に起動されるほうがうれしいヨ。

一応、UOを起動するときだけ効果が出る・・・というよりUOを自動起動するタイプをつくってみたよ。
クーリングが有効になると左上のアイコンが青色に変化。
トレイではなくUOのウィンドウに設定メニューがでる形に。
100701_00.jpg

UOCooler.exeを実行するとレジストリにあるUOの場所を参照して自動起動するんだけど
UOをちゃんとインストールしていない環境だと起動できないかも。
そしてもう一つ、VirusTotalで最終チェックをしてみたところ、McAfee-GW-Editionの
ヒューリスティック機能が誤認識するようだ。
100701_01.jpg

v1.0がグローバルフックなのに対し、v1.1はプロセスを絞って負荷抑制コードを書き込んでるので
CodeInjectionとして認識されるのも仕方ないかなぁ。
表記が「Heuristic.BehavesLike.Win32.CodeInjection.H」なので間違ってはいないけどね。

というわけで、スタートアップ&インストーラが嫌いでスマートに使いたい、
それでいて上記の意味が理解できる方のみダウンロードしてくださいませ。
とくに大きな理由がない限りは通常版を使ってください。

ダウンロード

続きを読む

2010.07.01 20:45 | プログラム | トラックバック(-) | コメント(0) |

いつものように本スレをチェックしてたらこんな書き込みを見つけた。

157 :名も無き冒険者 sage :2010/06 /27(日) 21:23:11 ID:qjcT857A
  しかし、KRはひどかったが、2Dもひどいな。

  クライアント起動前 CPU使用率 10%くらい
  クライアント起動後 CPU使用率 60%オーバー
  (パスの入力画面で放置)

  パス入力画面だけで、なんで、こんなに負荷が掛かってるんだよww
  信じられん。

  ファンがうるさくてタマラン・・・


そういえばうちはCore2DuoにしてからCPU負荷を気にしたことなかったけど、
1コアな環境だと凄惨だなぁ・・・とか思いつつ、UO 2D起動してタスクマネージャを見てみる。

・・・おわー、50%じゃないか!!(2コアなので1コア全部つかってることに)
これからの季節、このCPU使用率はいただけない。
というよりこんなフル回転ループなプログラムを開発する気がしれない。
とにかく他人事ではないぞ・・・


というわけで作っちゃいました。
UOのCPU負荷をぐぐっとさげるソフト「UOCooler」
(※2Dクライアント専用)
見てるとは思えないけど>>157さんに捧ぐ。
宣伝は好きじゃないから、いつか口コミで届くといいなぁ(・ω・)
ダウンロードは右上より。
プログラムはこんな感じ。やっつけ仕事だけどかんべんね。
100628_00.jpg

起動すると青い十字マークがトレイに常駐。
UOが起動するのを監視して負荷を調整するので、細かい設定とかいらないかな。
負荷を抑える設定は3段階。
標準でも十分なので変える必要性はそんなにないと思うけど・・・

動作の比較は以下。
まずはUOを普通に起動したとき。
100628_01.jpg

続いてUOCoolerが常駐した状態でUOを起動したとき。
100628_02.jpg

効果の差は環境にもよりけりだと思うけれど、
暑い夏を乗り切るためにおひとついかがかな?

ダウンロード

続きを読む

2010.06.28 15:04 | プログラム | トラックバック(-) | コメント(1) |

赤蜘蛛の待ち時間が退屈だったので作ってみた。
倒した瞬間にポチッとしておくと、15分後に音とUO窓の点滅でお知らせしてくれる簡易アプリ。
ダウンロードは右側メニューから。
時間と通知方法は自由に設定できるのでこの先いろんな時間毎イベントに使えると思う。

[3/1 9:46 追記]
ある方にもっと小さくしろボケェーといわれたのでもうちょっと小さくしつつ、
画面の端っこに吸い付くようにしてみた。
あとSAクライアントにも対応したヨ。
終了はUO内の操作流儀に従って右クリックね。

2010.02.28 19:11 | プログラム | トラックバック(-) | コメント(3) |

パラリで解法の話題がもちあがり、海外のパターン別攻略が。
あらららら、こりゃ旨みもなにもあったもんじゃないなぁ・・・
ってことで、パズル解法探索プログラムを公開してしまうことにするよ。しょぼん・・・
最短手数で探索するので0/8表記のパズルでも4手で終わったりとか可能。


画面は若干手抜きだけどネ

ダウンロード

2009.09.14 23:34 | プログラム | トラックバック(-) | コメント(1) |