易語言加載dll模擬真人移動鼠標(biāo)軌跡算法

一.簡介

鼠標(biāo)軌跡算法是一種模擬人類鼠標(biāo)操作的程序布讹,它能夠模擬出自然而真實的鼠標(biāo)移動路徑。

鼠標(biāo)軌跡算法的底層實現(xiàn)采用C/C++語言胚股,原因在于C/C++提供了高性能的執(zhí)行能力和直接訪問操作系統(tǒng)底層資源的能力。

鼠標(biāo)軌跡算法具有以下優(yōu)勢:

  • 模擬人工軌跡:算法能夠模擬出非貝塞爾曲線的自然鼠標(biāo)移動,避免了機械式的直線移動位迂。
  • 適當(dāng)?shù)耐nD/加速/減速:算法能夠根據(jù)需要模擬出鼠標(biāo)的停頓、加速和減速,使得軌跡更加真實囤官。
  • 隨機軌跡:在固定兩點間冬阳,算法能夠生成不同的隨機軌跡,增加了軌跡的不可預(yù)測性党饮。


    QQ截圖20241110111818.jpg

二.應(yīng)用場景

游戲鼠標(biāo)軌跡檢測(檢測能過無畏fps類型肝陪、傳奇、夢幻等游戲刑顺,已經(jīng)在游戲中驗證)
滑塊拖動驗證
部分網(wǎng)頁鼠標(biāo)軌跡檢測

三.支持多種編程語言

1.C++頭文件

/******************************************************************************************/
 
@SDK功能描述:C++鼠標(biāo)軌跡
 
/******************************************************************************************/
 
#ifndef _SN_SDK_H__
 
#define _SN_SDK_H__
 
#include <windows.h>
 
//返回參數(shù)
 
typedef struct SN_RESULT {
 
int code; //錯誤碼氯窍,如果為 0 表示成功,否則表示錯誤號
 
char message[4096]; //錯誤信息蹲堂,如果為 "OK" 表示成功狼讨,否則返回錯誤信息
 
}SN_RESULT;
 
//坐標(biāo)參數(shù)
 
typedef struct SN_POINT
 
{
 
int x; //屏幕坐標(biāo),左上角(0柒竞,0)政供,右下角(1920,1080 - 以實際屏幕為準(zhǔn))
 
int y; //屏幕坐標(biāo)朽基,左上角(0布隔,0),右下角(1920稼虎,1080 - 以實際屏幕為準(zhǔn))
 
}SN_POINT;
 
//軌跡參數(shù)
 
typedef struct SN_POINT_PARAMS
 
{
 
struct SN_POINT point;//屏幕坐標(biāo)衅檀,左上角(0,0)霎俩,右下角(1920哀军,1080 - 以實際屏幕為準(zhǔn))
 
int delayTime; //延時時間(單位:毫秒),僅供參考
 
}SN_POINT_PARAMS;
 
/*創(chuàng)建句柄
*
* 參數(shù):
* [in] szKey: 卡密
* [out] pResult: 返回錯誤信息打却,參數(shù)pResult.code(錯誤碼)如果為 0 表示成功杉适,否則表示錯誤號;
*
* 返回值:成功返回句柄,失敗返回NULL
*
*/
 
HANDLE WINAPI apiSNCreateHandle(char* szKey, SN_RESULT* pResult);
 
/*獲取鼠標(biāo)移動軌跡
*
* 參數(shù):
* [in] handle: 句柄(通過調(diào)用apiSNCreateHandle得到)
* [in] startPoint: 開始坐標(biāo)学密,左上角(0淘衙,0),右下角(1920腻暮,1080 - 以實際屏幕為準(zhǔn))
* [in] endPoint: 結(jié)束坐標(biāo)彤守,左上角(0,0)哭靖,右下角(1920具垫,1080 - 以實際屏幕為準(zhǔn))
* [out] points: 軌跡數(shù)組,如果數(shù)組中元素 point 出現(xiàn)(-1,-1),表示鼠標(biāo)軌跡結(jié)束
*
* 返回值:返回參數(shù)SN_RESULT.code(錯誤碼)如果為 0 表示成功试幽,否則表示錯誤號;
*
*/
 
SN_RESULT WINAPI apiSNMouseMove(HANDLE handle, SN_POINT startPoint, SN_POINT endPoint, SN_POINT_PARAMS* points);
 
/*獲取版本號
*
* 參數(shù):
* [in] handle: 句柄(通過調(diào)用apiSNCreateHandle得到)
* [out] szVersion: 版本號
*
* 返回值:返回參數(shù)SN_RESULT.code(錯誤碼)如果為 0 表示成功筝蚕,否則表示錯誤號;
*
*/
 
SN_RESULT WINAPI apiSNGetVersion(HANDLE handle, char* szVersion);
 
/*獲取錯誤信息
*
* 參數(shù):
* [in] handle: 句柄(通過調(diào)用apiSNCreateHandle得到)
*
* 返回值:返回參數(shù)SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
 
SN_RESULT WINAPI apiSNGetError(HANDLE handle);
 
/*釋放句柄(內(nèi)存)
*
* 參數(shù):
* [in] handle: 句柄(通過調(diào)用apiSNCreateHandle得到)
*
* 返回值:返回參數(shù)SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
 
SN_RESULT WINAPI apiSNDestroyHandle(HANDLE handle);
 
#endif // !_SN_SDK_H__

2.其他編程語言

為了易于集成和使用起宽,我們將鼠標(biāo)軌跡算法封裝為DLL(動態(tài)鏈接庫)洲胖。這種封裝方式不僅保留了算法的性能優(yōu)勢,還提供了跨平臺和跨語言的兼容性坯沪,目前支持編程語言如下:

  • C++
  • Python
  • 易語言

推算軌跡算法耗時均為毫秒級绿映,<= 5ms ,速度超快腐晾,fps類型游戲完全無壓力叉弦!

3.鼠標(biāo)軌跡API調(diào)用流程圖

QQ截圖20241103105733.jpg

注意:如果是多線程,每個線程都需要通過apiSNCreateHandle創(chuàng)建HANDLE句柄,這樣才能多個線程互不影響

4.C++鼠標(biāo)軌跡接口

/****************************************************************************************/
 
@SDK功能描述:鼠標(biāo)軌跡
/******************************************************************************************/
.版本 2
.支持庫 spec
 
.程序集 窗口程序集_啟動窗口
 
.子程序 _啟動子程序, 整數(shù)型
 
_臨時子程序 ()
返回 (0)
 
 
.子程序 _臨時子程序
.局部變量 handle, 整數(shù)型
.局部變量 pResult, SN_RESULT, 靜態(tài), , 返回錯誤信息藻糖,參數(shù)pResult.code(錯誤碼)如果為 0 表示成功淹冰,否則表示錯誤號;
.局部變量 startPoint, SN_POINT, , , 開始坐標(biāo),左上角(0巨柒,0)樱拴,右下角(1920,1080 - 以實際屏幕為準(zhǔn))
.局部變量 endPoint, SN_POINT, , , 結(jié)束坐標(biāo)潘拱,左上角(0疹鳄,0)拧略,右下角(1920芦岂,1080 - 以實際屏幕為準(zhǔn))
.局部變量 points, SN_POINT_PARAMS, , "3000", 軌跡數(shù)組,如果數(shù)組中元素 point 出現(xiàn)(-1,-1),表示鼠標(biāo)軌跡結(jié)束
.局部變量 index, 整數(shù)型
 
' ---------------------------------------------------------------
' 1.創(chuàng)建句柄
' 其中卡密 SNKJww1gc5tmDZJWhD21DLArs6vV8DXzQPgW7c9y6e2w 僅用于測試垫蛆,需要找開發(fā)人員重新購買禽最,
' ---------------------------------------------------------------
handle = apiSNCreateHandle (“SNKJww1gc5tmDZJWhD21DLArs6vV8DXzQPgW7c9y6e2w”, “SNTrack.onnx”, pResult)
調(diào)試輸出 (pResult.code, 到文本 (pResult.message))
調(diào)試輸出 (“句柄”, handle)
.如果真 (pResult.code < 0)
    調(diào)試輸出 (“-----------程序結(jié)束-----------”)
    返回 ()
 
.如果真結(jié)束
 
startPoint.x = 10
startPoint.y = 10
 
endPoint.x = 100
endPoint.y = 100
 
調(diào)試輸出 (“預(yù)備定義數(shù)組數(shù)量”, 取數(shù)組成員數(shù) (points))
' ---------------------------------------------------------------
' 2.獲取鼠標(biāo)軌跡
' ---------------------------------------------------------------
apiSNMouseMove (handle, startPoint, endPoint, points)
 
 
調(diào)試輸出 (取變量地址 (startPoint.x), 取變量地址 (startPoint.y))
.計次循環(huán)首 (取數(shù)組成員數(shù) (points), index)
    .如果真 (points [index].point.x = -1 且 points [index].point.y = -1)
        刪除成員 (points, index + 1, 10000 - index)
        跳出循環(huán) ()
    .如果真結(jié)束
    ' 調(diào)試輸出 (index, “坐標(biāo)”, points [index].point.x, points [index].point.y, points [index].delayTime)
.計次循環(huán)尾 ()
調(diào)試輸出 (取數(shù)組成員數(shù) (points))
 
 
.計次循環(huán)首 (取數(shù)組成員數(shù) (points), index)
    調(diào)試輸出 (“坐標(biāo)”, points [index].point.x, points [index].point.y, points [index].delayTime)
.計次循環(huán)尾 ()
 
' ---------------------------------------------------------------
' 3.釋放內(nèi)存
' ---------------------------------------------------------------
apiSNDestroyHandle (handle)
調(diào)試輸出 (“-----------程序結(jié)束-----------”)
 
————————————————

5.云盤源碼下載

云盤目錄介紹:
demo - 包含各種編程語言的demo
dll - 分別是x86和x64平臺所需要的dll/lib/h文件
windows 鼠標(biāo)軌跡測試工具 - exe測試鼠標(biāo)軌跡效果( demo 中的 c++ 工程編譯后的exe可執(zhí)行文件)

四.效果演示

  • 1.開始坐標(biāo)為(100,100)袱饭,結(jié)束坐標(biāo)為(800川无,800),通過調(diào)用接口獲得 4 條鼠標(biāo)軌跡
  • 2.開始坐標(biāo)為(1000虑乖,100)懦趋,結(jié)束坐標(biāo)為(800,800)疹味,通過調(diào)用接口獲得 2 條鼠標(biāo)軌跡


    3cdb6cf550104cd3946b3bf63fd1f772.gif

五.常見問題

1.是否支持多線程

支持

2.如何使用多線程

參考前面的《2.鼠標(biāo)軌跡API調(diào)用流程圖》仅叫,多線程和單線程類似;如果是多線程,那么每個線程都需要通過apiSNCreateHandle創(chuàng)建HANDLE句柄,這樣才能多個線程互不影響

六.更新日志

  • 2024.09.28 新增易語言demo
  • 2024.09.21 修復(fù)部分水平/垂直軌跡出現(xiàn)負(fù)數(shù)的情況
  • 2024.09.19 優(yōu)化部分軌跡延遲時間為0的情況(可能會造成鼠標(biāo)瞬移)
  • 2024.08.20 優(yōu)化部分軌跡可能出現(xiàn)負(fù)數(shù)的問題
  • 2024.07.15 優(yōu)化水平/垂直軌跡
  • 2024.06.25 新增錯誤日志信息
  • 2024.06.06 python 模擬人工鼠標(biāo)軌跡demo
  • 2024.02.06 c++ 模擬人工鼠標(biāo)軌跡demo
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糙捺,一起剝皮案震驚了整個濱河市诫咱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洪灯,老刑警劉巖坎缭,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡掏呼,警方通過查閱死者的電腦和手機坏快,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憎夷,“玉大人假消,你說我怎么就攤上這事×虢樱” “怎么了富拗?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸣戴。 經(jīng)常有香客問我啃沪,道長,這世上最難降的妖魔是什么窄锅? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任创千,我火速辦了婚禮,結(jié)果婚禮上入偷,老公的妹妹穿的比我還像新娘追驴。我一直安慰自己,他們只是感情好疏之,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布殿雪。 她就那樣靜靜地躺著,像睡著了一般锋爪。 火紅的嫁衣襯著肌膚如雪丙曙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天其骄,我揣著相機與錄音亏镰,去河邊找鬼。 笑死拯爽,一個胖子當(dāng)著我的面吹牛索抓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毯炮,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼逼肯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了否副?” 一聲冷哼從身側(cè)響起汉矿,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎备禀,沒想到半個月后洲拇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈揍,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年赋续,在試婚紗的時候發(fā)現(xiàn)自己被綠了男翰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡纽乱,死狀恐怖蛾绎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸦列,我是刑警寧澤租冠,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站薯嗤,受9級特大地震影響顽爹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骆姐,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一镜粤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玻褪,春花似錦肉渴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庸诱,卻和暖如春捻浦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桥爽。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昧识,地道東北人钠四。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像跪楞,于是被迫代替她去往敵國和親缀去。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容