<quote>Er der nogle kloge folk her, som kan sige mig hvordan at man
>får en ShortCut fra f.eks. TMenuItem til at virke, selvom mit
>program ikke er aktivt?? Komponenter kan bruges, bare det
>er til D6Personal.
Her er nogen klip fra et program jeg har skrevet i FreePascal, men jeg har rettet dem til så de fungerer i Delphi. Det jeg gør er at registrere nogen globale hotkeys og fange Windows' WM_HOTKEY message når de hotkeys bliver trykket på. Læs også data's artikel 'eventhandlers'.
Det gør at man kan bruge tasterne Win+Z,X,C,V,B,J til at styre WinAMP med. Men det kræver også en ekstra fil (easyamp.pas) som ikke lige er med.
Der ligger en kompileret udgave på min lokale webserver!
Niels
http://www.niller.f2s.com/ - always there...
http://g4s.dnsq.org/ - when I'm online!
<hr> - - -
const
HotkeyPrev = $00;
HotkeyPlay = $01;
HotkeyPause = $02;
HotkeyStop = $03;
HotkeyNext = $04;
HotkeyPlaylist = $10;
procedure TForm1.WMHotkey(var Msg: TMessage);
begin
if GetAmpMainHandle <> 0 then
case wParam of
HotkeyPrev:
AmpCommand(Amp_Command_BUTTON1);
HotkeyPlay:
AmpCommand(Amp_Command_BUTTON2);
HotkeyPause:
AmpCommand(Amp_Command_BUTTON3);
HotkeyStop:
AmpCommand(Amp_Command_BUTTON4);
HotkeyNext:
AmpCommand(Amp_Command_BUTTON5);
HotkeyPlaylist:
AmpCommand(Amp_Command_Jump_To_File_Dialog);
end
else
AmpCommandLine('');
Result := 1;
end;
procedure RegHotkey(Ident: Longint; Key: Char);
begin
if not RegisterHotkey(Form1.Handle, Ident, MOD_WIN, Ord(Key)) then
ShowMessage('Could not register hotkey.');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegHotkey(HotkeyPrev, 'Z');
RegHotkey(HotkeyPlay, 'X');
RegHotkey(HotkeyPause, 'C');
RegHotkey(HotkeyStop, 'V');
RegHotkey(HotkeyNext, 'B');
RegHotkey(HotkeyPlaylist, 'J');
end;
procedure TForm1.Destroy(Sender: TObject);
begin
UnregisterHotkey(wnd, HotkeyPrev);
UnregisterHotkey(wnd, HotkeyPlay);
UnregisterHotkey(wnd, HotkeyPause);
UnregisterHotkey(wnd, HotkeyStop);
UnregisterHotkey(wnd, HotkeyNext);
UnregisterHotkey(wnd, HotkeyPlaylist);
end.;
</quote>
Det er jeg ikke sikker på at jeg forstod... Jeg skal bruge det sådan at mens mit program ikke er aktivt, skal man kunne trykke på Ctrl+etellerandetbogstav, som er TMenuItems shortcut, og procedure TMenuItem.Click vil blive udført. Det er jo ikke noget problem, mens programmet er aktivt, men når det er kører i bagrunden virker det jo ikke...
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
http://www.tfweb.f2s.com