Showing posts with label Global Hotkey. Show all posts
Showing posts with label Global Hotkey. Show all posts

2008/04/07

델파이에서 System Global Hotkey 사용하기

Global Hotkey 이용하기의 마지막 팁이다.

이번에는 Delphi 에서 이용하는 방법이다.

델파이는 비주얼 베이직과 같이 RAD 툴이면서 비주얼 베이직과는 다르게 특별한 선언이 없이 바로 Win32 API 를 사용할 수 있다.

따라서 C++에서 사용하는 방법과 크게 다르지 않으며 다른 것이 있다면 메세지 핸들링하는 방법과 가상 키코드를 이용하는 방법이 약간 다르다.

메세지 핸들링하는 방법은 언어 자체가 다르니 C++과는 다를 수 밖에 없고 가상 키코드 사용은 델파이에 알파벳에 대응하는 키코드는 정의 되지 않아 직접 숫자로 적용 해야한다.


unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
hkID: Integer;
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey = hkID then
ShowMessage('Ctrl + A pressed !');
end;

procedure TForm1.FormCreate(Sender: TObject);
// Different Constants from Windows.pas
const
MOD_ALT = 1;
MOD_CONTROL = 2;
MOD_SHIFT = 4;
MOD_WIN = 8;
begin
// Register Hotkey Ctrl + A
hkID := GlobalAddAtom('MyHotkey');
RegisterHotKey(Handle, hkID, MOD_CONTROL, $41);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, hkID);
GlobalDeleteAtom(hkID);
end;

end.

Original Post : http://neodreamer-dev.tistory.com/91

2008/04/04

프로그램에 시스템 Hotkey 붙이기

프로그램에 시스템 Hotkey를 연결하여 언제 어디서나 프로그램을 호출하거나 특정 기능을 동작 시킬 수 있다.

Hotkey를 사용하기 위한 API 함수이다.

ATOM GlobalAddAtom(
LPCTSTR lpString
);


BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);

BOOL UnregisterHotKey(
HWND hWnd,
int id
);



시스템에 유일한 아이디를 만들고 핫키를 할당하면 된다.

///////////////////////////////////////////////////////////////
// Header

// 시스템 Hotkey ID
ATOM atm;

// WM_HOTKEY message 핸들러 함수
afx_msg LRESULT OnHotkey(WPARAM wparam, LPARAM lparam);

// 핸들러 함수 매핑
BEGIN_MESSAGE_MAP
ON_MESSAGE(WM_HOTKEY, OnHotkey)


///////////////////////////////////////////////////////////////
// Source

::OnInitDialog()
// 시스템에 유일한 ID 생성
atm = GlobalAddAtom( _T("MyHotkey") );

// 시스템 Hotkey 등록
RegisterHotKey( this->m_hWnd, atm, MOD_WIN, VK_SPACE );

::OnClose()
// 시스템 Hotkey 해제
UnregisterHotKey( this->m_hWnd, atm );

// Hotkey 핸들러 함수
LRESULT CGlobalHKeyDlg::OnHotkey(WPARAM wparam, LPARAM lparam)
{
AfxMessageBox( _T("Global Hotkey") );

return 0;
}



RegisterHotkey 사용 방법

BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);

HWND hWnd
핫키를 할당하고자 하는 윈도우 핸들

int id
핫키 아이디

UINT fsModifiers
핫키에 사용될 조합키
MOD_ALT ALT key
MOD_CONTROL CTRL key
MOD_SHIFT SHIFT key
MOD_WIN WINDOW key

UINT vk
핫키



Original Post : http://neodreamer-dev.tistory.com/88