![]() |
AW: Text zur anderer Anwendung senden
Zitat:
|
AW: Text zur anderer Anwendung senden
Zitat:
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; |
AW: Text zur anderer Anwendung senden
Ich weiss nicht, ob WM_CHAR ein KeyDown/Pressed auslöst. Ich dachte eher an WM_KEYDOWN und WM_KEYUP.
|
AW: Text zur anderer Anwendung senden
Hallo,
meine Vermutung ist, das das DBGrid einfach die Tastatur (OnKeyDown, OnKeyPress...) abfragt, und dabei jedesmal einen select oder Ähnliches abschickt.... Zitat:
Zum Beispiel:
Delphi-Quellcode:
@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.
for i := 1 to length(MeinString) do
begin SendMessage(handle,wm_char,ord(MeinString[i]),0); Sleep(100); end; |
AW: Text zur anderer Anwendung senden
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. |
AW: Text zur anderer Anwendung senden
Zitat:
|
AW: Text zur anderer Anwendung senden
Communicate between processes using windows messaging
![]()
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; |
AW: Text zur anderer Anwendung senden
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 |
AW: Text zur anderer Anwendung senden
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz