Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Kontextmenü einer anderen Anwendung aufrufen (https://www.delphipraxis.net/79803-kontextmenue-einer-anderen-anwendung-aufrufen.html)

EWeiss 29. Okt 2006 09:12

Re: Kontextmenü einer anderen Anwendung aufrufen
 
Zitat:

Zitat von nezumi
Hallo Emil,

vielen Dank für Deine Antwort. Leider versteh ich nur Bahnhof...

Könntest Du das bitte etwas genauer beschreiben oder vielleicht ein Code-Beispiel schreiben (insbes. zu Punkt 2 und 3)? Würde mir sehr helfen...

Thanx,

2. Sendmessage .... WM_ACTIVATE
3. Hier im Forum suchenSendkeys (ALT) aktiviert/Deaktiviert die Shortcuts (B) aktiviert das 2 Hauptmenü, (STRG+A) wählt alles aus wenn die vorherigen sendkeys ausgeführt wurden.

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ß

EWeiss 29. Okt 2006 13:29

Re: Kontextmenü einer anderen Anwendung aufrufen
 
Hier mal ein Beispiel wie man Text aus einer anderen Anwendung ohne
Kontexmenü bekommen kann.

Delphi-Quellcode:
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.
Gruß

nezumi 30. Okt 2006 20:38

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:
SendKeys('F9', true);
//bzw
SendKeys((F9), true);
//bzw
SendKeys($78, true);
//bzw
SendMessage(wnd2, WM_KEYDOWN, VK_F9, 0);
Leider funktioniert keine dieser Möglichkeiten (die unit sndkey32 ist installiert).
Warum geht das nicht??

Gruß,

EWeiss 30. Okt 2006 21:38

Re: Kontextmenü einer anderen Anwendung aufrufen
 
Zitat:

Zitat von nezumi
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:
SendKeys('F9', true);
//bzw
SendKeys((F9), true);
//bzw
SendKeys($78, true);
//bzw
SendMessage(wnd2, WM_KEYDOWN, VK_F9, 0);
Leider funktioniert keine dieser Möglichkeiten (die unit sndkey32 ist installiert).
Warum geht das nicht??

Gruß,

Bin gerade dabei ein Sample zu schreiben mit dem man von jeden xbeliebigen Fenster welches geöffnet ist
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ß

nezumi 31. Okt 2006 09:33

Re: Kontextmenü einer anderen Anwendung aufrufen
 
[quote="EWeiss"]
Zitat:

Zitat von nezumi
Super, danke!

Bin gerade dabei ein Sample zu schreiben mit dem man von jeden xbeliebigen Fenster welches geöffnet ist
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ß

Cool, das interessiert mich! Wann ist es denn fertig.... :roll: ?

Mein Prob hab ich jetzt gelöst. Es ging nur mit
Delphi-Quellcode:
keybd_event(VK_F9, 0, 0, 0);
Thanx all!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr.
Seite 2 von 2     12   

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