程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 模仿鼠標事宜的完成思緒及代碼

模仿鼠標事宜的完成思緒及代碼

編輯:關於C++

模仿鼠標事宜的完成思緒及代碼。本站提示廣大學習愛好者:(模仿鼠標事宜的完成思緒及代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是模仿鼠標事宜的完成思緒及代碼正文


模仿鼠標事宜,普通可以經由過程mouse_event()和SendInPut()兩種辦法。mouse_event()在windows前期版本中逐步被SendInPut()代替。SendInPut()模仿鼠標挪動的事宜中,標記位取值分歧,輸出坐標的意義也分歧。簡略來講就是,添加MOUSEEVENTF_ABSOLUTE標記位表現鼠標挪動是經由過程相對坐標定位,此時的坐標要經由過程轉換。光標在屏幕中被分紅65535個小塊,可以經由過程以下轉換:


double fx = x *(65535.0f / fScreenWidth);
double fy = y *(65535.0f / fScreenHeight);

若不應用MOUSEEVENTF_ABSOLUTE標記位,則坐標是絕對前一坐標的位移。

SendInPut()鼠標時光應用構造以下:


typedef struct tagMOUSEINPUT {
    LONG    dx;
    LONG    dy;
    DWORD   mouseData;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;

msdn中完全說明以下:
     dx 鼠標的相對地位,或自前次鼠標事宜的活動量發生的dwFlags成員的值而定。鼠標的x坐標被指定為相對的數據,絕對於被指定為數據的挪動像素數。
     dy 鼠標的相對地位,或自前次鼠標事宜的活動量發生的dwFlags成員的值而定。鼠標的y坐標被指定為相對的數據,絕對於被指定為數據的挪動像素數。
     mouseData 假如dwFlags中包括MOUSEEVENTF_WHEEL,mouseData指定滾輪活動的量。正值表現滾輪向前扭轉,即闊別用戶,負值表現滾輪向後扭轉,即朝向用戶。滾輪被界說為WHEEL_DELTA,這是120。

     上面代碼演示了鼠標的幾個詳細操作。
     1、我如何能力在運用法式中模仿鼠標事宜?

     有兩個API函數可使用:mouse_event()和SendInput();

     2、應當應用哪一個API函數?

     在Windows NT/2000/XP中,mouse_event()函數曾經被SendInput()函數已被代替的。是以,在這些操作體系上,你應當應用SendInput()函數。(除非你須要供給向後兼容性與Windows98等)。

     3、若何應用SendInput()函數來模仿點擊鼠標左鍵?


void LeftClick ( )

    INPUT    Input={0};
    // 左鍵按下
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
    ::SendInput(1,&Input,sizeof(INPUT));

    // 左鍵抬起
    ::ZeroMemory(&Input,sizeof(INPUT));
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
    ::SendInput(1,&Input,sizeof(INPUT));
}

4、若何應用SendInput()函數來模仿點擊鼠標右鍵?


void RightClick ( )

    INPUT    Input={0};
    // 右鍵按下
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_RIGHTDOWN;
    ::SendInput(1,&Input,sizeof(INPUT));

    // 右鍵抬起
    ::ZeroMemory(&Input,sizeof(INPUT));
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_RIGHTUP;
    ::SendInput(1,&Input,sizeof(INPUT));
}

5、若何應用SendInput()函數模仿鼠標的挪動?

void MouseMove (int x, int y )

    double fScreenWidth    = ::GetSystemMetrics( SM_CXSCREEN )-1;
    double fScreenHeight  = ::GetSystemMetrics( SM_CYSCREEN )-1;
    double fx = x*(65535.0f/fScreenWidth);
    double fy = y*(65535.0f/fScreenHeight);
    INPUT  Input={0};
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
    Input.mi.dx = fx;
    Input.mi.dy = fy;
    ::SendInput(1,&Input,sizeof(INPUT));
}

6、若何應用SendInput()函數來模仿點擊鼠標中鍵?


void MiddleClick()
{
    INPUT    Input={0};
    // 設置滾輪量
    Input.type      = INPUT_MOUSE;
    Input.mi.dwFlags  = MOUSEEVENTF_WHEEL;
    Input.mi.mouseData = 500;
    ::SendInput(1,&Input,sizeof(INPUT));
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved