John Doe
unread,Feb 11, 2005, 12:07:29 AM2/11/05You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
#include <afxwin.h>
#include <stdio.h>
#include <mmsystem.h>
#include <G:\LShaping\scripting\hook\definitions.h>
#include <windows.h>
class CkeypadEXEDLL:public CWinApp
{
public:
CkeypadEXEDLL()
{
}
~CkeypadEXEDLL()
{
}
}
theDLL;
#pragma data_seg(".keypadDLL")
HHOOK g_hHookKey=NULL;
bool Playing=false;
bool Recording=false;
#pragma data_seg()
DLLEXPORT VOID Com_EXE_DLL(UINT status)
{//EXE_DLL
switch(status)
{//EXE_DLL-SW
case StartRecording:
{//EXE_DLL-SW-
Recording=true;
return;
}//EXE_DLL-SW-
case StopRecording:
{//EXE_DLL-SW-
Recording=false;
return;
}//EXE_DLL-SW-
case StartPlaying:
{//EXE_DLL-SW-
Playing=true;
return;
}//EXE_DLL-SW-
case StopPlaying:
{//EXE_DLL-SW-
Playing=false;
return;
}//EXE_DLL-SW-
}//EXE_DLL-SW
return;
}//EXE_DLL
inline bool PtrMov(POINT a,POINT b)
{//test for pointer movement
return((abs(a.x-b.x)>2)||(abs(a.y-b.y)>2));
}//test for pointer movement
INPUT input[16];
int OrdinaryKey=0;
DWORD DnTime;
DWORD UpTime;
POINT DnPtrPos;
POINT UpPtrPos;
bool Prefixed=false;
char StringOut[60]={0};
char TitleBar[256];
LRESULT CALLBACK KeyHook(int nCode,WPARAM wParam,LPARAM lParam)
{//KEYBOARD HOOK
if(UnknownAction)
{//UNKNOWN ACTION
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//UNKNOWN ACTION
if(SynthesizedKeystroke)
{//SYNTHESIZED KEYSTROKE
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//SYNTHESIZED KEYSTROKE
if(KeypadLocked)
{//KEYPAD LOCKED
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//KEYPAD LOCKED
if(OrdinaryKey)
{//DLLK-DM-ordinary key
if(Upstroke)
{//DLLK-DM-OK-upstrokeaafas
OrdinaryKey--;
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//DLLK-DM-OK-upstroke
if(Restroke)
{//DLLK-DM-OK-repeat key
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//DLLK-DM-OK-repeat key
OrdinaryKey++;
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//DLLK-DM-ordinary key
if(Upstroke)
{//DLLK-DM-UPSTROKE
GetCursorPos(&UpPtrPos);
UpTime=GetTickCount();
if(!Extended)
{//DLLK-DM-UP-N_E
switch(wParam)
{//DLLK-DM-UP-SW
case Pad1:
{//copy
if(QuickClick)
{//quick click selects word and copies
input[0].type=input[1].type=input[2].type=INPUT_MOUSE;
input[0].mi.dwFlags=input[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
input[3].type=input[4].type=input[5].type=input[6].type=
INPUT_KEYBOARD;
input[3].ki.wVk=input[6].ki.wVk=17;
input[4].ki.wVk=input[5].ki.wVk=67;
input[5].ki.dwFlags=input[6].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(7,input,sizeof(INPUT));
return 1;
}//quick click selects word and copies
if(PointerMove)
{//slow click with movement selects and copies
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=input[3].type=input[4].type=
INPUT_KEYBOARD;
input[1].ki.wVk=input[4].ki.wVk=17;
input[2].ki.wVk=input[3].ki.wVk=67;
input[3].ki.dwFlags=input[4].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(5,input,sizeof(INPUT));
return 1;
}//slow click with movement selects and copies
//slow click without movement selects line and copies
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=input[3].type=input[4].type=
input[5].type=input[6].type=input[7].type=input[8].type=
input[9].type=input[10].type=INPUT_KEYBOARD;
input[1].ki.wVk=input[2].ki.wVk=35;
input[3].ki.wVk=input[6].ki.wVk=16;
input[4].ki.wVk=input[5].ki.wVk=36;
input[7].ki.wVk=input[10].ki.wVk=17;
input[8].ki.wVk=input[9].ki.wVk=67;
input[2].ki.dwFlags=input[5].ki.dwFlags=input[6].ki.dwFlags=
input[9].ki.dwFlags=input[10].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(11,input,sizeof(INPUT));
return 1;
//slow click without movement selects line and copies
}//copy
case Pad2:
{//cut
if(QuickClick)
{//quick click selects word and cuts
input[0].type=input[1].type=input[2].type=INPUT_MOUSE;
input[0].mi.dwFlags=input[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
input[3].type=input[4].type=input[5].type=input[6].type=
INPUT_KEYBOARD;
input[3].ki.wVk=input[6].ki.wVk=17;
input[4].ki.wVk=input[5].ki.wVk=88;
input[5].ki.dwFlags=input[6].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(7,input,sizeof(INPUT));
return 1;
}//quick click selects word and cuts
if(PointerMove)
{//slow click with movement selects and cuts
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=input[3].type=input[4].type=
INPUT_KEYBOARD;
input[1].ki.wVk=input[4].ki.wVk=17;
input[2].ki.wVk=input[3].ki.wVk=88;
input[3].ki.dwFlags=input[4].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(5,input,sizeof(INPUT));
return 1;
}//slow click with movement selects and cuts
//slow click without movement selects line and cuts
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=input[3].type=input[4].type=
input[5].type=input[6].type=input[7].type=input[8].type=
input[9].type=input[10].type=INPUT_KEYBOARD;
input[1].ki.wVk=input[2].ki.wVk=35;
input[3].ki.wVk=input[6].ki.wVk=16;
input[4].ki.wVk=input[5].ki.wVk=36;
input[7].ki.wVk=input[10].ki.wVk=17;
input[8].ki.wVk=input[9].ki.wVk=88;
input[2].ki.dwFlags=input[5].ki.dwFlags=input[6].ki.dwFlags=
input[9].ki.dwFlags=input[10].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(11,input,sizeof(INPUT));
return 1;
//slow click without movement selects line and cuts
}//cut
case Pad3:
{//paste
if(QuickClick)
{//quick click selects word and pastes
input[0].type=input[1].type=input[2].type=INPUT_MOUSE;
input[0].mi.dwFlags=input[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
input[3].type=input[4].type=input[5].type=input[6].type=INPUT_KEYBOARD;
input[3].ki.wVk=input[6].ki.wVk=17;
input[4].ki.wVk=input[5].ki.wVk=86;
input[5].ki.dwFlags=input[6].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(7,input,sizeof(INPUT));
return 1;
}//quick click selects word and pastes
if(PointerMove)
{//slow click with movement selects and pastes
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=input[3].type=input[4].type=INPUT_KEYBOARD;
input[1].ki.wVk=input[4].ki.wVk=17;
input[2].ki.wVk=input[3].ki.wVk=86;
input[3].ki.dwFlags=input[4].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(5,input,sizeof(INPUT));
return 1;
}//slow click with movement selects and pastes
//slow click without movement clicks and pastes
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=input[3].type=input[4].type=INPUT_KEYBOARD;
input[1].ki.wVk=input[4].ki.wVk=17;
input[2].ki.wVk=input[3].ki.wVk=86;
input[3].ki.dwFlags=input[4].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(5,input,sizeof(INPUT));
return 1;
//slow click without movement clicks and pastes
}//paste
case Pad4:
{//select and correct
if(QuickClick)
{//quick click selects word and corrects
input[0].type=input[1].type=input[2].type=input[5].type=INPUT_MOUSE;
input[0].mi.dwFlags=input[2].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
input[3].type=input[4].type=INPUT_KEYBOARD;
input[3].ki.wVk=input[4].ki.wVk=111;
input[4].ki.dwFlags=KEYEVENTF_KEYUP;
input[5].mi.dx=static_cast<long>(0);
input[5].mi.dy=static_cast<long>(0);
input[5].mi.dwFlags=MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE;
SendInput(6,input,sizeof(INPUT));
return 1;
}//quick click selects word and corrects
//slow click selects and corrects
input[0].type=input[3].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTUP;
input[1].type=input[2].type=INPUT_KEYBOARD;
input[1].ki.wVk=input[2].ki.wVk=111;
input[2].ki.dwFlags=KEYEVENTF_KEYUP;
input[3].mi.dx=static_cast<long>(0);
input[3].mi.dy=static_cast<long>(0);
input[3].mi.dwFlags=MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE;
SendInput(4,input,sizeof(INPUT));
return 1;
//slow click selects and corrects
}//select and correct
case PadPoint:
{//DLLK-DM-UP-SW-prefix key
Prefixed=true;
return 1;
}//DLLK-DM-UP-SW-prefix key
}//DLLK-DM-UP-SW
}//DLLK-DM-UP-N_E
if(Prefixed)
{//DLLK-DM-UP-prefixed, going to play or record
Prefixed=false;
::PostMessage(FindWindow(NULL,"Shortcuts"),
KeyMessageToEXE,wParam,lParam);
return 1;
}//DLLK-DM-UP-prefixed, going to play or record
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//DLLK-DM-UPSTROKE
if(Restroke)
{//DLLK-DM-repeat key
return 1;
}//DLLK-DM-repeat key
GetCursorPos(&DnPtrPos);
DnTime=GetTickCount();
if(!Extended)
{//DLLK-DM-DN-N_E
switch(wParam)
{//DLLK-RC-DN-N_E-SW
case Pad1:
case Pad2:
case Pad3:
case Pad4:
{//DLLK-DM-DN-N_E-preprogrammed
PlaySound("C:\\Program Files\\Shortcuts\\sounds\\whook1.wav",NULL,
SND_FILENAME|SND_ASYNC|SND_NOWAIT|SND_NODEFAULT);
ZeroMemory(input,sizeof(input));
input[0].type=INPUT_MOUSE;
input[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
SendInput(1,input,sizeof(INPUT));
return 1;
}//DLLK-DM-DN-N_E-preprogrammed
case PadPoint:
{//DLLK-DM-DN-N_E-SW-preprogrammed
PlaySound("C:\\Program Files\\Shortcuts\\sounds\\titatoo1.wav",NULL,
SND_FILENAME|SND_ASYNC|SND_NOWAIT|SND_NODEFAULT);
return 1;
}//DLLK-DM-DN-N_E-SW-preprogrammed
}//DLLK-RC-DN-N_E-SW
}//DLLK-DM-DN-N_E
if(Prefixed)
{//DLLK-DM-DN-prefixed, upstroke will record or play
PlaySound("C:\\Program Files\\Shortcuts\\sounds\\doot1.wav",NULL,
SND_FILENAME|SND_ASYNC|SND_NOWAIT|SND_NODEFAULT);
return 1;
}//DLLK-DM-DN-prefixed, upstroke will record or play
PlaySound("C:\\Program Files\\Shortcuts\\sounds\\beep.wav",NULL,
SND_FILENAME|SND_ASYNC|SND_NOWAIT|SND_NODEFAULT);
OrdinaryKey++;
if(OrdinaryKey!=1)
{//DLLK-DM-DN-error, strokes counted wrong
PlaySound("C:\\Program Files\\Shortcuts\\sounds\\THUMPH1.WAV",NULL,
SND_FILENAME|SND_ASYNC|SND_NOWAIT|SND_NODEFAULT);
}//DLLK-DM-DN-error, strokes counted wrong
return::CallNextHookEx(g_hHookKey,nCode,wParam,lParam);
}//KEYBOARD HOOK
DLLEXPORT BOOL KeypadDLLInit()
{
if(g_hHookKey==NULL);
{//initialize DLL
HINSTANCE hInst=theDLL.m_hInstance;
g_hHookKey=SetWindowsHookEx(WH_KEYBOARD,KeyHook,hInst,0);
}//initialize DLL
ASSERT(g_hHookKey);
return TRUE;
}
DLLEXPORT void KeypadDLLTerm()
{
BOOL bRet1=UnhookWindowsHookEx(g_hHookKey);
ASSERT(bRet1);
}