Je voudrais coder une application me permettant de recevoir les messages envoyés par OutputDebugString. Je pensais utiliser WaitForDebugEvent mais ça n'a pas l'air de trop marcher, à moins que je m'y prenne mal. Alors si quelq'un a une idée...
Je voudrais coder une application me permettant de recevoir les messages envoyés par OutputDebugString. Je pensais utiliser WaitForDebugEvent mais ça n'a pas l'air de trop marcher, à moins que je m'y prenne mal. Alors si quelq'un a une idée...
J'ai trouvé ca :
http://xxx
[Edit]
Après visite plus poussé de ce site, je préfère enlever l'adresse (ca parle de crack en fait). Je prepare un bout de code qui illustre l'exemple en C trouvé.
[/Edit]
Il y a un exemple en C.
Je ne sais pas si ca peut t'aider, mais je ne pense pas qu'il soit possible de monitorer les évènement de débug dans l'application en débuggage. WaitForDebugEvent ne semble fonctionner qu'avec des process créés ou attachés. Je n'ai pas testé la solution proposé sur cette page.
En tout cas, la question est intéréssante, je ne savais pas que de telle APIs existaient, et ca me donne des idées !
Bon voila, avec ca on récupère bien les évènement de débug :
Avec Windows dans les uses, FStProcess le chemin + nom du process à exécuter, FBoRunning booléen de contrôle d'arrêt de la boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 procedure Run; var vRcProcessInfo : PROCESS_INFORMATION; vRcStartUpInfo : STARTUPINFO; vRcDbgEvt : DEBUG_EVENT; begin if ((FStProcess <> '') and (FileExists(FStProcess))) then begin // Création du process à débugger if (CreateProcess(PChar(FStProcess), nil, nil, nil, False, DEBUG_ONLY_THIS_PROCESS, nil, nil, vRcStartUpInfo, vRcProcessInfo)) then begin FStLastOutPut := ''; FBoRunning := True; while (FBoRunning) do begin // On attend un évènement de débug if (WaitForDebugEvent(vRcDbgEvt, 150)) then begin // Traitement des différents évènements case vRcDbgEvt.dwDebugEventCode of { Evènement correspondant à un OutputDebugString On ne récupère pas directement la valeur passée dans le dans vRcDbgEvt.DebugString.lpDebugStringData, à priori il faut passer par un ReadProcessMemory (pas testé). } OUTPUT_DEBUG_STRING_EVENT : FStLastOutput := 'OUTPUT_DEBUG_STRING_EVENT : ' + vRcDbgEvt.DebugString.lpDebugStringData; // Autres cas : voir MSDN sur DEBUG_EVENT end; ContinueDebugEvent(vRcDbgEvt.dwProcessId, vRcDbgEvt.dwThreadId, DBG_CONTINUE); end; Application.ProcessMessages; end; end; end; end;
Oui, merci. C'est effectivement ce que j'avais déduit des diverses docs trouvées sur le web.
Partager