56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
|
// HotKey.cpp: implementation of the CHotKey class.
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "gen_hotkeys.h"
|
||
|
#include "HotKey.h"
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Registration / Unregstration
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
int RegisterHotkey(HOTKEY *hk)
|
||
|
{
|
||
|
if (!hk) return 1;
|
||
|
|
||
|
wchar_t atomName[1024] = {0};
|
||
|
bool unicode = 0;
|
||
|
char* name = GetCommandName(hk->hkd.iCommand, &unicode);
|
||
|
StringCchPrintfW(atomName, 1024, (unicode?L"%s %X %X %X":L"%hs %X %X %X"), name, hk->hkd.dwHotKey, hk->hkd.iCommand, GetTickCount());
|
||
|
hk->atom = GlobalAddAtomW(atomName);
|
||
|
if (!hk->atom)
|
||
|
return 1;
|
||
|
|
||
|
return !RegisterHotKey(psPlugin.hwndParent, hk->atom, GetModKeys(hk->hkd.dwHotKey), LOBYTE(hk->hkd.dwHotKey));
|
||
|
}
|
||
|
|
||
|
void UnregisterHotkey(HOTKEY *hk)
|
||
|
{
|
||
|
if (!hk || !hk->atom)
|
||
|
return;
|
||
|
|
||
|
UnregisterHotKey(psPlugin.hwndParent, hk->atom);
|
||
|
GlobalDeleteAtom(hk->atom);
|
||
|
hk->atom = NULL;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// Set / Get
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
UINT GetModKeys(DWORD dwHotKey)
|
||
|
{
|
||
|
UINT result = 0;
|
||
|
WORD wHotKey = HIBYTE(dwHotKey);
|
||
|
|
||
|
if (wHotKey & HOTKEYF_ALT)
|
||
|
result |= MOD_ALT;
|
||
|
if (wHotKey & HOTKEYF_CONTROL)
|
||
|
result |= MOD_CONTROL;
|
||
|
if (wHotKey & HOTKEYF_WIN)
|
||
|
result |= MOD_WIN;
|
||
|
if (wHotKey & HOTKEYF_SHIFT)
|
||
|
result |= MOD_SHIFT;
|
||
|
|
||
|
return result;
|
||
|
}
|