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()
- {
- if(KEY_DOWN())
- {
- hwnd=GetForegroundWindow();//获取最前端的窗口的句柄
- Sleep();
- break;
- }
- }
- char a;
- int now=;
- while(){
- if(KEY_DOWN())//F7
- {
- ShowWindow(_hwnd,_f);//隐藏窗口 ,0表示隐藏
- _f=-_f;
- Sleep();
- }
- if(KEY_DOWN())//F6
- {
- ShowWindow(hwnd,f);//隐藏窗口 ,0表示隐藏
- f=-f;
- Sleep();
- }
- if(KEY_DOWN()){ //F2
- now=;
- Sleep();//你的手不会再一瞬间送开,所以要处理一下
- }
- if(KEY_DOWN()){ //F3
- now=;
- Sleep();
- }
- if(KEY_DOWN()){ //F4
- now=;
- Sleep();
- }
- if(now==){//模拟点击左键
- mouse_event(MOUSEEVENTF_LEFTDOWN,,,,);
- Sleep();//要留给某些应用的反应时间
- mouse_event(MOUSEEVENTF_LEFTUP,,,,);
- }
- if(now==){//模拟点击右键
- mouse_event(MOUSEEVENTF_RIGHTDOWN,,,,);
- Sleep();
- mouse_event(MOUSEEVENTF_RIGHTUP,,,,);
- }
- Sleep();//点击间隔 单位是毫秒
- }
- return ;
- }
API函数的学习与运用的更多相关文章
- WINDOWS API 函数(超长,值得学习)
一.隐藏和显示光标 函数: int ShowCursor ( BOOL bShow ); 参数 bshow,为布尔型,bShow的值为False时隐藏光标,为True时显示光标:该函数的返回值为整型 ...
- Delphi内存操作API函数(备查,并一一学习)
Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...
- 学习angularjs的内置API函数
angularjs的内置API函数有很多,如isString()判断给定的对象是否为字符串,如果是返回 true,反之返回false:isNumber()判断给定的对象是否为数字,如果是返回 true ...
- Drools API的使用学习
Drools API的使用学习在 Drools 当中,规则的编译与运行要通过 Drools 提供的各种 API 来实现,这些 API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作 ...
- Appium常用的API函数
在学习应用一个框架之前,应该了解一下这个框架的整体结构或是相应的API函数.这篇文章还不错:http://blog.sina.com.cn/s/blog_68f262210102vzf9.html,就 ...
- 初识API函数
我之前是一个只会编写数值计算的程序的OIer,但我并不甘于这种现状,于是我编写了我的第一个使用API函数的C++程序,开发平台是VS2012: // ConsoleApplication.cpp : ...
- 用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle)完成文件拷贝程序(初级版)
文件拷贝程序 程序类型:Console 参数:源文件名 目的文件名 要求:1.只能使用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle ...
- 【API】API函数创建用户,添加到管理组
1 学习目标 使用API添加用户可以绕过某些杀毒软件的限制. 2 编程思路 2.1 代码原理 使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个A ...
- hash算法搜索获得api函数地址的实现,"kernel32.dll", "CreateThread"
我们一般要获得一个函数的地址,通常采用的是明文,例如定义一个api函数字符串"MessageBoxA",然后在GetProcAddress函数中一个字节一个字节进行比较.这样弊端很 ...
随机推荐
- Hyper-V中的Linux无法配置网络地址的解决办法
一周碰到2次在Hyper-V 2012中安装了Linux,也安装了IC 3.4.但是却无法配置IP地址的问题.因此造成很多不便,因此找机会把这个原因和解决办法进行了尝试. 这过程中感谢同事的提示,让我 ...
- python学习笔记四:lambda表达式和switch
一.定义 lambda arg1,arg2... : returnValue 二.示例 #!/usr/bin/python def f(x,y): return x*y print f(2,3) g ...
- 【Invert Binary Tree】cpp
题目: Invert Binary Tree Total Accepted: 20346 Total Submissions: 57084My Submissions Question Solutio ...
- Percona-Tookit工具包之pt-slave-restart
Preface Sometimes,the threads(especially the SQL_Thread) will be terminated by accident.The ...
- cannot bind to 127.0.0.1:5037 报错
使用appium连接真机时,提示这个错误,找了很久,发现是端口被占用 打开cmd,netstat -nao查看当前的TCP连接,找到使用127.0.0.1:5037的代码,然后到任务管理器查看详细进程 ...
- Mysql与Oracle之间的数据类型转换
MySQL Data Type Oracle Data Type BIGINT NUMBER(19, 0) BIT RAW BLOB BLOB, RAW CHAR CHAR DATE DATE DAT ...
- [译]13-spring 内部bean
spring基于xml配置元数据的方式下,位于property元素或者contructor-arg元素内的bean元素被称为内部bean,如下: <?xml version="1.0& ...
- c++知识点总结--new的一些用法
new operator 将对象产生与heap,不但分配内存而且为该对象调用一个constructor operator new只是分配内存,没有constructor被调用 有个一个特殊版本,称 ...
- HDU 4760 Good Firewall ( Trie树 )
一开始看的时候就想歪了,比赛的时候一直在YY线段树区间覆盖,然后纠结节点数太多开不下怎么办啊啊啊啊…… 然后昨天吃饭的时候也在纠结这到底是个啥题,后来发现公共前缀->前缀??!!!!->这 ...
- 对象内存 (扩展 Data Structure Alignment)
对于一个class object来说,我们需要多少内存才能表现出来,大致分为3类,这里在前面文章有内存图 (1)非静态数据成员的综合大小,这也符合了c++对象模型的结构 (2)填充字节,就是我们所说的 ...