2011-12-03 1 views
0

J'essaie d'exécuter la fonction QueryPerformanceCounter() à partir d'un processus particulier et obtenir sa valeur de retour à mon application C#. Puisque ces deux processus (mon application et l'application que j'essaie d'affecter) sont différents, quel type de stratégie devrais-je suivre?Get Another Process 'QueryPerformanceCounter()

+1

Que voulez-vous dire "l'application que j'essaie d'affecter"? 'QueryPerformanceCounter' ne modifie pas le processus. –

+0

J'essaie de détecter les tentatives de dépassement de vitesse sur un processus. Il y a quelques programmes de piratage (c.-à-d. Moteur de triche) qui changent la vitesse d'un processus particulier. Ainsi, j'ai besoin d'exécuter cette fonction dans un autre processus et d'obtenir sa valeur de retour à mon propre processus pour inspecter les valeurs. –

Répondre

1

QueryPerformanceCounter est synchronisé sur tous les processus d'un ordinateur. Vous pouvez simplement l'appeler localement. C'est la même valeur que l'autre processus aurait reçu.

Mise à jour: D'accord, vous vous battez contre les tricheurs. S'ils sont en train d'accrocher votre processus, alors ils vont aussi accrocher vos processus fils, donc engendrer un processus d'aide n'aidera pas beaucoup.

Une chose que vous pouvez faire est de corréler plusieurs temporisateurs. Par exemple,

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

Les quatre temporisateurs (QPC, GetTickCount, GetSystemTimeAsFileTime et Sleep) doit concorder à une erreur de mesure.

Une autre chose que vous pouvez faire est de corréler avec une source externe. Par exemple, vous pouvez écrire une fonction qui obtient l'heure du système de fichiers en créant un fichier, puis en demandant l'heure de création du fichier. Corréler ceci avec les quatre autres minuteurs. Les autres sources externes sont le matériel audio et vidéo. Par exemple, vous pouvez lire un clip audio d'une seconde et voir combien de temps cela prend. Ou attendez le vide vertical et voyez s'il correspond au taux de rafraîchissement du moniteur.

+1

Ce programme, Cheat Engine, (que j'ai utilisé pour changer la vitesse de mes processus) ne change que la vitesse d'un seul processus. Quand je change la vitesse de ma propre application, je peux voir le changement avec QueryPerformanceCounter mais quand je le fais pour un autre processus je ne peux pas voir le changement. Donc, j'ai besoin d'exécuter QueryPerformanceCounter() dans un autre processus et d'obtenir sa valeur de retour à ma propre application. –