MessageCodes umwandeln
-
in einem meiner logs tauchten sie jedenfalls auf

ich werde morgen mal eine neue log erstellen und schaun ob sie wieder da sind

(dummerweise habe ich die alte mit diesem messages bereits gelöscht
)
lg,
andi01.
-
andi01 schrieb:
buntehaare schrieb:
lade sie in einen speicher und durchsuch sie
das geht wegen der performance nicht, denn wenn man zB das Fenster so an den Bildschirmrand schiebt, dass es nur noch teilweise sichtbar ist und wieder richtung mitte zieht kommen schon mal 50 WM_PAINTs und andere nachrichten pro sekunde.
es sollte ziemlich unmöglich sein, eine Liste mit mehreren tausend einträgen 50 mal pro sekunde durchzugehen und die codes dabei umzurechnen(da dürfte einmal komplette durchsuchen und umrechnen max. 5-10ms dauern!) [jenachdem wieviele einträge es genau sind, die sprünge machen es ziemlich schlecht zählbar^^].quatsch, zb 2GB, nach 4 bytes zu durchsuchen wenn sie im ram sind dauert keine 10 ms
cu, den speicher zu durchsuchen geht ras3end schnell mal überlegt wieviel daten in GB eine RAM pro sekunde verschieben kann?
-
andi01 schrieb:
buntehaare schrieb:
lade sie in einen speicher und durchsuch sie
das geht wegen der performance nicht, denn wenn man zB das Fenster so an den Bildschirmrand schiebt, dass es nur noch teilweise sichtbar ist und wieder richtung mitte zieht kommen schon mal 50 WM_PAINTs und andere nachrichten pro sekunde.
es sollte ziemlich unmöglich sein, eine Liste mit mehreren tausend einträgen 50 mal pro sekunde durchzugehen und die codes dabei umzurechnen(da dürfte einmal komplette durchsuchen und umrechnen max. 5-10ms dauern!) [jenachdem wieviele einträge es genau sind, die sprünge machen es ziemlich schlecht zählbar^^].quatsch, zb 2GB, nach 4 bytes zu durchsuchen wenn sie im ram sind dauert keine 10 ms
cu, den speicher zu durchsuchen geht ras3end schnell mal überlegt wieviel daten in GB eine RAM pro sekunde verschieben kann?
-
@ bunthehaare:
ich durchsuche ja praktisch den ram danach, sie stehen ja in einer std::map im Speicher. (nachdem ich sie aus der textdatei eingelesen habe). und die performance macht überhaupt keine Probleme!
@Martin Richter:
was die beiden fehlenden Nachrichten betrifft:
dec:147 hex:0x0093 Nachricht: ?
dec:146 hex:0x0092 Nachricht: ?ja, ich bin mir sicher! sie stehen gleich mehrmals in meinem log, und da stehen nunmal nur nachrichten die auch in der WndProc ankamen weil sie doch innerhalb der neuen WndProc geloggt werden!
In meinem log stehen sie unter dem dezimalwert 147 bzw. 146 da.
Auch wenn das log doch sehr groß wurde bis die zielnachrichten endlich vorkamen, habe ich es hier mal geuploadet, für den Fall dass sich jemand eine 2.5MB textdatei als lektüre antun will^^
link: http://www.dateiupload.com/files/GC42qXp363.log
die Messages wurden definitiv geloggt

und zwar (wie alle geloggten messages) mit allen zu diesem Zeitpunkt verfügbaren daten:also: Uhrzeit (sogar ms), Datum, WPARAM, LPARAM, WPARAM HIWORD, WPARAM LOWORD, LPARAM HIWORD, LPARAM LOWORD, HWND des Zielfensters, ob sie ans child oder parent gingen, natürlich code der message, cursorposition zur zeit als die message empfagen wurde usw

ach ja, die log entstand aus notepad, ich habe eine dll injected und alle fenster incl. childs gesubclasst.
im log steht übrigens auch alles über prants und childs, hwnds, anzahl,...
edit: die Nachrichten stehen sogar gleich am anfang des logs!
Martin Richter schrieb:
SPI_SETDOCKMOVING ist keine Nachricht!
das dachte ich eigentlich auch
aber der code 145(dec) kommt eindeutig in der log als nachricht an und (nach hex konvertiert) ist dieser Code in WinUser.h nur als SPI_SETDOCKMOVING definiert un in allen anderen Listen gar nicht, das ist etwas verwirrend...lg,
andi01.
-
Aber nur weil in winuser.h steht, dass
SPI_SETDOCKMOVING0x0091 ist heißt das noch lange nicht, dass es sich dabei um eine Nachricht handelt, die an ein Fenster geschickt wird. BeiSPI_SETDOCKMOVINGhandelt es sich um ein Flag. Es kann durchaus Überschneidungen zwischen irgendwelchen Flags und tatsächlichen Nachrichten geben, das heißt aber nicht, dass die in irgendeiner Weise etwas miteinander zu tun haben müssen.
Ich würde behaupten bei den Nachrichten handelt es sich um windowsinternen Nachrichten, die nirgends dokumentiert sind.
-
gut, ich habe jetzt die nachrichten eingetragen und alles funktioniert soweit, danke an alle

dann kann ich ja jetzt anfangen mir die abfolgen der messages anzuschauen (zB bei buttonklicks).
weiß jemand auf welche messages ich bei einem buttonklick achten muss? (da kommen so viele an
)also ich habe schon rausgefunden, dass dem entscheidenden WM_COMMAND eigentlich immer ein WM_NCHITTEST mit den absoluten mauskoordinaten im LPARAM HIWORD(y) und LOWORD(x) vorausgeht.
allerdings steht im WM_COMMAND LPARAM LOWORD immer eine Zahl, ist das die id des buttons oder controls das angeklickt wurde?
oft kommen vorher auch WM_MOUSEMOVE und WM_SETCURSOR, werden die auch beim klicken gesendet oder wenn man die maus auf den button stellt?
und wenn ich jetzt einen buttonklick simulieren will, reichen dann WM_NCHITTEST und WM_COMMAND oder muss ich auch WM_SETCURSOR und WM_MOUSEMOVE schicken?
lg,
andi01.
-
Was willst Du eigentlich machen?
Was interessiert Dich was für Nachrichten bei einem Buttonb-Click ausgelöst werden.Viele Nachrichten werden doch nur in Folge von vorher empfangenen Nacrichten ausgelöst.
Auf ein WM_NCMOUSE... Nachricht müssen WM_NCHITTEST folgen, daraus entsteht dann erst eine WM_MOUSE... Nachricht, was wiederum evtl. WM_SETCURSOR auslöst etc.Alles ist in der MSDN dokumentiert...
Nochmal: Was willst Du eigentlich damit?
BTW: Spy++ zeigt Dir das alles perfekt an. Baust Du Spy+ nach oder was?
-
Martin Richter schrieb:
Was willst Du eigentlich machen?
ich will herausfinden welche messages ich in welcher reihenfolge und an welche fenster senden muss wenn ich zB einen fremden Button anklicken will.
Martin Richter schrieb:
Was interessiert Dich was für Nachrichten bei einem Buttonb-Click ausgelöst werden.
ganz einfach: wenn ich selber so einen Klick simulieren will muss ich wissen welche messages ich wohin senden muss.
zum thema button anklicken habe ich natürlich auch schon gegoogelt, allerdings waren die meisten Beispiele nur für eigene Buttons oder mit mouse_event().
Ich habe noch nirgends ein Beispiel gefunden wo steht welche Messages ich in welcher reihenfolge senden muss, wenn ich einen button anklicken will.deshalb wollte ich mir mit diesem projekt einfach mal anschaun welche messages gesendet werden wenn ich einen button klicke. Aber das ist wohl doch komplizierter als ich dachte...
wenn spy++ das alles anzeigt würde das auch reichen... aber wo bekomme ich das her? ich habe schonmal bei visual studio 2010 im ordner gesucht aber keine spyxx.exe oder spy++.exe gefunden und ich finde sie auch nirgends zum download

lg,
andi01.
-
Man sollte keine Nachrichten, die normalerweise nur von Windows verschickt werden, selbst verschicken, da das zu undefiniertem Verhalten führen kann.
Zu den Themen Maus- und Tastatureingaben simulieren solltest du hier im Forum eigentlich genug finden, benutze einfach mal die Suche.
-
ja, ich habe auch Beispiele gefunden.
das Problem dabei ist, dass man das Fenster in dem der anzuklickende Button ist nicht minimiert lassen kann sondern kurz einblenden muss, um dann den Mausklick auszuführen (mouse_event, SendInput(), etc. ).
Ich bin auf der Suche nach einem Weg wie man einen Button klickt ohne den User dabei "zu stören", also dass alle fenster so bleiben wie sie sind und ich keine maximieren muss...
alle gefundenen Beispiele waren zu mouse_event() oder SendInput().
deshalb versuch(t)e ich an den jeweiligen Button einfach die entsprechenden Messages zu senden.
mir wäre eine Alternative zum senden der Messages auch lieber, aber ich habe noch nirgends eine gefunden

BTW: wo bekomme ich die spyxx.exe jetzt eigentlich her?
lg,
andi01.