AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Globale Hotkeys

Ein Thema von Sebbi · begonnen am 15. Sep 2013 · letzter Beitrag vom 16. Sep 2013
Antwort Antwort
Benutzerbild von Sebbi
Sebbi

Registriert seit: 15. Sep 2013
3 Beiträge
 
#1

Globale Hotkeys

  Alt 15. Sep 2013, 19:30
Delphi-Version: 7
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
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Globale Hotkeys

  Alt 15. Sep 2013, 20:11
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 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 Button1.Click auslösen?

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Sebbi
Sebbi

Registriert seit: 15. Sep 2013
3 Beiträge
 
#3

AW: Globale Hotkeys

  Alt 15. Sep 2013, 21:46
Danke für die schnelle Antwort.
Da tut sich leider nichts, wenn ich einen Breakpoint in die procedure TForm1.WmHotkey(var Msg: TMessage); setze.
Am 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 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.

Geändert von Sebbi (15. Sep 2013 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: Globale Hotkeys

  Alt 15. Sep 2013, 22:06
Hallo,
Zitat:
Mir ist gerade auf gefallen, dass mit 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ß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Sebbi
Sebbi

Registriert seit: 15. Sep 2013
3 Beiträge
 
#5

AW: Globale Hotkeys

  Alt 16. Sep 2013, 17:03
Ah gut.. wieder mal was gelernt. Ich wusst nicht, dass man das auch dort zuweisen muss.
Danke für die Hilfe!
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:45 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