Форум программистов, компьютерный форум CyberForum.ru

WinAPI с чего начать? - C++

Восстановить пароль Регистрация
 
Faxed
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 7
31.03.2014, 20:11     WinAPI с чего начать? #1
Знаю, что тема уже поднималась и тем не менее. С чего начать изучать именно winAPI
Например, мой друг написал программу, позволяющую щелкать все время в одном месте и иногда в другом (для игры какой-то. Программа не имеет граф. Интерфейса, но он применяет winAPI . Тоже хочу, но не знаю с чего начать. Сам с++ владею на уровне ооп. Какие книги посоветуете???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <cstdio>
#include <windows.h>
 
int dripTimeout;
LPPOINT posCup;
LPPOINT posDrip;
HWND gameWndHandle;
bool dripNow;
bool wantDrip;
 
HHOOK hKeybHook;
 
DWORD dThread;
DWORD dThread2;
 
HANDLE hThread;
HANDLE hThread2;
 
CALLBACK LRESULT kHook(int nCode, WPARAM wParam, LPARAM lParam) {
    if( nCode < 0 )
        return CallNextHookEx(hKeybHook,nCode,wParam,lParam);
 
    if( wParam == WM_KEYDOWN ) {
        KBDLLHOOKSTRUCT* hook = (KBDLLHOOKSTRUCT*)lParam;
        if(hook->vkCode == 0x51){
            if(hThread){
                TerminateThread(hThread, 0);
                TerminateThread(hThread2, 0);
            }
            exit(1);
        }
        else if(hook->vkCode == 0x44){
            wantDrip = !wantDrip;
        }
    }
    return CallNextHookEx(hKeybHook,nCode,wParam,lParam);
}
 
DWORD WINAPI drip(LPVOID lpParameter){
    while(1){
        Sleep(dripTimeout);
        if(wantDrip){
            dripNow = true;
            SetCursorPos(posDrip->x, posDrip->y);
            /*LPARAM lParam = MAKELPARAM(posDrip->x, posDrip->y);
            SendMessage(gameWndHandle, WM_LBUTTONDOWN, MK_LBUTTON, lParam);
            */
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            dripNow = false;
        }
    }
    return 2;
}
 
DWORD WINAPI cup(LPVOID lpParameter){
    LPPOINT tmppoint = new POINT;
    while(1){
        GetCursorPos(tmppoint);
        if(tmppoint->x != posCup->x || tmppoint->y != posCup->y || !dripNow)
            SetCursorPos(posCup->x, posCup->y);
        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
 
        Sleep(10);
    }
    return 3;
}
 
int WINAPI WinMain(
HINSTANCE hInstance,        // äåñêðèïòîð ГІГҐГЄГіГ№ГҐГЈГ® ýêçåìïëÿðГ* îêГ*Г*
HINSTANCE hPrevInstance,        // äåñêðèïòîð ïðåäûäóùåãî ýêçåìïëÿðГ* îêГ*Г*
LPSTR lpCmdLine,            // ГіГЄГ*Г§Г*òåëü Г*Г* êîìГ*Г*Г¤Г*ГіГѕ ñòðîêó
int nCmdShow            // ïîêГ*çûâГ*ГҐГІ ñîñòîÿГ*ГЁГҐ îêГ*Г*
)
{
    wantDrip = true;
    posCup = NULL;
    posDrip  = NULL;
    gameWndHandle = NULL;
    dripNow = false;
 
    printf("Enter C to set cup position\nEnter D to set Drip position\nEnter W to get Window (with cup) handle\nEnter E to end type (if all done)\n>");
    char c = getchar();
 
    bool endType = false;
    while(posCup == NULL || posDrip == NULL || gameWndHandle == NULL || !endType){
        if(endType){
            printf("Something wrong:\n");
            if(posCup == NULL)
                printf("You didn't parse cup position!\n");
            if(posDrip == NULL)
                printf("You didn't parse drip position!\n");
            if(gameWndHandle == NULL)
                printf("You didn't parse window!\n");
            endType = false;
        }
        LPPOINT tmppoint = new POINT;
        switch(c){
        case 'c': case 'C':
            printf("You have 2 seconds to put mouse cursor over the cup button\n");
            Sleep(2000);
            posCup = new POINT;
            GetCursorPos(posCup);
            printf("Cup position: x: %i y: %i \n", posCup->x, posCup->y);
            printf("> ");
            break;
        case 'd': case 'D':
            printf("You have 2 seconds to put mouse cursor over the drip button\n");
            Sleep(2000);
            posDrip = new POINT;
            GetCursorPos(posDrip);
            printf("Drip position: x: %i y: %i \n", posDrip->x, posDrip->y);
            printf("> ");
            break;
        case 'E': case 'e':
            endType = true;
            break;
        case 'w': case 'W':
            printf("You have 2 seconds to put mouse cursor over the window with game\n");
            Sleep(2000);
            GetCursorPos(tmppoint);
            gameWndHandle = WindowFromPoint(*tmppoint);
            printf("> ");
            break;
        }
        c = getchar();
    }
 
    dripTimeout = 5000;
    printf("Enter timeout to drip in milliseconds (1 sec = 1000 millisec)\n");
    scanf("%i", &dripTimeout);
 
    hKeybHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)kHook, hInstance, NULL);
    printf("Press Q to exit\nI will start in 5 seconds. Goto drink tea and eat cookies :3\nPress D if you don't want drop. Press D again to start dropping.\n");
    Sleep(5000);
 
    MSG message;
 
    hThread = CreateThread(NULL, 0, drip, 0, 0, &dThread);
    hThread2 = CreateThread(NULL, 0, cup, 0, 0, &dThread2);
 
    while(GetMessage( &message, NULL, 0, 0 ) ){
        TranslateMessage( &message );
        DispatchMessage( &message );
    }
    UnhookWindowsHookEx(hKeybHook);
    return 1;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 20:11     WinAPI с чего начать?
Посмотрите здесь:

C++ С чего начать?
с чего начать C++
C++ C чего начать?
C++ С чего начать?
C++ с чего начать?
С чего начать? C++
C++ С чего начать?
C++ С чего начать

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
31.03.2014, 20:46     WinAPI с чего начать? #2
Советую начать с Петцольда "Программирование на виндовс 95" в 2 томах. Сам ее сейчас читаю. Логично выложен материал. От простого к сложному. Естественно там нету всяких заморочек с системами защиты и доступа аля виста или хр. Но принципы описаны неплохо. Хотя где-то к 12 главе (конец 1го тома, где я сейчас остановился) уже сложно читается (листинг самой большой программы-примера - 26 страниц!!!!).

Кроме того есть Дж.Рихтер Windows via c++. Тоже неплохая, там и про висту и про хр, но стиль изложения материала предусматривает неплохие знание самого устройства виндоус и вообще хоть каких-то знаний винапи (а иногда даже неплохих). По этому я ее отложил на позже. Прочитав 150 страниц мне пришлось кучу дополнительной инфы выискать в интернете, чтоб понять о чем он пишет. Может даже тех же страниц 100-150 пришлось рыскать (статьи, форумы и т.д.). Но вообще по отзывах в интернете эти 2 книги считаются одними из лучших.
Yandex
Объявления
31.03.2014, 20:46     WinAPI с чего начать?
Ответ Создать тему
Опции темы

Текущее время: 21:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru