AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Benutzerdefinierte Nachricht mit Charpointer als wParam
Thema durchsuchen
Ansicht
Themen-Optionen

Benutzerdefinierte Nachricht mit Charpointer als wParam

Ein Thema von implementation · begonnen am 15. Okt 2009 · letzter Beitrag vom 15. Okt 2009
Antwort Antwort
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 15:57
Ich möchte an ein anderes Fenster in einer anderen Anwendung eine Nachricht verschicken (NM_NRDE_MESSAGE = WM_USER+2).
Als wParam soll dabei ein PChar übergeben werden:
Delphi-Quellcode:
// Anwendung 1
var x: pchar;
...
w2 := FindWindow('TNWLForm','XYZ');
x := 'ABC';
SendMessage(w2,NM_NRDE_MESSAGE,wparam(x),0);
Delphi-Quellcode:
// Anwendung 2
NM_NRDE_MESSAGE: begin
  s := string(pchar(wparam));
  writeln(s);
end;
Ausgabe:
Zitat:
dunaryvarop
Was könnte das Problem sein?
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:07
Versuch mal bitte:
Delphi-Quellcode:
// Anwendung 1
var x: string;
...
w2 := FindWindow('TNWLForm','XYZ');
x := 'ABC';
SendMessage(w2,NM_NRDE_MESSAGE, INTEGER(PCHAR(x)),0);
Wenn du x als PChar nutzen möchtes musst du erst speicher reservieren.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:10
Läuft auch noch nicht.
Ausgabe:
Zitat:
****&
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:31
Solche Nachrichten kannst du nur innerhalb eines einzelnen Programms verschicken. Zwischen Programmen läufst du in das Problem nicht geteilter Adressräume, aber dafür gibt es WM_COPYDATA.
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:35
Und wie benutze ich WM_COPYDATA?
PSDK hilft mir auch nicht besonders viel weiter...
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:37
Das nächste Mal bitte selber suchen: WM_COPYDATA
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:48
... dann bringt mich WM_COPYDATA nicht weiter, da ich den Datenverkehr eben speziell seperieren will.
Marvin
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 16:57
Neben WM_COPYDATA gibt es zur IPC mal so als Suchbegriffe noch: Memory-Mapped Files, Pipes, Mailslots, und man kann auch den localhost mit ein paar Sockets "missbrauchen". (Diese Liste erhebt keinen Anspruch auf Vollständigkeit.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam

  Alt 15. Okt 2009, 17:49
Ich hab's jetzt so gelöst:
Delphi-Quellcode:
  w2 := FindWindow('TNWLForm','XYZ');
  Sendmessage(w2,NM_NRDE_MESSAGE_BEGIN,20*$10000,65+(66*$100)+(67*$10000)+(68*$1000000));
  Sendmessage(w2,NM_NRDE_MESSAGE_DATA,69+(70*$100)+(71*$10000)+(72*$1000000),73+(74*$100)+(75*$10000)+(76*$1000000));
  Sendmessage(w2,NM_NRDE_MESSAGE_END,77+(78*$100)+(79*$10000)+(80*$1000000),81+(82*$100)+(83*$10000)+(84*$1000000));
  Sendmessage(w2,NM_NRDE_MESSAGE_BEGIN,20*$10000,65+(66*$100)+(67*$10000)+(68*$1000000));
  Sendmessage(w2,NM_NRDE_MESSAGE_DATA,69+(70*$100)+(71*$10000)+(72*$1000000),73+(74*$100)+(75*$10000)+(76*$1000000));
  Sendmessage(w2,NM_NRDE_MESSAGE_END,77+(78*$100)+(79*$10000)+(80*$1000000),81+(82*$100)+(83*$10000)+(84*$1000000));
Delphi-Quellcode:
// Anwendung 2
NM_NRDE_MESSAGE_BEGIN:   begin
         nrdeOpen := true;
         nrdeType := Lobyte(Loword(wParam));
         nrdeLen := Hiword(wParam);
         nrdeBufAsc := '';
         if (nrdeType=NRDE_ASCII) or (nrdeType=NRDE_CONTROL) then begin
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(lParam))); Dec(nrdeLen); end;
         end;
         WriteLn('NRDE ',nrdeBufAsc);
      end;
   NM_NRDE_MESSAGE_DATA: if nrdeOpen then begin
         if (nrdeType=NRDE_ASCII) or (nrdeType=NRDE_CONTROL) then begin
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(lParam))); Dec(nrdeLen); end;
         end;
         WriteLn('NRDE ',nrdeBufAsc);
      end;
   NM_NRDE_MESSAGE_END: if nrdeOpen then begin
         if (nrdeType=NRDE_ASCII) or (nrdeType=NRDE_CONTROL) then begin
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(wParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(lParam))); Dec(nrdeLen); end;
            if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(lParam))); Dec(nrdeLen); end;
         end;
                      end;
Umständlich, aber es läuft...
Marvin
  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 06:08 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