2011-12-03 12 views
0

特定のプロセスからQueryPerformanceCounter()関数を実行し、その戻り値をC#アプリケーションに取得しようとしています。これらの2つのプロセス(私のアプリケーションと私が影響を与えようとしているアプリケーション)は異なるので、どのような戦略をとるべきですか?別のプロセスを取得する 'QueryPerformanceCounter()

+1

"私が影響を与えようとしているアプリケーション"とはどういう意味ですか? 'QueryPerformanceCounter'はプロセスを変更しません。 –

+0

私はプロセスに対してスピードハッキングの原因を検出しようとしています。特定のプロセスの速度を変更するハッキングプログラム(つまり、チートエンジン)があります。したがって、私は別のプロセスでこの関数を実行し、戻り値を自分のプロセスに渡して値を検査する必要があります。 –

答えて

1

QueryPerformanceCounterは、コンピュータ上のすべてのプロセスで同期されます。あなたはそれをローカルで呼び出すことができます。これは、他のプロセスが受け取ったのと同じ価値です。

更新:あなたは詐欺師に対して防衛しています。彼らがあなたのプロセスをフックしている場合、あなたの子プロセスもフックするので、ヘルパープロセスを産み出すことはあまり役に立ちません。

複数のタイマーを関連付けることができます。例えば、

QueryPerformanceCounter(&liStart); 
dwStart = GetTickCount(); 
GetSystemTimeAsFileTime(&ftStart); 
Sleep(1000); 
QueryPerformanceCounter(&liStop); 
dwStop = GetTickCount(); 
GetSystemTimeAsFileTime(&ftStop); 

すべての4つのタイマー(QPC、GetTickCountGetSystemTimeAsFileTime、およびSleep)は、測定誤差の範囲内に同意する必要があります。

もう1つのことは、外部ソースとの相関関係です。たとえば、ファイルを作成してファイル作成時間を求めることによって、ファイルシステムから時間を取得する関数を記述できます。これを他の4つのタイマーと相関させます。他の外部ソースには、サウンドとビデオのハードウェアがあります。たとえば、1秒のサウンドクリップを再生して、どれくらい時間がかかるかを確認できます。または、縦の空白を待って、モニターのリフレッシュレートと一致するかどうかを確認します。

+1

私のプロセスの速度を変更するために使ってきたこのプログラムであるチートエンジンは、単一プロセスの速度だけを変更します。私は自分のアプリケーションの速度を変更すると、私はQueryPerformanceCounterで変更を見ることができますが、私は別のプロセスのために私は変更を見ることができません。だから、別のプロセスでQueryPerformanceCounter()を実行し、自分のアプリケーションに戻り値を取得する必要があります。 –

関連する問題