![]() |
Re: Kontextmenü einer anderen Anwendung aufrufen
Zitat:
3. ![]() EDIT: Weiss nicht was du vorhast ? Solltest du lediglich den Text aus der anderen Anwendung benötigen dann geht das auch über WM_GETTEXT Dafür benötigst du aber das HAndle des Controls welche den Text enthält. Dann mußt du nichts makieren. Senden kannst du ihn dann über sendmessage in verbindung mit WM_SETTEXT in deine eigene Anwendung Textbox oder was auch immer. Gruß |
Re: Kontextmenü einer anderen Anwendung aufrufen
Hier mal ein Beispiel wie man Text aus einer anderen Anwendung ohne
Kontexmenü bekommen kann.
Delphi-Quellcode:
Gruß
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Edit1: TEdit; Label7: TLabel; Edit2: TEdit; RadioButton1: TRadioButton; RadioButton2: TRadioButton; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function LeftStr(Const Str: String; Size: Word): String; begin Result := Copy(Str, 1, Size) end; function InStr(Start: integer; Source: string; SourceToFind: string): integer; begin Result := pos(SourceToFind, copy(Source, Start, Length(Source) - (Start - 1))); end; procedure TForm1.Timer1Timer(Sender: TObject); const MAX_BUFFER = 32767; Var Res : Integer; Handle : HWND; Parent : HWND; Pt : TPOINT; Buffer : String; Klasse : String; begin if GetCursorPos(Pt) then begin Handle := WindowFromPoint(Pt); Parent := GetParent(Handle); SetLength(Klasse, 128); Res := GetClassName(Handle, PChar(Klasse), 128); Klasse := LeftStr(Klasse, Res); Label2.Caption := IntToStr(Handle); Label4.Caption := IntToStr(Parent); Label6.Caption := Klasse; If (InStr(1, Klasse, 'Edit') <> 0) Or (InStr(1, Klasse, 'text') <> 0) Then begin If RadioButton1.Checked = True Then begin SetLength(Buffer, MAX_BUFFER); Res := SendMessage(Handle, WM_GETTEXT, Length(Buffer), Integer(PChar(Buffer))); Edit1.Text := LeftStr(Buffer, Res); end Else SendMessage(Handle, WM_SETTEXT, 0, Integer(Edit1.Text)); end; end; end; end. |
Re: Kontextmenü einer anderen Anwendung aufrufen
Super, danke!
Ich habs jetzt mit einer Kombination Deiner Tipps hinbekommen. Blöderweise muss ich zum Abschluss noch F9 drücken. Ich hab das probiert mit
Delphi-Quellcode:
Leider funktioniert keine dieser Möglichkeiten (die unit sndkey32 ist installiert).
SendKeys('F9', true);
//bzw SendKeys((F9), true); //bzw SendKeys($78, true); //bzw SendMessage(wnd2, WM_KEYDOWN, VK_F9, 0); Warum geht das nicht?? Gruß, |
Re: Kontextmenü einer anderen Anwendung aufrufen
Zitat:
das Systemmenü und Standardmenü aufrufen und aus der anwendung steuern kann ..jeden einzelnen MenüPunkt. Damit kann man auch einträge aus dem SystemMenü (beliebige) zu seiner anwendung hinzufügen. Dauert aber noch etwas :( gruß |
Re: Kontextmenü einer anderen Anwendung aufrufen
[quote="EWeiss"]
Zitat:
Mein Prob hab ich jetzt gelöst. Es ging nur mit
Delphi-Quellcode:
Thanx all!
keybd_event(VK_F9, 0, 0, 0);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 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