AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_COPYDATA msg senden und gleichzeitig antwort erhalten?
Thema durchsuchen
Ansicht
Themen-Optionen

WM_COPYDATA msg senden und gleichzeitig antwort erhalten?

Ein Thema von 1234588 · begonnen am 23. Feb 2007 · letzter Beitrag vom 23. Feb 2007
Antwort Antwort
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#1

WM_COPYDATA msg senden und gleichzeitig antwort erhalten?

  Alt 23. Feb 2007, 03:59
hallo community

http://www.delphipraxis.net/internal...ight=tformrecv

dieses snippet hab ich in mein programm eingebaut und hab ein kleineres anliegen.
nehmen wir an ich möchte die caption meiner anwendung auslesen, natürlich könnte man das mit WM_GETTEXT machen aber das soll ja nur ein bsp. sein.
als erstes erhalte das handle meiner anwendung mittels FindWindow und sende meine nachricht an das programm, dieses wertet die nachricht aus und sendet an Msg.From meine caption die ich erhalten möchte, mein problem ist eben nun das ich in beiden anwendungen die "WMCopyData" procedure habe, das ich in beiden anwendungen die nachrichten mühsam auswerten muss.
ich hab eigentlich relativ wenig lust auf so ein hin und her.
ich bins von winamp gewohnt das man das z.b. so machen kann:
Delphi-Quellcode:
var
  i: Integer;
begin
  i := SendMessage(FindWindow('Winamp v1.x', nil), WM_USER, 0, 104);
das gibt mir den aktuellen status von winamp zurück, 1 für play, 3 für pause und alles andere für stop. hier wirkt sendmessage wie eine function die mir einen wert zurück gibt und das hätte ich auch gerne, nur hab ich keine idee wie ich das realisieren könnte und würde mich sehr über ein kleines beispiel freuen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: WM_COPYDATA msg senden und gleichzeitig antwort erhalten

  Alt 23. Feb 2007, 06:57
Der unterschied ist das bei dem einen der Rückgabetyp eine Zahl ist bei dem anderen eine Zeischenkette.
Eine Zahl kann einfach über das Messageresult zurück gegeben werden, bei Zeischen geht das nicht weil das Messageresult eben nur ein 4 Byte großer Integer ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: WM_COPYDATA msg senden und gleichzeitig antwort erhalten

  Alt 23. Feb 2007, 07:50
Du könntest einen Pointer auf deine Zeichenkette zurückgeben und dann mit readprocessmemory den string auslesen. Da musst du allerdings absichern, dass der String in dem einen Process solange existiert, bis der andere ihn ausgelesen hat.

die zweite Möglichkeit ist du reservierst in dem (sendmessage) aufrufenden Process Speicher für die Zeichenkette und der verarbeitende Process schreibt mit writeprocessmemory sein Ergebniss dort rein. Damit umgehst du die Laufzeitprobleme aus der ersten Methode.

Die dritte Methode geht über globalAtoms. Ein Atom ist nix weiter als eine String mit Referenznummer. Mit dieser Nummer kannst du recht einfach in einem anderen Process den String lesen. Und mit Sendmessage überlieferst du nur die Nummer
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz