Laden...

Grundsätzliche Möglichkeiten mit Fremdanwendung zu interagieren

Erstellt von Buchstabensuppe vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.362 Views
B
Buchstabensuppe Themenstarter:in
88 Beiträge seit 2016
vor 8 Jahren
Grundsätzliche Möglichkeiten mit Fremdanwendung zu interagieren

Hallo Leute,

langsam aber sicher neigt sich mein kleines Projekt (ein Spielchen) nach langer Entwicklungszeit und noch längerer Pause im Programmieren dem Ende zu.

Und ich mache mir er(n)ste Gedanken was ich danach angehen könnte.

Viele kennen sicher die Spieleplattform Steam.
http://store.steampowered.com/

Dort gibt es eine Freundesliste zum Chatten, die ich recht oft als eine Art Messenger benutze und es hat mich schon immer geärgert, dass es dort keine Chat-History gibt (oft will man aus den alten Gesprächen nochmal was nachgucken...)

Meine Idee wäre ein Programm evtl. auch ein Dienst, dass den Chatverlauf in TXT Dateien für mich protokolliert, das haben die Entwickler wohl vergessen.

Dafür müsste ich dann (so denke ich) ungefähr so vorgehen:

  • Abfragen ob das Programm überhaupt läuft

  • Durch Fensterhandles irgendwie ermitteln ob ein Chatfenster geöffnet ist (Es gibt keinen wirklichen Fenstertitel, nur den Namen desjenigen mit dem man chattet) Leider gibt es auch Tabs.

  • Evtl. Fokus aus der Chat-Textbox entfernen und mir den Chatverlauf durch Markieren + Copy & Paste organisieren (diese Funktionalität hat das Control)
    => Das müsste schnell gehen damit es nicht beim Chatten behindert.

  • Entsprechend mit den alten Textdateien abgleichen und neues wegschreiben (man sieht immer nur die letzten 20 - 30 Nachrichten im Chatfenster).

Ich hab schon etwas recherchiert hier im Forum und bin auf Dinge wie "EnumWindows" aber vorallem auf WinAPI gestoßen...

Gibt es einen bequemeren Ansatz in .Net bzw. wäre mein Vorhaben ohne WinAPI überhaupt umsetzbar?
Meine Kenntnisse würde ich als leicht fortgeschrittener Anfänger einstufen, ich habe zwar eine abgeschlossene Ausbildung in der IT aber das heißt in meinem Fall jetzt nicht all zu viel von daher würde ich es eigentlich für sinnvoller halten erstmal meine Kenntnisse in C# weiter zu vertiefen, bevor ich mich mit der WinAPI auseinandersetze.

Habt ihr Ideen, Anregungen, Tipps, Anmerkungen?

Danke und Gruß

Buchstabensuppe

S
506 Beiträge seit 2006
vor 8 Jahren

Sowas geht eigentlich nur vernünftig wenn die Applikation dafür eine Schnitstelle bereitstellt. Alles andere ist meist unbefriedigend.

Wenn du Glück hast benutzt deine Applikation die standard Window-Api. Dann kannst du probieren das Fensterhandle zu ergattern, wie du schon meintest.

B
Buchstabensuppe Themenstarter:in
88 Beiträge seit 2016
vor 8 Jahren

Okay Danke schonmal.

Das klingt ja schonmal relativ ernüchternd..

Müssen die auf einem Windows System nicht die Standard Windows API in irgendeiner Form benutzen?

Auf Wikipedia kann ich nicht viel finden, da steht nur C++ / Objective C und dass es auf Windows, Mac, Linux und Mobilgeräten läuft. Außerdem gibt es wohl eine Steam API.

Ich hätte gedacht mit WinApi DLLImport geht es auf jeden Fall, aber selbst dann würde ich es wohl eher erstmal hinten anstellen. Versuche grad erstmal nur ein Gefühl zu bekommen was möglich wäre.

16.841 Beiträge seit 2008
vor 8 Jahren

Nö. Wenn Du lustig bist dann kannste ja die ganze Form inkl. Text selbst zeichnen.

B
Buchstabensuppe Themenstarter:in
88 Beiträge seit 2016
vor 8 Jahren

Kann ich rausfinden ob die benutzt wird? Oder muss ich dafür das Steam Team anschreiben? 😉

edit:

In höheren Programmiersprachen, wie zum Beispiel C, C++ oder Delphi, wird die WinAPI immer verwendet, wenn Windows-Anwendungen geschrieben werden, obwohl der Programmierer sie eventuell direkt im Quelltext gar nicht aufgerufen hat. Die Aufrufe der API werden durch eine Laufzeitbibliothek gekapselt, die ihrerseits Funktionen der Windows API aufrufen.

Windows Application Programming Interface

S
506 Beiträge seit 2006
vor 8 Jahren

Du kannst einfach mal schauen was du alles für Fensterhandles bekommst.
Standard Windows-Controls sind auch Fenster.

Wenn du ein ListBox-Handle hättest könntest du probierem mit diesem über Window-Messges
zu interagieren (z.B. GETITEMDATA).

Edit:
Klar, eine Windows-Applikation benutzt die Windows-Api, die Frage ist nur wie viel davon.
Zum erzeugen eines Fensters wird die WinApi benötigt. Was dann auf dem Fenster zu sehen
ist, ist dann nochmal eine andere Geschichte. Dort könnten wieder "Unterfenster"-plaziert sein
oder "eigene Zeichnungen".

B
Buchstabensuppe Themenstarter:in
88 Beiträge seit 2016
vor 8 Jahren

Alles klar, vielen Dank an euch. Ich hab jetzt erstmal was zum spielen 😉

3.003 Beiträge seit 2006
vor 8 Jahren

Steam bietet eine (lokale) Schnittstelle für so etwas. Allerdings ist diese API nicht öffentlich dokumentiert, so dass man u.U. etwas herumprobieren muss.

Also kein WinAPI-Kram nötig, nur etwas Recherche. Such mal nach "chat logger ++", der hat genau das gemacht.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

B
Buchstabensuppe Themenstarter:in
88 Beiträge seit 2016
vor 8 Jahren

Geil, das sieht auf den ersten Blick nach einer fertigen Lösung aus 👍 👍 👍
Vielen Dank Latino!

Ich werde trotzdem versuchen etwas herumexperimentieren, melde mich bestimmt nochmal hier die Tage / Wochen 😉

B
Buchstabensuppe Themenstarter:in
88 Beiträge seit 2016
vor 8 Jahren

Hi,

also ich habe gerade nochmal kurz versucht mich der Sache anzunähern.
Und zwar erstmal mit der ursprünglichen Idee, also der klassische Weg über die Win32 API und den Fensterhandles (LaTino deinen Vorschlag werde ich aber auf Jeden Fall auch noch mal genauer unter die Lupe nehmen!)

Ich hab ein Beispielprogramm im Netz gefunden, dass die Fensterhandles ausliest und (solange ich nicht mit Tabs arbeite) funktioniert das schonmal super, an die Fensterhandles der Chatfenster käme ich also auf jeden Fall schonmal ran 🙂

Jetzt steht da aber unter "Prozess Klasse" allerdings "USurface_[Zahl]"

Das ist der Beweis dafür, dass die Fenster von den Machern komplett selber gezeichnet werden, oder?
So habe ich also schonmal keine Chance an ein ListBox Control ranzukommen, stimmts?

edit: Oder sagt das vielleicht überhaupt nix aus?
"USurface" sagt mir nix, ich hatte halt nur in einem Forum gelesen, dass das nach OpenGL / DirectX klingt und wohl ein "CustomDraw" wäre, das klingt halt verdächtig danach was Abt weiter oben vermutete 😉
Allerdings steht da auch bei andern Programmen normalerweise immer eine anscheinend willkürliche Klasse. Kann mit USurface vielleicht zufällig irgendwer was anfangen?

742 Beiträge seit 2005
vor 8 Jahren

Ich glaube bei Steam wirst du so nicht weiterkommen. XAML und Winforms lässt sich nur sehr schwer in DirectX / OpenGL Awendungen integrieren und die praktisch jede Game Engine hat ihr eigenes System um Steuerelemente darzustellen. Ich nehme an, dass Steam deshalb auch eine Eigenentwicklung verwendet, die sowohl im Spiel selbst, als auch auf im Desktop Modus verwendet wird. Also nix mit Handles.

16.841 Beiträge seit 2008
vor 8 Jahren

USurface steht für nichts anderes als User Surface. Übliche Bezeichnung bei UI Elementen.
Da kann aber - wenn Steam lustig ist - auch "Kuchen" oder "Parkbank" stehen. Das ist nur Freitext.