#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("Macro");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindowEx(WS_EX_TOPMOST, lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,155,135,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while (GetMessage(&Message,NULL,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
#define ID_COMBOBOX1 100
#define ID_COMBOBOX2 101
TCHAR *Items1[]={TEXT("마우스 왼쪽"), // 0~1 : 마우스
TEXT("마우스 오른쪽"),
TEXT("Space"), // 2~4, 41~49 : 특수키
TEXT("Enter"),
TEXT("BackSpace"),
TEXT("0"),TEXT("1"),TEXT("2"),TEXT("3"),TEXT("4"), // 5~14 : 숫자
TEXT("5"),TEXT("6"),TEXT("7"),TEXT("8"),TEXT("9"),
TEXT("A"),TEXT("B"),TEXT("C"),TEXT("D"),TEXT("E"), // 15~40 : 문자
TEXT("F"),TEXT("G"),TEXT("H"),TEXT("I"),TEXT("J"),
TEXT("K"),TEXT("L"),TEXT("M"),TEXT("N"),TEXT("O"),
TEXT("P"),TEXT("Q"),TEXT("R"),TEXT("S"),TEXT("T"),
TEXT("U"),TEXT("V"),TEXT("W"),TEXT("X"),TEXT("Y"),
TEXT("Z"),
TEXT("F2"),TEXT("F3"),TEXT("F4"),TEXT("F5"),TEXT("F6"),
TEXT("F7"),TEXT("F8"),TEXT("F9"),TEXT("F10")};
int NumItems1 = 50;
TCHAR *Items2[]={TEXT("없이"),TEXT("Ctrl"),TEXT("Alt"),TEXT("Shift"),
TEXT("Ctrl+Alt"),
TEXT("Ctrl+Shift"),
TEXT("Alt+Shift")};
int NumItems2 = 7;
HWND hScroll;
HWND hCombo1;
HWND hCombo2;
int Speed;
//-------------------------
HWND hWndPoint;
POINT Pt;
void ChangeHandle(){
GetCursorPos(&Pt);
hWndPoint=WindowFromPoint(Pt);
ScreenToClient(hWndPoint, &Pt);
}
//--------------------------
//---------------------------------------------------------------------------
WPARAM MyWPARAM = NULL;
LPARAM MyLPARAM = NULL;
TCHAR *c = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int Index;
enum MyMessages{LBUTTON, RBUTTON, VKEYBOARD, KEYBOARD};
MyMessages MyMessage = LBUTTON;
enum MessageList{MOUSELEFT, MOUSERIGHT, SPACE, ENTER, BACKSPACE,
F2 = 41, F3, F4, F5, F6, F7, F8, F9, F10};
void ChangeKey1(){
int i;
i = SendMessage(hCombo1, CB_GETCURSEL,0,0);
switch ( i ){
case MOUSELEFT:
if( MyMessage == KEYBOARD ){
MyWPARAM = NULL;
}
MyMessage = LBUTTON;
return;
case MOUSERIGHT:
if( MyMessage == KEYBOARD ){
MyWPARAM = NULL;
}
MyMessage = RBUTTON;
return;
case SPACE: MyWPARAM = VK_SPACE; MyMessage = VKEYBOARD; return;
case ENTER: MyWPARAM = VK_RETURN; MyMessage = VKEYBOARD; return;
case BACKSPACE: MyWPARAM = VK_BACK; MyMessage = VKEYBOARD; return;
case F2: MyWPARAM = VK_F2; MyMessage = VKEYBOARD; return;
case F3: MyWPARAM = VK_F3; MyMessage = VKEYBOARD; return;
case F4: MyWPARAM = VK_F4; MyMessage = VKEYBOARD; return;
case F5: MyWPARAM = VK_F5; MyMessage = VKEYBOARD; return;
case F6: MyWPARAM = VK_F6; MyMessage = VKEYBOARD; return;
case F7: MyWPARAM = VK_F7; MyMessage = VKEYBOARD; return;
case F8: MyWPARAM = VK_F8; MyMessage = VKEYBOARD; return;
case F9: MyWPARAM = VK_F9; MyMessage = VKEYBOARD; return;
case F10: MyWPARAM = VK_F10; MyMessage = VKEYBOARD; return;
}
Index = i - 5;
MyMessage = KEYBOARD;
return;
}
void ChangeKey2(){
}
//----------------------------------------------------------------------
WNDPROC OldEditProc;
BOOL timerTF = FALSE;
BOOL changeHandleTF = TRUE;
enum TimerList {CHANGEHADLE, SENDMESSAGE};
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int i;
switch (iMessage) {
case WM_CREATE:
hWndMain=hWnd;
// 스크롤
hScroll=CreateWindow(TEXT("scrollbar"),NULL,WS_CHILD | WS_VISIBLE |
SBS_HORZ,10,10,130,15,hWnd,(HMENU)0,g_hInst,NULL);
Speed=500;
SetScrollRange(hScroll,SB_CTL,0,1000,TRUE);
SetScrollPos(hScroll,SB_CTL,Speed,TRUE);
// 콤보1
hCombo1=CreateWindow(TEXT("combobox"),NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL |
CBS_DROPDOWNLIST,10,33,130,200,hWnd,(HMENU)ID_COMBOBOX1,g_hInst,NULL);
for(i=0;i<NumItems1;i++){
SendMessage(hCombo1, CB_ADDSTRING,0,(LPARAM)Items1[i]);
}
SendMessage(hCombo1, CB_SETCURSEL,0,0);
// 콤보2
hCombo2=CreateWindow(TEXT("combobox"),NULL,WS_CHILD | WS_VISIBLE |
CBS_DROPDOWNLIST,10,63,130,200,hWnd,(HMENU)ID_COMBOBOX2,g_hInst,NULL);
for(i=0;i<NumItems2;i++){
SendMessage(hCombo2, CB_ADDSTRING,0,(LPARAM)Items2[i]);
}
SendMessage(hCombo2, CB_SETCURSEL,0,0);
RegisterHotKey(hWnd,0x0000,0,VK_F1);
RegisterHotKey(hWnd,0x0001,0,VK_F11);
return 0;
case WM_HOTKEY:
switch( wParam ){
case 0:
if(timerTF){
timerTF = FALSE;
KillTimer(hWnd, 1);
}
else{
timerTF = TRUE;
SetTimer(hWnd, 1, Speed, NULL);
SendMessage(hWnd, WM_TIMER, 1, 0);
}
break;
case 1:
if( timerTF ){
if(changeHandleTF){
changeHandleTF = FALSE;
}
else{
changeHandleTF = TRUE;
}
}
break;
}
return 0;
case WM_HSCROLL:
switch (LOWORD(wParam)) {
case SB_LINELEFT:
Speed=max(0,Speed-1);
break;
case SB_LINERIGHT:
Speed=min(1000,Speed+1);
break;
case SB_PAGELEFT:
Speed=max(0,Speed-10);
break;
case SB_PAGERIGHT:
Speed=min(1000,Speed+10);
break;
case SB_THUMBTRACK:
Speed=HIWORD(wParam);
break;
}
if(timerTF){
SetTimer(hWnd, 1, Speed, NULL);
}
SetScrollPos((HWND)lParam,SB_CTL,Speed,TRUE);
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_TIMER:
{
if(changeHandleTF){
ChangeHandle();
}
if( hWndPoint == hWnd || hWndPoint == hScroll ||
hWndPoint == hCombo1 || hWndPoint == hCombo2 )
{
return 0;
}
switch (MyMessage){
case LBUTTON:
SendMessage(hWndPoint, WM_LBUTTONDOWN, MyWPARAM, MAKELPARAM(Pt.x, Pt.y));
SendMessage(hWndPoint, WM_LBUTTONUP, MyWPARAM, MAKELPARAM(Pt.x, Pt.y));
break;
case RBUTTON:
SendMessage(hWndPoint, WM_RBUTTONDOWN, MyWPARAM, MAKELPARAM(Pt.x, Pt.y));
SendMessage(hWndPoint, WM_RBUTTONUP, MyWPARAM, MAKELPARAM(Pt.x, Pt.y));
break;
case VKEYBOARD:
keybd_event(MyWPARAM, 0, 0, 0);
keybd_event(MyWPARAM, 0, KEYEVENTF_KEYUP, 0);
break;
case KEYBOARD:
keybd_event(c[Index], 0, 0, 0);
keybd_event(c[Index], 0, KEYEVENTF_KEYUP, 0);
break;
}
}
return 0;
case WM_COMMAND:
if( HIWORD(wParam) == CBN_SELCHANGE ){
switch (LOWORD(wParam)) {
case ID_COMBOBOX1:
ChangeKey1();
break;
case ID_COMBOBOX2:
ChangeKey1();
break;
}
SetFocus(hWnd);
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
UnregisterHotKey(hWnd, 0x0000);
UnregisterHotKey(hWnd, 0x0001);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
'Programming > WinAPI' 카테고리의 다른 글
DLL dwReason 관련 사이트 (0) | 2013.03.22 |
---|---|
ScreenToClient, ClientToScreen 함수 (0) | 2013.02.13 |
Winapi 초기본(주석 有) (0) | 2012.11.16 |