|
Registriert seit: 18. Jan 2006 Ort: Krostitz 63 Beiträge |
#1
Hallo, ich bastel mit gerade ein Programm welches systemweit bestimmte HotKeys aufgreift und dann weiter verarbeitet.
Die Hotkeys sind in einer ini File definiert. Ich lese die Hotkeys aus der Inifile ein und Registriere diese alle. Nur eben da scheint es ein Problem zu geben. Es wird immer nur der 1. Hotkey aus der Ini registriert, und die anderen alle nicht. Dieser wird dann auch erkannt wenn man Ihn benutzt. Wo könnte dann also mein Fehler liegen? Hier mal mein Code: hotkeys.ini
Code:
;Skalarki Predefined hotkeys
[HotKey.0] ; HotKey listening for key1=CTRL key2=F9 ; yes/no yes=> new keystroke will be send to application. no=> same keystroke will be send to application add_new_keystroke=no ; new transfered keystroke new_keystroke= ; name off application where new keystroke has to send to application_name= ; part of window title of application to find window handle application_caption= ; press and release ; yes => press_event for defined keystroke will be send press=yes ; yes => release_event for defined keystroke will be send release=yes [HotKey.1] key1=F1 key2=CTRL add_new_keystroke=no new_keystroke= application_name= application_caption= press=yes release=yes [HotKey.2] key1=F2 key2= add_new_keystroke=no new_keystroke= application_name= application_caption= press=yes release=yes [HotKey.3] key1=F3 key2= add_new_keystroke=no new_keystroke= application_name= application_caption= press=yes release=yes [HotKey.4] key1=F4 key2= add_new_keystroke=no new_keystroke= application_name= application_caption= press=yes release=yes [HotKey.5] key1=F5 key2= add_new_keystroke=no new_keystroke= application_name= application_caption= press=yes release=yes
Delphi-Quellcode:
unit HotKeyApp;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IniFiles; const VK_NULL = $00; // NULL VK_LBUTTON = $01; // Linke Maustaste VK_RBUTTON = $02; // Rechte Maustaste VK_CANCEL = $03; // Für die Verarbeitung von Control-Break VK_MBUTTON = $04; // Mittlere Maustaste (Dreitastenmaus) VK_BACK = $08; // BACKSPACE Taste VK_TAB = $09; // TAB Taste VK_CLEAR = $0C; // Löschtaste VK_RETURN = $0D; // RETURN Taste VK_SHIFT = $10; // SHIFT Taste VK_CONTROL = $11; // STRG Taste VK_MENU = $12; // ALT Taste VK_PAUSE = $13; // PAUSE Taste VK_CAPITAL = $14; // CAPS LOCK Taste VK_ESCAPE = $1B; // ESC Taste VK_SPACE = $20; // LEERTASTE VK_PRIOR = $21; // PAGE UP Taste VK_NEXT = $22; // PAGE DOWN Taste VK_END = $23; // ENDE Taste VK_HOME = $24; // POS1 Taste VK_LEFT = $25; // Cursortaste links VK_UP = $26; // Cursortaste oben VK_RIGHT = $27; // Cursortaste rechts VK_DOWN = $28; // Cursortaste unten VK_SELECT = $29; // SELECT Taste VK_PRINT = $2A; // Druck VK_EXECUTE = $2B; // Taste Ausführen (EXECUTE) VK_SNAPSHOT = $2C; // PRINT SCREEN Taste für Windows 3.0 und höher VK_INSERT = $2D; // EINFG Taste VK_DELETE = $2E; // ENTF Taste VK_HELP = $2F; // Hilfetaste VK_0 = $30; // Taste 0 VK_1 = $31; // Taste 1 VK_2 = $32; // Taste 2 VK_3 = $33; // Taste 3 VK_4 = $34; // Taste 4 VK_5 = $35; // Taste 5 VK_6 = $36; // Taste 6 VK_7 = $37; // Taste 7 VK_8 = $38; // Taste 8 VK_9 = $39; // Taste 9 VK_A = $41; // Taste A VK_B = $42; // Taste B VK_C = $43; // Taste C VK_D = $44; // Taste D VK_E = $45; // Taste E VK_F = $46; // Taste F VK_G = $47; // Taste G VK_H = $48; // Taste H VK_I = $49; // Taste I VK_J = $4A; // Taste J VK_K = $4B; // Taste K VK_L = $4C; // Taste L VK_M = $4D; // Taste M VK_N = $4E; // Taste N VK_O = $4F; // Taste O VK_P = $50; // Taste P VK_Q = $51; // Taste Q VK_R = $52; // Taste R VK_S = $53; // Taste S VK_T = $54; // Taste T VK_U = $55; // Taste U VK_V = $56; // Taste V VK_W = $57; // Taste W VK_X = $58; // Taste X VK_Y = $59; // Taste Y VK_Z = $5A; // Taste Z VK_LWIN = $5B; // Linke Windowstaste VK_RWIN = $5C; // Rechte Windowstaste VK_APPS = $5D; // Application-Taste VK_NUMPAD0 = $60; // Numerisches Tastenfeld, Taste 0 VK_NUMPAD1 = $61; // Numerisches Tastenfeld, Taste 1 VK_NUMPAD2 = $62; // Numerisches Tastenfeld, Taste 2 VK_NUMPAD3 = $63; // Numerisches Tastenfeld, Taste 3 VK_NUMPAD4 = $64; // Numerisches Tastenfeld, Taste 4 VK_NUMPAD5 = $65; // Numerisches Tastenfeld, Taste 5 VK_NUMPAD6 = $66; // Numerisches Tastenfeld, Taste 6 VK_NUMPAD7 = $67; // Numerisches Tastenfeld, Taste 7 VK_NUMPAD8 = $68; // Numerisches Tastenfeld, Taste 8 VK_NUMPAD9 = $69; // Numerisches Tastenfeld, Taste 9 VK_MULTIPLY = $6A; // Multiplikationstaste VK_ADD = $6B; // Additionstaste VK_SEPARATOR = $6C; // Trenntaste VK_SUBTRACT = $6D; // Subtraktionstaste VK_DECIMAL = $6E; // Dezimaltrenntaste VK_DIVIDE = $6F; // Divisionstaste VK_F1 = $70; // F1 Taste VK_F2 = $71; // F2 Taste VK_F3 = $72; // F3 Taste VK_F4 = $73; // F4 Taste VK_F5 = $74; // F5 Taste VK_F6 = $75; // F6 Taste VK_F7 = $76; // F7 Taste VK_F8 = $77; // F8 Taste VK_F9 = $78; // F9 Taste VK_F10 = $79; // F10 Taste VK_F11 = $7A; // F11 Taste VK_F12 = $7B; // F12 Taste VK_F13 = $7C; // F13 Taste VK_F14 = $7D; // F14 Taste VK_F15 = $7E; // F15 Taste VK_F16 = $7F; // F16 Taste VK_F17 = $80; // F17 Taste VK_F18 = $81; // F18 Taste VK_F19 = $82; // F19 Taste VK_F20 = $83; // F20 Taste VK_F21 = $84; // F21 Taste VK_F22 = $85; // F22 Taste VK_F23 = $86; // F23 Taste VK_F24 = $87; // F24 Taste VK_NUMLOCK = $90; // NUM LOCK Taste VK_SCROLL = $91; // SCROLL LOCK Taste VK_LSHIFT = $A0; // Linke Shift-Taste VK_RSHIFT = $A1; // Rechte Shift-Taste VK_LCONTROL = $A2; // Linke Strg-Taste VK_RCONTORL = $A3; // Rechte Strg-Taste VK_LMENU = $A4; // Linke Menü-Taste VK_RMENU = $A5; // Rechte Menü-Taste VK_SEMICOLON = $BA; // Taste ; VK_EQUAL = $BB; // Taste = VK_COMMA = $BC; // Taste , VK_MINUS = $BD; // Taste - VK_PERIOD = $BE; // Taste . VK_SLASH = $BF; // Taste \ VK_BACKQUOTE = $C0; // Taste ` VK_LEFTBRACKET = $DB; // Taste < VK_BACKSHLASH = $DC; // Taste \ VK_RIGHTBRACKET = $DD; // Taste > VK_QUOTE = $DE; // Taste ´ VK_PROCESSKEY = $E5; // Process-Taste VK_ATTN = $F6; // Attn-Taste VK_CRSEL = $F7; // Clear-Selected-Taste VK_EXSEL = $F8; // EXSEL-Taste VK_EREOF = $F9; // EREOF-Taste VK_PLAY = $FA; // Play-Taste VK_ZOOM = $FB; // Zoom-Taste VK_NONAME = $FC; // Noname-Taste VK_PA1 = $FD; // PA1-Taste VK_OEM_CLEAR = $FE; // OEM-Clear type THotkey = record HotKeyName : string; Key1 : cardinal; Key2 : cardinal; HotKey : integer; add_keystroke : boolean; new_keystroke : integer; application_name : string; application_caption : string; press : boolean; release : boolean; end; type TForm1 = class(TForm) Label1: TLabel; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; public { Public-Deklarationen } HotKeyList : array of THotkey; HotKeyListSize : cardinal; HotKeyIni : TIniFile; HotKey1, HotKey2, HotKey3: integer; end; var Form1: TForm1; implementation {$R *.dfm} // String in Virtuellen Key umwandeln, siehe KonstantenListe überhaltb function StrToVK (aString : string): cardinal; begin if (aString = '') then result := VK_NULL; // F1 bis F12 if (aString = 'F1') then result := VK_F1; if (aString = 'F2') then result := VK_F2; if (aString = 'F3') then result := VK_F3; if (aString = 'F4') then result := VK_F4; if (aString = 'F5') then result := VK_F5; if (aString = 'F6') then result := VK_F6; if (aString = 'F7') then result := VK_F7; if (aString = 'F8') then result := VK_F8; if (aString = 'F9') then result := VK_F9; if (aString = 'F10') then result := VK_F10; if (aString = 'F11') then result := VK_F11; if (aString = 'F12') then result := VK_F12; // CTRL, ALT, SHIFT if (aString = 'CTRL') then result := MOD_CONTROL; if (aString = 'ALT') then result := VK_MENU; if (aString = 'LSHIFT') then result := VK_LSHIFT; if (aString = 'RSHIFT') then result := VK_RSHIFT; // A - Z // 0 -9 end; procedure SetHotKey(aKey1, aKey2 : cardinal; aNumber : integer); begin Form1.Memo1.Lines.Add(pchar('HotKey.' + IntToStr(aNumber)) + ' ---> ' + Form1.HotKeyList[aNumber].HotKeyName); Form1.HotKeyList[aNumber].HotKey := GlobalAddAtom(pchar('HotKey.' + IntToStr(aNumber))); RegisterHotKey(Form1.Handle, form1.HotKeyList[aNumber].HotKey ,aKey1, aKey2); end; procedure TForm1.WMHotKey(var Msg: TWMHotKey); var i : integer; begin //Memo1.Lines.Add('Msg.Hotkey='+ inttostr(msg.HotKey)); if (HotKeyListSize > 0) then for i := 0 to HotKeyListSize - 1 do if (HotKeyList[i].HotKey = Msg.HotKey) then Memo1.lines.add('Hotkey.' + inttostr(i) + ' ---> wurde gedrückt!'); //Form1.Caption := 'Msg.HotKey= ' +inttostr(Msg.HotKey) + 'HotKeyList[0].HotKey = ' + inttostr(HotKeyList[0].HotKey); //if Msg.HotKey = HotKeyList[0].HotKey then showmessage('juhu ----- ' + HotKeyList[0].HotKeyName); end; procedure TForm1.FormCreate(Sender: TObject); var i, u : integer; key1, key2 : string; begin // HotKeyIni einlesen HotKeyIni := TInifile.Create(ExtractFilePath(ParamStr(0)) + 'hotkeys.ini'); for i := 0 to 255 do if not HotKeyIni.SectionExists('HotKey.' +IntToStr(i)) then break; // Größe des HotKeyArrays festlegen if (i = 0) then //Keine Hotkeys definiert HotKeyListSize := 0 else begin HotKeyListSize := i; setlength(HotKeyList, i); end; // HotKeyArray befüllen if (HotKeyListSize > 0) then for i := 0 to HotKeyListSize - 1 do begin HotKeyList[i].HotKeyName := HotKeyIni.ReadString('HotKey.' + IntToStr(i),'key1','') + ' + ' +HotKeyIni.ReadString('HotKey.' + IntToStr(i),'key2',''); HotKeyList[i].Key1 := StrToVK(HotKeyIni.ReadString('HotKey.' + IntToStr(i),'key1','')); HotKeyList[i].Key2 := StrToVK(HotKeyIni.ReadString('HotKey.' + IntToStr(i),'key2','')); setHotKey(HotKeyList[i].Key1, HotKeyList[i].Key2, i); Memo1.Lines.Add(inttostr(HotKeyList[i].HotKey)); end; end; procedure TForm1.FormDestroy(Sender: TObject); var i : integer; begin if (HotKeyListSize > 0) then for i := 0 to HotKeyListSize - 1 do begin UnRegisterHotKey(Handle, HotKeyList[i].HotKey); GlobalDeleteAtom(HotKeyList[i].HotKey); end; end; end. Vielen Dank schonmal im Vorraus |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |