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开始左键点击
"); 
printf("按F4开始右键点击
"); 
printf("按F2停止点击
"); 
printf("按F6隐藏窗口
");
printf("按F7隐藏本exe
");
printf("请确定一开始你要隐藏的窗口在最上方时,按F6确认,一次就好
");
printf("请保证要隐藏的窗口已打开后,再关闭exe,否则一切后果自负
");
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;
}
原文地址:https://www.cnblogs.com/lher/p/6567972.html