2011-12-03 35 views
0

我想從一個特定的進程運行QueryPerformanceCounter()函數,並獲得它的返回值給我的C#應用​​程序。由於這兩個過程(我的應用程序和我試圖影響的應用程序)是不同的,我應該遵循什麼樣的策略?獲取另一個進程'QueryPerformanceCounter()

+1

你是什麼意思「我試圖影響的應用程序」? QueryPerformanceCounter不會修改該進程。 –

+0

我正試圖在一個進程中檢測速度調試嘗試。有一些黑客程序(即作弊引擎)會改變特定進程的速度。因此,我需要在另一個進程中運行此函數,並將其返回值傳遞給我自己的進程以檢查值。 –

回答

1

QueryPerformanceCounter跨計算機上的所有進程同步。你可以在本地調用它。這與其他流程會收到的價值相同。

更新:好的,你是在防範騙子。如果他們掛鉤了你的流程,那麼他們也會鉤住你的子流程,所以產生一個幫助程序並沒有什麼幫助。

你可以做的一件事是關聯多個定時器。例如,

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

所有四個定時器(QPC,GetTickCountGetSystemTimeAsFileTime,並Sleep)應該測量誤差內同意。

您可以做的另一件事是與外部來源相關聯。例如,您可以編寫一個函數,通過創建一個文件然後詢問文件創建時間來從文件系統獲取時間。將其與其他四個計時器相關聯。其他外部來源是聲音和視頻硬件。例如,您可以播放1秒的聲音剪輯並查看需要多長時間。或者等待垂直空白並查看它是否與顯示器刷新率相匹配。

+1

這個程序,作弊引擎(我一直用來改變我的進程速度)只改變了單一進程的速度。當我用它改變我自己的應用程序的速度時,我可以看到QueryPerformanceCounter的改變,但是當我爲另一個進程執行時,我看不到改變。所以,我需要在另一個進程中運行QueryPerformanceCounter(),並獲得它的返回值給我自己的應用程序。 –