Hallo, hab folgende Frage: Ich möchte gerne andere Fenster mit meinem eigenen Programm ansteuern, also so etwas wie simulierten Tastendruck folgende Seite beschreibt es in VB: http://www.bwir.de/sonstiges/visualbasicwinamp , möchte es aber gerne in c++ programmieren und zwar einmal für win32 und einmal für suse linux. Wichtiger wäre mir erstmal für win32. Frage ist jetzt nurnoch wie, hat einer eine Idee oder ein Beispiel? Danke im Voraus!
Na, wie es für Windows geht, beschreibt bereits Dein VB-Code. Den nach C bzw. C++ zu portieren, sollte Dir gelingen, schließlich ruft das auch nur stinknormale Win32-API-Funktionen auf. Das ist wirklich simpel. Bei Linux solltest Du Dir die Dokumentation des jeweiligen Fenstermanagers ansehen, vermutlich ist das, was Du suchst, da beschrieben.
Gut, danke erstmal hab es schonmal geschafft das das Programm merkt ob Winamp auf ist oder nicht. Dummerweise bleibe ich beim senden einer message kleben!
Ersetze SendMessage durch PostMessage. SendMessage kehrt erst nach Auswertung der Nachricht durch die Zielapplikation zurück, PostMessage sofort.
Nach längerem tüfteln und rätseln hab ich es endlich geschafft! Trotzdem noch ein paar Fragen. Ich habe aus der winuser.h dieses: "WINUSERAPI BOOL WINAPI Beep(UINT);" gelöscht weil es ein Konflikt mit diesem hier gab: "WINBASEAPI BOOL WINAPI Beep(DWORD,DWORD);" in der winbase.h ist dies schlimm? Und dann noch eine Frage und zwar benutze ich in dem Sourcecode eine while Schleife die endlos ist, leider geht dann die cpu last auch auf 100%. Kann ich irgendwie ein interrupt schreiben, sodass das Programm erst dann weiter auswetet sofern überhaupt etwas an den Eingängen der Parallelen Schnittstlle geschieht? Nochmals Danke!
Dagegen kannst du so erst mal nichts machen. Aber du kannst nett sein, und zwischendurch immer mal etwas Rechenzeit abgeben. Schau dir mal die Funktion Sleep() an. Die gibt während der Wartezeit die CPU frei.
Bitte? Du hast in Headerdateien, die nicht von Dir sind, sondern mit dem Compiler mitgeliefert werden, irgendwelche Definitionen gelöscht? Das ist ganz großer Murks. Sowas macht man nicht. Nie. Deine Funktion Wait kann durch Sleep ersetzt werden.
In welcher Header kann ich den sleep finden ich benutze Dev-Cpp. Zudem löschen oder ändern von headern: Erstmal war das sowieso komisch beim ersten compilieren hat der nichts gesagt beim zweitenmal schon und ich habe die gleiche syntax benutzt! Zudem bin ich ja nicht blöd, ich habe schon ein Backup von den entsprechenden dateien gemacht und habe sie nach dem kompilieren wieder hergestellt!
Wie wär's mit einer richtigen Message-Loop und Timern timerP = SetTimer(NULL, NULL, milliseconds, timer); while (GetMessage(...) > 0) { TranslateMsg(...); } KillTimer(NULL, timerP);
Jo danke, aber es funktioniert wunderbar mit Sleep die CPU Leistung ist unter 1%. Dennoch bleibt eine Frage in der Header ist SendMessage so beschrieben: SendMessageA(HWND,UINT,WPARAM,LPARAM); und in meiner source so: SendMessage(FindWindow("Winamp v1.x", 0), 0x0111, 40045, 0);. Dies würde bedeuten das für UINT 0x0111 eingetragen ist leider weiss ich nicht wofür dies steht, da ich ehrlicherweise sagen muss das ich diesen Codeabschnitt aus einem winamp Forum kopiert habe. Wobei wer soll daruf kommen das da für UINT 0x0111 eingetragen werden muss den das war mein Hauptfehler. Trotzdem würde ich es gern erfahren wofür es denn zuständig ist. Den sourcecode habe ich jetzt geändert und mit beigelegt vielleicht kann ihn einer gebrauchen. Wie gesagt, ich habe temporär fürs compilieren aus der winuser.h dieses hier gelöscht:WINUSERAPI BOOL WINAPI Beep(UINT);, weil es ein Konflikt mit dem hier WINBASEAPI BOOL WINAPI Beep(DWORD,DWORD); aus der winbase.h gab. Wieso weiss ich auch nicht vielleicht ein Bug im compiler!
In die Windows Doku schauen! Die Parameter zu SendMessage sind: * Das Fenster an die die Message geschickt wird * Die Message selbst (als Code) * Die Parameter für diese Message als WPARAM und LPARAM So eine Message ist zb. WM_LBUTTONUP und das bedeutet dass das Ereignis 'Linke Maustaste wurde losgelassen' aufgetreten ist. Windows schickt diese Message dann an das Fenster das unter der Maus liegt. So eine Message ist natürlich nur ein Zahlencode und irgendwo in den Windows-Headern wurde für so einen Zahlencode ein 'sprechender Name' definiert #define WM_LBUTTONUP 0x1234 Wenn man lang genug sucht, würde man wahrscheinlich auch rausfinden, welche Message zum Code 0x0111 gehört, und was das für eine Message ist.
@Karl Heinz Buchegger: > Sollte in winbase.h sein Wenn man jemandem, der noch nicht viel mit WinAPI zu tun hatte, so etwas schreibt, sollte man IMHO immer auch erwähnen, dass man niemals #include <winbase.h> schreiben sollte, sondern steht #include <windows.h>. Nicht umsonst steht in der Doku durchweg: > Declared in Winbase.h; include Windows.h. (Hervorhebung von mir)
Yep. Ich hab die Sleep schnell in der MSDN nachgeschlagen und dort war tatsächlich winbase.h angegeben. Aber du hast natürlich recht. winbase.h wird normalerweise nicht inkludiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.