Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DLL source file

0 views
Skip to first unread message

John Doe

unread,
Feb 11, 2005, 12:07:29 AM2/11/05
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);
}
0 new messages