Andere Fenster unter win32 und linux ansteuern

Gast #386469
Lesenswert?

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!
Gast #386470
Lesenswert?

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.
Gast #386473
Lesenswert?

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!
Angehängte Dateien:
Gast #386475
Lesenswert?

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.
Gast #386476
Lesenswert?

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!
Gast #386479
Lesenswert?

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!
Angehängte Dateien:
#386480
Lesenswert?

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.
Gast #386481
Lesenswert?

@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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren