AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Text zur anderer Anwendung senden
Thema durchsuchen
Ansicht
Themen-Optionen

Text zur anderer Anwendung senden

Ein Thema von Sugar · begonnen am 18. Nov 2013 · letzter Beitrag vom 20. Nov 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 09:31
Ausprobieren?
Meine Antwort war deswegen als Frage formuliert, weil sie mir zu einfach schien und ich mir nicht sicher war, ob diese Lösung überhaupt in die Richtung der Frage zielte.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#12

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 10:07
Meinst Du so?

Delphi-Quellcode:
for i := 1 to length(MeinString) do
begin
  sendmessage(handle,wm_char,ord(MeinString[i]),0);
end;

Autsch ....
hier mal meine SendDebug function ...

Delphi-Quellcode:

function SendDebug(Value : string):Integer;
var
  RcvHandle: THandle;
  cd: TCopyDataStruct;
begin
  RcvHandle:=GetRcvHandle;
  result := 0;
  if RcvHandle<>0 then begin
    cd.dwData:=0;
    cd.cbData:=Length(Value)+1;
    cd.lpData:=PChar(Value);
    result := SendMessage(RcvHandle, WM_COPYDATA, Application.Handle, Integer(@cd));
  end;
  LastDebugString := Value;
end;
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Medium

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

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 10:40
Ich weiss nicht, ob WM_CHAR ein KeyDown/Pressed auslöst. Ich dachte eher an WM_KEYDOWN und WM_KEYUP.
"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
musicman56
(Gast)

n/a Beiträge
 
#14

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 10:44
Hallo,

meine Vermutung ist, das das DBGrid einfach die Tastatur (OnKeyDown, OnKeyPress...) abfragt, und dabei jedesmal einen select oder Ähnliches abschickt....

Zitat von Sugar:
Die Anwendung die ich jetzt bedienen muss setzt mit jedem Tatsendruck einen SELECT ab (warum auch immer so kompliziert weiß ich nicht
...und aus diesem Grund habe ich WM_CHAR vorgeschlagen, weil man dadurch die "eventuell erforderliche" Möglichkeit hat, eine kleine Verzögerung einzubauen. Das geht mit WM_COPYDATA nicht.

Zum Beispiel:
Delphi-Quellcode:
for i := 1 to length(MeinString) do
begin
  SendMessage(handle,wm_char,ord(MeinString[i]),0);
  Sleep(100);
end;
@Medium Stimmt, WM_KEYDOWN oder WM_KEYUP könnte natürlich auch die Lösung sein. Das muss man einfach mal ausprobieren. Wichtig erscheint mir die Verzögerung, damit dem Zielprogramm etwas Zeit bleibt, den Tastendruck zu verarbeiten.

Geändert von musicman56 (19. Nov 2013 um 10:48 Uhr) Grund: @Medium war schneller ;-)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 10:49
WM_COPYDATA und Co. funktiuoniert aber auch nur, wenn man auf beide Programme Zugriff hat, oder der Empfänger sowas schon implementiert hat,
was hier aber wohl nicht der Fall ist.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 10:56
Meinst Du so?

Delphi-Quellcode:
for i := 1 to length(MeinString) do
begin
  sendmessage(handle,wm_char,ord(MeinString[i]),0);
end;

Autsch ....
So schlimm mein Code?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#17

AW: Text zur anderer Anwendung senden

  Alt 19. Nov 2013, 19:05
Communicate between processes using windows messaging

http://www.delphidabbler.com/tips/51

Delphi-Quellcode:
SENDER:

// wmCopyData
// Allows inter-process communications via Windows WM_COPYDATA messaging.
procedure wmCopyData(WndClass:PChar;WndTitle:PChar;Msg:String);
var
  hWnd : THandle // Handle to target window to receive message
  cds : CopyDataStruct; // Structure to package the outbound message
begin
  // Find target window
  hWnd := FindWindow(PChar(WndClass), PChar(WndTitle));
  try
    cds.dwData := 0
    cds.cbData := Length(Msg); // Length of message
    cds.lpData := PChar(Msg); // Actual message
    // The following function is not necessary for this to work
    SetForegroundWindow(hWnd); // Pulls target window up top
    SendMessage(hWnd, wm_CopyData, 0, Integer(@cds));
send the message
  finally
    CloseHandle(hWnd) // Close handle to target
  end;
end;
// A typical call to this procedure would be:

wmCopyData('NOTEPAD','Untitled - Notepad','Test Message');

//----------------------------------------------------------------
RECEIVER:

// Add a custom message handler so our app gets notified upon receipt
private
  procedure WMGetData(var Msg: TWMCopyData); message WM_COPYDATA;

// wmGetData
// Receives inbound messages - Callback function
// Called from message handler
procedure TForm1.wmGetData(var Msg: TWMCopyData);
var
  sText: array[0..255] of Char; // Create an array to store message in
begin
  // Cast inbound data structure into a character array
  StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
  Edit1.Text := sText;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: Text zur anderer Anwendung senden

  Alt 20. Nov 2013, 06:56
JO ist der Normalfall.
Bringt aber nichts, wie himitsu schon sagt.
Wird WM_COPYDATA in der angesprochenen Anwendung nicht Unterstützt kann man da senden was man will.

gruss
  Mit Zitat antworten Zitat
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#19

AW: Text zur anderer Anwendung senden

  Alt 20. Nov 2013, 19:11
Also, ich habe nun alle meine Probleme - bis auf eines - lösen können. Vielen Dank für die Hilfe.

Mein einzig verbliebenes Problem ist, das Fenster der anderen Anwendung - im Falle es ist minimiert - so in den Vordergergrund zu holen, dass es später auch wieder minimiert werden kann.

Ich benutze folgenden Code um die Fremdanwendung nac "vorne" zu holen.

ShowWindow(wndMain, SW_SHOW);
BringWindowToTop(wndMain);

Nur kann man danach die Fremdanwendung nicht mehr minimieren...

Vergesse ich da was?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:51 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