• 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;
    }
  • 相关阅读:
    選定下拉列表的方法
    JAVA学习路线
    封装
    重写(Overriding)
    java内存泄露
    学习实例.文章管理.文章类.Article.java
    方法重载
    学习实例.文章管理.分页查询类.Page.java
    学习实例.文章管理.目标与经验总结
    Java多线程1
  • 原文地址:https://www.cnblogs.com/lher/p/6567972.html
Copyright © 2020-2023  润新知