FlashWindowEx hooken (mehr oder weniger gelöst)

Hallo,

Bei so'nem Computerspiel (Heroes of Might and Magic V) blinkt immer der Button in der Taskleiste, wenn das Spiel minimiert ist und man dran ist (-> ist 'n rundenbarsiertes Spiel). Jetzt habe ich mir gedacht, dass ich mit Microsoft Detours (1.5) die Funktion hooken könnte und so z.B. eine Meldung ausgeben könnte, wenn der Spieler dran ist.
Ich würde mal denken, die aufgerufene und zu hookende Funktion wäre in diesem Fall FlashWindowEx().
Leider gibt's da eine Sache, die ich nicht so richtig verstehe:
Ich hab in meinem Code Testweise einfach nur

BOOL Replace_FlashWindowEx( PFLASHWINFO &pfwi)
{
return Real_FlashWindowEx(pfwi);
}

geschrieben, ich bekomme aber sogar beim öffnen von Skype durchgehend diese "Problembericht senden/nicht senden"-Fehlermeldungen.
Beim Hooken der Funktion CreateProcessW auf die gleiche Weise bekomme ich aber keine Fehlermeldung und es geht alles wie erwartet...

edit: Ich hab mir in Delphi mal 'nen Programm geschrieben, das die Funktion aufruft. Dort bekomme ich eine Zugriffsverletzung beim Lesen von Adresse 0.

Warum? Wie mache ich, dass es geht?


EDIT

*uck, mir ist grad aufgefallen, dass ich im Gegensatz zu CreateProcess das Schlüsselwort "WINAPI" weggelassen habe :/ . Mit dem geht's nämlich. Verstehe aber leider nicht so ganz warum? Dachte eigentlich, dass beträfe nur die Reihenfolge, in der die Parameter aufgerufen würden - dachte, bei einem Parameter wäre das dann egal. Also, woran liegt's?
 
Hi, also http://msdn.microsoft.com/en-us/library/ms679347(VS.85).aspx besagt, dass:

pfwi [in] A pointer to a FLASHWINFO structure.

und wenn ich eine funktion einen pointer übergeben will, dann nimmt die funktion es in etwa so an:

Code:
void funktion(int *test) { ... }

von daher würde ich behaupten, probier doch einfach mal testweise:

Code:
BOOL Replace_FlashWindowEx( PFLASHWINFO *pfwi)
{
return Real_FlashWindowEx(pfwi);
}
Ich hoffe das ist nicht allzuviel dummsinn

MfG zaibl
 
EDIT
*uck, mir ist grad aufgefallen, dass ich im Gegensatz zu CreateProcess das Schlüsselwort "WINAPI" weggelassen habe :/ . Mit dem geht's nämlich. Verstehe aber leider nicht so ganz warum? Dachte eigentlich, dass beträfe nur die Reihenfolge, in der die Parameter aufgerufen würden - dachte, bei einem Parameter wäre das dann egal. Also, woran liegt's?

Ich denke mal die Standard-Aufrufkonvention deines Compilers ist dann bei dir auf sowas wie fastcall gestellt. (Parameter in den Registern)
 
Zurück
Oben