Hallo.
Ich habe Win XP SP3. Ich habe alle möglichen Kombinationen probiert und kann versichern, dass MessageBoxA() partout nicht ging. Lediglich AudaCity zeigte ab und zu (!) bei dem "Möchten Sie speichern?" Dialog das [hooked]. Alle anderen Anwendungen waren nicht modifiziert. Keine Ahnung wieso!
Aber: midiOutShortMsg() konnte ich wunderbar hooken und den MIDI-Verkehr mitschneiden (ich habe zuerst den obrigen Code verwendet, dann das Traffic-Demo abgewandelt, damit die Auswertung durch eine Host-Anwendung durchgeführt wird.)
Jetzt habe ich noch ein Problem:
Delphi-Quellcode:
h := GetModuleHandle('winmm.dll');
if h > 0 then
begin
@origMessageBoxA := GetProcAddress(h,'midiOutShortMsg');
if @origMessageBoxA <> nil then
uallHook.HookCode(@origMessageBoxA,@callbackMessageBoxA,@newMessageBoxA);
end;
Alle Prozesse (auch die "neu hinzugekommenen") bekommen meine MIDI-Hook.DLL injeziert. Das Problem ist, dass nicht jede Anwendung winmm.dll eingebunden hat (bei WinAmp wird die winmm.dll beispielsweise erst eingebunden, wenn man eine MIDI öffnet und abspielt.) Bedeutet: Alle Prozesse, die die winmm.dll später einbinden, werden nicht mit aufgezeichnet, da die Bedingung "h > 0" nicht beim
DLL-Init erfüllt war.
Frage: (1) Was soll ich dagegen unternehmen? Soll ich vielleicht eine Endlosschleife in die
DLL einfügen, sodass der Code ausgeführt wird, sobald "h > 0" wir?
Folgefrage: (2) Wenn "h > 0" eingetreten ist, muss ich dann den HookCode() immer wieder durchführen (z.B. für den Fall dass die zu hook'ende
DLL geladen und dann entladen und dann wieder geladen wurde?
Und: (3) Ist es nicht fatal, wenn man eine
DLL injeziert, die eine Endlosschleife beeinhaltet? Wenn jeder Prozess des Systems eine solche
DLL injeziert bekommt, könnte die CPU-Auslastung ziemlich hoch werden, oder?
Gruß
blackdrake