Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Globale Hotkeys (https://www.delphipraxis.net/176585-globale-hotkeys.html)

Sebbi 15. Sep 2013 19:30

Delphi-Version: 7

Globale Hotkeys
 
Hi, ich bin gerade dabei mir ein kleines Tool in Delphi zu basteln und würde gerne einige Funktion auch aus dem Hintergrund per Hotkey abrufen können.
So soll z.B. beim betätigen von ALT + H trotz minimiertem Programm das procedure von Button1.click ausgeführt werden.
Hab mir den Code dazu auch schon zusammengesucht und das ganze compiliert jedoch passiert einfach nichts beim betätigen des Hotkeys und ich kann den Fehler nicht finden.

Vereinbarungen:
Code:
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure WmHotkey(var Msg: TMessage); message WM_HOTKEY;
  public
    { Public-Deklarationen }
  end;
Hotkey Registrierung/Freigabe:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 1, MOD_ALT, Ord('H'));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, 1);
end;

Implementierung:
Code:
procedure TForm1.WmHotkey(var Msg: TMessage);
begin
  if (Msg.WParam = 1) then
  begin
    button1.click;
  end;
end;
Ich hoffe ihr könnt mir helfen.
Und seid nicht zu hart mit mir, ich hab erst vor 2 Wochen mit Delphi angefangen.

Gruß, Sebastian :)

Volker Z. 15. Sep 2013 20:11

AW: Globale Hotkeys
 
Hallo,

und herzlich Willkommen in der DP.

Zitat:

jedoch passiert einfach nichts beim betätigen des Hotkeys und ich kann den Fehler nicht finden
Wenn Du mal einen Breakpoint in Deiner
Delphi-Quellcode:
procedure TForm1.WmHotkey(var Msg: TMessage);
setzt, dann wirst Du sehen, dass da schon etwas passiert, wenn der Hotkey gedrückt wird.

Was soll den in
Delphi-Quellcode:
Button1.Click
auslösen?

Gruß

Sebbi 15. Sep 2013 21:46

AW: Globale Hotkeys
 
Danke für die schnelle Antwort.
Da tut sich leider nichts, wenn ich einen Breakpoint in die
Delphi-Quellcode:
procedure TForm1.WmHotkey(var Msg: TMessage);
setze.
Am
Delphi-Quellcode:
Button1.Click
liegts ehr nicht, denn der tut im Moment nur den Inhalt einer Editbox in ein Label schreiben.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 label1.caption := edit1.text;
end;
Später will ich den Hotkey in einem anderen Projekt Verwenden.
Hier wollte ich nur das Erstellen von Hotkeys ausprobieren.

Der Gesamte Quellcode sieht übrigens so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure WmHotkey(var Msg: TMessage); message WM_HOTKEY;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 1, MOD_ALT, Ord('H'));
end;

procedure TForm1.WmHotkey(var Msg: TMessage);
begin
  if (Msg.WParam = 1) then;
  begin
    button1.click;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 label1.caption := edit1.text;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, 1);
end;

end.

EDIT:
Mir ist gerade auf gefallen, dass mit
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
etwas nicht stimmen muss, denn wenn ich da z.B
Delphi-Quellcode:
label1.Caption := 'test';
hinzufüge, wird das auch nicht ausgeführt.

Volker Z. 15. Sep 2013 22:06

AW: Globale Hotkeys
 
Hallo,
Zitat:

Mir ist gerade auf gefallen, dass mit
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
etwas nicht stimmen muss, denn wenn ich da z.B label1.Caption := 'test'; hinzufüge, wird das auch nicht ausgeführt.
Dann überprüfe doch mal, ob im Objektinspektor (Reiter Ereignisse) OnCreate überhaupt zugewiesen ist.

Gruß

Sebbi 16. Sep 2013 17:03

AW: Globale Hotkeys
 
Ah gut.. wieder mal was gelernt. :thumb: Ich wusst nicht, dass man das auch dort zuweisen muss.
Danke für die Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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