API函数的学习与运用
1.窗口
1.获取最前方的窗口句柄
GetForegroundWindow()
返回值:HWND类型。
调用方式:HWND hwnd=GetForegroundWindow();即hwnd就存着你的窗口句柄。
HWND不能用全局变量(我也不知道为什么)
2.隐藏/显示窗口
ShowWindow(HWND hwnd,bool f)
第一个参数为窗口句柄,第二个参数为一个bool类型,0表示隐藏,1表示显示。没有返回值。
2.键盘keybd_event
1.键盘键与虚拟键码对照表
字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
A 65 0 96 F1 112 Backspace 8
B 66 1 97 F2 113 Tab 9
C 67 2 98 F3 114 Clear 12
D 68 3 99 F4 115 Enter 13
E 69 4 100 F5 116 Shift 16
F 70 5 101 F6 117 Control 17
G 71 6 102 F7 118 Alt 18
H 72 7 103 F8 119 Caps Lock 20
I 73 8 104 F9 120 Esc 27
J 74 9 105 F10 121 Spacebar 32
K 75 * 106 F11 122 Page Up 33
L 76 + 107 F12 123 Page Down 34
M 77 Enter 108 -- -- End 35
N 78 - 109 -- -- Home 36
O 79 . 110 -- -- Left Arrow 37
P 80 / 111 -- -- Up Arrow 38
Q 81 -- -- -- -- Right Arrow 39
R 82 -- -- -- -- Down Arrow 40
S 83 -- -- -- -- Insert 45
T 84 -- -- -- -- Delete 46
U 85 -- -- -- -- Help 47
V 86 -- -- -- -- Num Lock 144
W 87
X 88
Y 89
Z 90
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
2. 判断某个键是否被按下
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
调用方式:KEY_DOWN(int x),x为你要判断的那个键的虚拟键值。返回值:按下返回1,未按下返回0。
3.模拟某个键点击
模拟按下:keybd_event(int x,0,0,0);x为你要按下的那个键的虚拟键值
模拟抬起:keybd_event(int x,0,KEYEVENTF_KEYUP,0);x为你要抬起的那个键的虚拟键值
3.鼠标
1.鼠标的虚拟键值
左键:MOUSE_MOVED 右键:MOUSE_EVENT 滚轮:MOUSE_WHEELED
2.获取鼠标在屏幕内的位置
GetCursorPos(LPPOINT lppoint)
typedef struct tagPOINT {
LONG x;
LONG y;
}*LPPOINT;
LPPOINT类型是一个指针。
调用该函数后,当前鼠标位置为(lppoint->x,lppoint->y)。屏幕左上角为(0,0)。
3.设置鼠标在屏幕中的位置
SetCursorPos(int x,int y);
x,y为你想要设置的鼠标位置。调用该函数后,鼠标会跑到位置(x,y)。屏幕左上角为(0,0)。
4.把鼠标在屏幕上的位置转化成在窗口的位置
ScreenToClient(HWND hwnd,LPPOINT lppoint)
第一个参数为窗口句柄,第二个参数为当前鼠标在屏幕中的位置。
调用该函数后,当前鼠标位置为(lppoint->x,lppoint->y)。窗口左上角为(0,0)。
5.把鼠标在窗口的位置转化成在屏幕上的位置
ClientToScreen(HWND hwnd,LPPOINT lppoint)
第一个参数为窗口句柄,第二个参数为当前鼠标在窗口中的位置。
调用该函数后,当前鼠标位置为(lppoint->x,lppoint->y)。屏幕左上角为(0,0)。
6.模拟鼠标点击
模拟鼠标左键按下:mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
模拟鼠标左键抬起:mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
模拟鼠标右键按下:mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
模拟鼠标右键抬起:mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
#include<iostream> #include<conio.h> #include<cstdio> #include<windows.h> #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //必要的,我是背下来的 using namespace std; int main(){ HWND hwnd,_hwnd=GetForegroundWindow(); printf("按F3开始左键点击\n"); printf("按F4开始右键点击\n"); printf("按F2停止点击\n"); printf("按F6隐藏窗口\n"); printf("按F7隐藏本exe\n"); printf("请确定一开始你要隐藏的窗口在最上方时,按F6确认,一次就好\n"); printf("请保证要隐藏的窗口已打开后,再关闭exe,否则一切后果自负\n"); bool f=false,_f=false; while(1) { if(KEY_DOWN(117)) { hwnd=GetForegroundWindow();//获取最前端的窗口的句柄 Sleep(500); break; } } char a; int now=0; while(1){ if(KEY_DOWN(118))//F7 { ShowWindow(_hwnd,_f);//隐藏窗口 ,0表示隐藏 _f=1-_f; Sleep(500); } if(KEY_DOWN(117))//F6 { ShowWindow(hwnd,f);//隐藏窗口 ,0表示隐藏 f=1-f; Sleep(500); } if(KEY_DOWN(113)){ //F2 now=0; Sleep(100);//你的手不会再一瞬间送开,所以要处理一下 } if(KEY_DOWN(114)){ //F3 now=1; Sleep(100); } if(KEY_DOWN(115)){ //F4 now=2; Sleep(100); } if(now==1){//模拟点击左键 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Sleep(10);//要留给某些应用的反应时间 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } if(now==2){//模拟点击右键 mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); Sleep(10); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } Sleep(20);//点击间隔 单位是毫秒 } return 0; }