OSDN Git Service

v0.0.1 release
[winautomata/winautomata.git] / mousehook.c
1 #include <windows.h>
2 #include <windowsx.h>
3 #include <stdio.h>
4
5 #define BUTTON_ID1 0
6 #define BUTTON_ID2 1
7
8 HMODULE hModule;
9 void (__stdcall *SetHook)(HINSTANCE hModule);
10 void (__stdcall *RemoveHook)();
11
12 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
13 {
14     HDC hdc;
15     PAINTSTRUCT ps;
16     static HWND hStartButton;
17     static HWND hEndButton;
18
19     switch(msg) {
20     case WM_DESTROY:
21         PostQuitMessage(0);
22         return 1;
23
24     case WM_COMMAND:
25         switch(LOWORD(wParam)) {
26             case BUTTON_ID1: 
27                 SetHook(hModule);
28                 break;
29                 
30             case BUTTON_ID2:
31                 RemoveHook();
32                 break;
33         }
34         break;
35
36     case WM_CREATE:
37         hStartButton = CreateWindow(
38                     TEXT("BUTTON"), TEXT("Start"),
39                     WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
40                     0, 0, 100, 50, hWnd, (HMENU)BUTTON_ID1,
41                     ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
42         hEndButton = CreateWindow(
43                     TEXT("BUTTON"), TEXT("End"),
44                     WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
45                     100, 0, 100, 50, hWnd, (HMENU)BUTTON_ID2,
46                     ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
47     }
48     return DefWindowProc(hWnd, msg, wParam, lParam);
49 }
50
51 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
52             PSTR lpCmdLine, int nCmdShow)
53 {
54     hModule = LoadLibrary("mousehook_lib.dll");
55     if(hModule == NULL) {
56         fprintf(stderr, "not found mousehook_lib.dll");
57         exit(1);
58     }
59
60     SetHook = (void (__stdcall *)(HINSTANCE)) (HINSTANCE)GetProcAddress(hModule, "SetHook");
61     RemoveHook = (void (__stdcall *)()) (HINSTANCE)GetProcAddress(hModule, "RemoveHook");
62
63     HWND hWnd;
64     MSG msg;
65     WNDCLASS winc;
66
67     winc.style = CS_HREDRAW | CS_VREDRAW;
68     winc.lpfnWndProc = WndProc;
69     winc.cbClsExtra = winc.cbWndExtra = 0;
70     winc.hInstance = hInstance;
71     winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
72     winc.hCursor = LoadCursor(NULL, IDC_ARROW);
73     winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
74     winc.lpszMenuName = NULL;
75     winc.lpszClassName = TEXT("mousehook");
76
77     if(!RegisterClass(&winc)) {
78         fprintf(stderr, "RegisterClass\n");
79         return 1;
80     }
81
82     hWnd = CreateWindow(
83         TEXT("mousehook"), TEXT("Kitty on your lap"),
84         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
85         CW_USEDEFAULT, CW_USEDEFAULT,
86         300, 300,
87         NULL, NULL, hInstance, NULL);
88
89     if(hWnd == NULL) {
90         fprintf(stderr, "CreateWindow\n");
91         return 1;
92     }
93
94     while(GetMessage(&msg, NULL, 0, 0)) {
95         TranslateMessage(&msg);
96         DispatchMessage(&msg);
97     }
98
99     return msg.wParam;
100 }