C++ WinApi - Messages von anderem Fenster empfangen



  • Hi,

    ich möchte bei einem C++ Programm Skype ansprechen. Dabei nutze ich die WinApi.
    Eigentlich ist es ganz einfach: man schickt an alle Fenster (broadcast) eine bestimmte Nachricht, die nur Skype versteht. Daraufhin antwortet Skype und man kann mit weiteren Messages bestimmte Skype Aktionen ausführen. (https://developer.skype.com/Docs/ApiDoc/Skype_API_on_Windows)
    Allerdings kann ich iwie nicht die Antworten verarbeiten.

    Ich schicke mit SendMessage() die Nachricht und gebe dabei einen Handler auf mein Fenster an, damit Skype auch wirklich antworten kann. Der Handler exisitiert und ist korrekt gesetzt. Wenn ich das ganze Ausführe bekommt kommt auch eine Skype Mitteilung, dass da etwas auf Skype zugreifen will, aber dass Skype nicht antworten kann.

    Wie kann ich die Antworten verarbeiten? Im Moment habe ich dafür einen extra Thread mit einer Message Loop, die die Message Queue bearbeitet, also sowas:

    MSG oMessage;
    while(GetMessage( &oMessage, 0, 0, 0)!=FALSE)
    {
          TranslateMessage(&oMessage);
          DispatchMessage(&oMessage);
    }
    

    In dem WinProc von meinem AbsenderFenster würde ich dann auf die Skypespezischen Antwort Werte eingehen, allerdings kommt da nie eine richtige SkypeAntwort an, sondern nur andere Messages, die nicht von Skype kommen.

    Hat jmd. ne Idee wie ich die Messages richtig verarbeiten kann?



  • okay, du hast nicht wirklich viel Ahnung von Der API...
    erstmal, es heisst Handle (GANZ grob und aus dem zusammenhang gerisse nübersetzt: Griff) das !=FALSE in der Ereigniswarteschleife kannste dir sparen, ohne gegenteilige Angaben muss eine while schleife (das gillst für alle anderen ausdrücke und kontrollstruckturen auch) IMMER true ergeben, esseiden du schreibst eben ein " ! " davor, die Ereigniswarteschleife ist aber sonst eigentlich richtig, außer, dass der 2. Parameter (wenn du alle Nachrichten verarbeiten wills) nich numerisch, sondern binär NULL sein muss...

    also eine verbesserte (und die standart ohne PeekMessage) Ereigniswarteschleife:

    while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
    

    dann zu FEnsterprotedur (denn auf die kommt es beim eigentlichen Bearbeiten an),
    ich hab mir jetz grad mal den Link genau angeguckt, und ich denke, du solltest das erstmal vergessen und programmieren lernen, ich habe nämlich den Eindruck, du machst das nur wegen Skype und kannst garnciht wirklich programmieren,
    weil eigentlich ist alles eindeutig was auf der Seite steht, du registrierst die Nachrichtentypen und antwortest im switch der Fensterprozedur darauf, das ist aber absolut unterstes Neveau, lern am besten erst programmieren 😉

    es ist föllig unnötig dafür nen extra Thread auf zu machen (ich meine jetz n programmthread und nich forumthread), das kannst du ganz normal in der Fensterprozedur machen, steht doch alles auf der Seite.

    außerdem, unten kannst du nen beispielcode downloaden, damit sollte eigentlich dann wirklich jedes Irrtum beseitigt sein...



  • Hier
    ➡ http://www.c-plusplus.net/forum/viewtopic-var-t-is-217065.html
    gibt es einen Haufen Links mit Lernmaterial uzr WinAPI. 😉


Anmelden zum Antworten