易語言模擬真人鼠標軌跡算法 - 防止游戲檢測

一.簡介

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

鼠標軌跡算法的底層實現采用C/C++語言,原因在于C/C++提供了高性能的執行能力和直接訪問操作系統底層資源的能力。

鼠標軌跡算法具有以下優勢:

  • 模擬人工軌跡:算法能夠模擬出非貝塞爾曲線的自然鼠標移動,避免了機械式的直線移動。
  • 適當的停頓/加速/減速:算法能夠根據需要模擬出鼠標的停頓、加速和減速,使得軌跡更加真實。
  • 隨機軌跡:在固定兩點間,算法能夠生成不同的隨機軌跡,增加了軌跡的不可預測性。

二.應用場景

  • 游戲鼠標軌跡檢測(檢測能過無畏fps類型、傳奇、夢幻等游戲,已經在游戲中驗證)
  • 滑塊拖動驗證
  • 部分網頁鼠標軌跡檢測

三.支持多種編程語言

1.C++頭文件

/******************************************************************************************/@SDK功能描述:C++鼠標軌跡/******************************************************************************************//******************************************************************************************/@SDK功能描述:C++鼠標軌跡/******************************************************************************************/#ifndef _SN_SDK_H__
#define _SN_SDK_H__#include <windows.h>enum SN_TRACK_MOVE_TYPE
{TRACK_MOVE_TYPE_NORMAL=0,		// 用于常規軌跡 - 普通游戲鼠標軌跡TRACK_MOVE_TYPE_SLIDER,			// 用于滑塊軌跡,比常規常規軌跡密度更大 - 滑塊驗證軌跡
};enum SN_TRACK_POINT_TYPE
{TRACK_POINT_TYPE_NORMAL=0,		// 默認絕對坐標TRACK_POINT_TYPE_RELATIVE,		// 相對坐標
};//返回參數
typedef struct SN_RESULT {int code;			//錯誤碼,如果為 0 表示成功,否則表示錯誤號char message[4096];	//錯誤信息,如果為 "OK" 表示成功,否則返回錯誤信息}SN_RESULT;//坐標參數
typedef struct SN_POINT
{int x;				//屏幕坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)int y;				//屏幕坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)}SN_POINT;//軌跡參數
typedef struct SN_POINT_PARAMS
{struct SN_POINT point;//屏幕坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)int delayTime;		  //延時時間(單位:毫秒),僅供參考}SN_POINT_PARAMS;/*創建句柄
*
* 參數:
*	[in] szKey:		卡密(購買卡密:https://shop.4yuns.com/links/7C9F16B7)
* 	[in] pOnnxFilePath:設置 onnx 模型文件路徑,如果設置為 NULL,默認和 DLL文件同級目錄
* 	[out] pResult:		返回錯誤信息,參數pResult.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
* 返回值:成功返回句柄,失敗返回NULL
*
*/
HANDLE WINAPI apiSNCreateHandle(char* szKey, char* pOnnxFilePath, SN_RESULT* pResult);/*設置鼠標移動軌跡參數,調節軌跡密度/速度/軌跡類型,目前可以支持滑塊軌跡/普通軌跡
*
* 參數:
*	[in] handle:		句柄(通過調用apiSNCreateHandle得到)
*  	[in] density:		軌跡密度調節 ,必須大于或者等于 1,默認 5,舉個例子:假如軌跡有 100 個點,累計耗時 1000 毫秒,設置 density 如下:
*								-  density = 1  時,軌跡有 100/1=100 個點,整個軌跡累計耗時 1000/1=1000 毫秒 (默認 1  倍速度)
*								-  density = 2  時,軌跡有 100/2=50  個點,整個軌跡累計耗時 1000/2=500  豪秒 (等價 2  倍速度)
*								-  density = 3  時,軌跡有 100/3=33  個點,整個軌跡累計耗時 1000/3=333  豪秒 (等價 3  倍速度)
*								-  density = 5  時,軌跡有 100/5=20  個點,整個軌跡累計耗時 1000/5=200  豪秒 (等價 5  倍速度)
*								-  density = 20 時,軌跡有 100/20=5  個點,整個軌跡累計耗時 1000/20=50  豪秒 (等價 20 倍速度)
*								
*  	[in] type:			軌跡類型(0代表絕對普通軌跡,1代表滑塊軌跡(獲得的軌跡點數比普通軌跡點數更多),具體參考enum SN_TRACK_MOVE_TYPE)
*
* 返回值:返回參數SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
int WINAPI apiSNSetTrackParams(HANDLE handle, int density=5, int type=0);/*獲取鼠標移動軌跡
*
* 參數:
*	[in] handle:		句柄(通過調用apiSNCreateHandle得到)
* 	[in] startPoint:	開始坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)
* 	[in] endPoint:		結束坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)
*  	[in] type:			軌跡坐標類型(0代表絕對坐標,1代表相對坐標,具體參考enum SN_TRACK_POINT_TYPE)
* 	[out] points:		軌跡數組,如果數組中元素 point 出現(10000,10000),表示鼠標軌跡結束
*
* 返回值:返回參數SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
int WINAPI apiSNMouseMove(HANDLE handle, SN_POINT *startPoint, SN_POINT *endPoint, int type, SN_POINT_PARAMS* points);/*獲取版本號
*
* 參數:
*	[in] handle:		句柄(通過調用apiSNCreateHandle得到)
* 	[out] szVersion:	版本號
*
* 返回值:返回參數SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
int WINAPI apiSNGetVersion(HANDLE handle, char* szVersion);/*獲取卡密到期時間
*
* 參數:
*	[in]  handle:		句柄(通過調用apiSNCreateHandle得到)
* 	[out] pResult:		返回錯誤信息,參數pResult->code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
* 返回值:返回卡密到期時間,失敗返回NULL,錯誤信息請查看參數 pResult->message
*
*/
char* WINAPI apiSNGetKeyExpiresTime(HANDLE handle, SN_RESULT* pResult);/*獲取錯誤信息
*
* 參數:
*	[in] handle:		句柄(通過調用apiSNCreateHandle得到)
*
* 返回值:返回參數SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
int WINAPI apiSNGetError(HANDLE handle);/*釋放句柄(內存)
*
* 參數:
*	[in] handle:		句柄(通過調用apiSNCreateHandle得到)
*
* 返回值:返回參數SN_RESULT.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
*
*/
int WINAPI apiSNDestroyHandle(HANDLE handle);#endif // !_SN_SDK_H__

2.其他編程語言

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

  • C++
  • Python
  • 易語言

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

3.鼠標軌跡API調用流程圖

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

4.易語言鼠標軌跡dll接口

/****************************************************************************************/@SDK功能描述:鼠標軌跡
/****************************************************************************************.版本 2
.支持庫 spec.程序集 窗口程序集_啟動窗口.子程序 _啟動子程序, 整數型_臨時子程序 ()
返回 (0).子程序 _臨時子程序
.局部變量 handle, 整數型
.局部變量 pResult, SN_RESULT, 靜態, , 返回錯誤信息,參數pResult.code(錯誤碼)如果為 0 表示成功,否則表示錯誤號;
.局部變量 startPoint, SN_POINT, , , 開始坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)
.局部變量 endPoint, SN_POINT, , , 結束坐標,左上角(0,0),右下角(1920,1080 - 以實際屏幕為準)
.局部變量 type, 整數型, , , 軌跡類型,0 為絕對坐標 ,1為相對坐標
.局部變量 points, SN_POINT_PARAMS, , "3000", 軌跡數組,如果數組中元素 point 出現(10000,10000),表示鼠標軌跡結束
.局部變量 szTime, 文本型, , , 卡密結束時間;
.局部變量 index, 整數型
.局部變量 density, 整數型, , , 設置軌跡類型/速度/密度 - 默認是5倍速度/密度,可以不設置,具體根據自身要求設置' ---------------------------------------------------------------
' 1.創建句柄
' 其中卡密 SNKJ86RYDBY1YxafpLG3ep1R6NHFYLjz2UFFcE8Lx9Tq 僅用于測試,需要找開發人員重新購買,購買卡密連接:https://shop.4yuns.com/links/7C9F16B7
' ---------------------------------------------------------------
handle = apiSNCreateHandle (“SNKJ86RYDBY1YxafpLG3ep1R6NHFYLjz2UFFcE8Lx9Tq”, “SNTrack.onnx”, pResult)
調試輸出 (pResult.code, 到文本 (pResult.message))
調試輸出 (“句柄”, handle)
.如果真 (pResult.code < 0)調試輸出 (“-----------程序結束-----------”)返回 ().如果真結束' 獲取卡密到期時間
szTime = apiSNGetKeyExpiresTime (handle, pResult)
調試輸出 (到文本 (szTime))' 設置軌跡類型/速度/密度 - 默認是5倍速度/密度,可以不設置,具體根據自身要求設置, 設舉個例子:假如軌跡有 100 個點,累計耗時 1000 毫秒,設置 density 如下:
' density = 1  時,軌跡有 100/1=100 個點,整個軌跡累計耗時 1000/1=1000 毫秒 (默認 1  倍速度)
' density = 2  時,軌跡有 100/2=50  個點,整個軌跡累計耗時 1000/2=500  豪秒 (等價 2  倍速度)
' density = 3  時,軌跡有 100/3=33  個點,整個軌跡累計耗時 1000/3=333  豪秒 (等價 3  倍速度)
' density = 5  時,軌跡有 100/5=20  個點,整個軌跡累計耗時 1000/5=200  豪秒 (等價 5  倍速度)
' density = 20 時,軌跡有 100/20=5  個點,整個軌跡累計耗時 1000/20=50  豪秒 (等價 20 倍速度)
density = 5
apiSNSetTrackParams (handle, density, 0)' 開始坐標
startPoint.x = 100
startPoint.y = 100
' 結束坐標
endPoint.x = 800
endPoint.y = 800
' 軌跡類型,0 為絕對坐標 ,1為相對坐標
type = 0調試輸出 (“預備定義數組數量”, 取數組成員數 (points))
' ---------------------------------------------------------------
' 2.獲取鼠標軌跡
' ---------------------------------------------------------------
apiSNMouseMove (handle, startPoint, endPoint, type, points)調試輸出 (取變量地址 (startPoint.x), 取變量地址 (startPoint.y))
.計次循環首 (取數組成員數 (points), index).如果真 (points [index].point.x = 10000 且 points [index].point.y = 10000)刪除成員 (points, index + 1, 10000 - index)跳出循環 ().如果真結束' 調試輸出 (index, “坐標”, points [index].point.x, points [index].point.y, points [index].delayTime)
.計次循環尾 ()
調試輸出 (取數組成員數 (points)).計次循環首 (取數組成員數 (points), index)調試輸出 (“坐標”, points [index].point.x, points [index].point.y, points [index].delayTime)
.計次循環尾 ()' ---------------------------------------------------------------
' 3.釋放內存
' ---------------------------------------------------------------
apiSNDestroyHandle (handle)
調試輸出 (“-----------程序結束-----------”)

5.云盤源碼下載

  • 百度云盤
  • 夸克云盤
  • 123云盤

云盤目錄介紹:

demo - 包含各種編程語言的demo

dll - 分別是x86和x64平臺所需要的dll/lib/h文件

windows 鼠標軌跡測試工具 - exe測試鼠標軌跡效果( demo 中的 c++ 工程編譯后的exe可執行文件)

四.效果演示

1.開始坐標為(100,100),結束坐標為(800,800),通過調用接口獲得 4 條鼠標軌跡

2.開始坐標為(1000,100),結束坐標為(800,800),通過調用接口獲得 2 條鼠標軌跡

?

五.常見問題

1.是否支持多線程

支持

2.如何使用多線程

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

3.如何判斷軌跡結束

可以通過循環判斷得到的軌跡坐標,如果當前坐標的X值和Y值都是1000的情況下,默認軌跡結束

(之前的判斷是(-1,-1)作為軌跡結束的標記,現在修改為(10000,10000)作為軌跡結束標記,目的是為了兼容相對坐標)

4.鼠標軌跡設置相對坐標

在函數 apiSNMouseMove 中 type 參數,0 為 絕對坐標 ; 1 為相對坐標

5.如何調節點的密集程度

在(2024.12.22)SDK2.0版本中新增接口 apiSNSetTrackParams 中的 density 參數可以用來調節軌跡密度,舉個例子:

  • density = 1 時,默認軌跡有 100 個點,整個軌跡累計耗時 1000 毫秒 (默認 1 倍速度)
  • density = 2 時,軌跡有 100/2=50 個點,整個軌跡累計耗時 500?毫秒 (等價 2 倍速度)
  • density = 3 時,軌跡有 100/3=33 個點,整個軌跡累計耗時 333 毫秒 (等價 3 倍速度)
  • density = 5 時,軌跡有 100/5=20 個點,整個軌跡累計耗時 200 毫秒 (等價 5 倍速度)

不同的游戲需要的軌跡密度不一樣,類似 fps 游戲,鼠標滑動軌跡比較快,density 可以設置為 5 或者更高 ; 類似魔獸世界或者夢幻,density 可以調節為 2 或者 3或者5

6.滑塊驗證軌跡

在函數 apiSNSetTrackParams 中 type 參數,0 為普通鼠標軌跡 ; 1 為滑塊軌跡

普通鼠標貴和滑塊軌跡區別:滑塊軌跡比普通鼠標軌跡坐標點更多(相同的開始/結束坐標),點與點之間更加密集,軌跡的開始和結束暫停/加速更加明顯

六.更新日志

  • 2024.02.06 c++ 模擬人工鼠標軌跡demo
  • 2024.06.06 python 模擬人工鼠標軌跡demo
  • 2024.06.25 新增錯誤日志信息
  • 2024.07.15 優化水平/垂直軌跡
  • 2024.08.20 優化部分軌跡可能出現負數的問題
  • 2024.09.19 優化部分軌跡延遲時間為0的情況(可能會造成鼠標瞬移)
  • 2024.09.21 修復部分水平/垂直軌跡出現負數的情況
  • 2024.09.28 新增易語言demo
  • 2024.11.01 修改接口,兼容易語言代碼
  • 2024.11.17 支持移動軌跡為相對坐標(默認是軌跡是絕對坐標)
  • 2024.12.15 新增文字識別OCR,支持編程語言如下:
    • Python
    • 易語言
    • C語言
    • C++
  • 2024.12.22 優化鼠標軌跡
    • 新增滑塊軌跡
    • 優化鼠標軌跡 - 支持密度調節
  • 2024.12.29
    • 修復鼠標軌跡可能會崩潰的問題
    • 修復OCR文字識別失敗問題(帶有中文路徑的圖片)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72425.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

運營商三要素API:構建安全信任的橋梁

引言 在數字經濟時代&#xff0c;身份驗證已成為各類業務場景的基礎需求。運營商三要素API作為一種高效的身份核驗工具&#xff0c;通過對接運營商數據&#xff0c;實現對用戶姓名、身份證號碼、手機號碼三項關鍵信息的實時校驗&#xff0c;為各行業提供可靠的身份認證解決方案…

Spring Boot 與 MyBatis 版本兼容性

初接觸Spring Boot&#xff0c;本次使用Spring Boot版本為3.4.3&#xff0c;mybatis的起步依賴版本為3.0.0&#xff0c;在啟動時報錯&#xff0c;報錯代碼如下 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name userMapper…

GCN從理論到實踐——基于PyTorch的圖卷積網絡層實現

Hi&#xff0c;大家好&#xff0c;我是半畝花海。圖卷積網絡&#xff08;Graph Convolutional Network, GCN&#xff09;是一種處理圖結構數據的深度學習模型。它通過聚合鄰居節點的信息來更新每個節點的特征表示&#xff0c;廣泛應用于社交網絡分析、推薦系統和生物信息學等領…

MyBatis-Plus 邏輯刪除實現

在很多企業級應用中&#xff0c;數據刪除操作通常采用 邏輯刪除 的方式&#xff0c;而不是物理刪除。邏輯刪除指的是通過更新字段&#xff08;例如 is_deleted 或 status&#xff09;來標記數據為刪除狀態&#xff0c;而不是真的從數據庫中刪除記錄。這樣做的好處是保留數據的歷…

STM32_IIC外設工作流程

STM32 IC 外設工作流程&#xff08;基于寄存器&#xff09; 在 STM32 中&#xff0c;IC 通信主要通過一系列寄存器控制。理解這些寄存器的作用&#xff0c;能夠幫助我們掌握 IC 硬件的運行機制&#xff0c;實現高效的數據傳輸。本文以 STM32F1&#xff08;如 STM32F103&#x…

集合遍歷的多種方式

目錄 1.增強for 2.迭代器&#xff08;在遍歷的過程中需要刪除元素&#xff0c;請使用迭代器&#xff09; 3.雙列集合 4.Lambda表達式(forEach方法) 1.單列集合&#xff1a; 2.雙列集合&#xff1a; 4.Stream 流 5.普通for循環 6.列表迭代器 7.總結 1.增強for 注&…

DeepSeek在MATLAB上的部署與應用

在科技飛速發展的當下&#xff0c;人工智能與編程語言的融合不斷拓展著創新邊界。DeepSeek作為一款備受矚目的大語言模型&#xff0c;其在自然語言處理領域展現出強大的能力。而MATLAB&#xff0c;作為科學計算和工程領域廣泛應用的專業軟件&#xff0c;擁有豐富的工具包和高效…

value_counts()和unique()

我今天發現一個很有意思的問題哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…

每日OJ_牛客_游游的字母串_枚舉_C++_Java

目錄 牛客_游游的字母串_枚舉 題目解析 C代碼 Java代碼 牛客_游游的字母串_枚舉 游游的字母串 描述&#xff1a; 對于一個小寫字母而言&#xff0c;游游可以通過一次操作把這個字母變成相鄰的字母。a和b相鄰&#xff0c;b和c相鄰&#xff0c;以此類推。特殊的&#xff0…

【AI深度學習基礎】Pandas完全指南入門篇:數據處理的瑞士軍刀 (含完整代碼)

&#x1f4da; Pandas 系列文章導航 入門篇 &#x1f331;進階篇 &#x1f680;終極篇 &#x1f30c; &#x1f4cc; 一、引言 在大數據與 AI 驅動的時代&#xff0c;數據預處理和分析是深度學習與機器學習的基石。Pandas 作為 Python 生態中最強大的數據處理庫&#xff0c;以…

數字萬用表的使用教程

福祿克經濟型數字萬用表前面板按鍵功能介紹示意圖 1. 萬用表簡單介紹 萬用表是一種帶有整流器的、可以測量交、直流電流、電壓及電阻等多種電學參量的磁電式儀表。分為數字萬用表&#xff0c;鉗形萬用表&#xff0c; &#xff08;1&#xff09;表筆分為紅、黑二只。使用時黑色…

C# IComparable<T> 使用詳解

總目錄 前言 在C#編程中&#xff0c;IComparable<T> 是一個非常重要的接口&#xff0c;它允許我們為自定義類型提供默認的比較邏輯。這對于實現排序、搜索和其他需要基于特定規則進行比較的操作特別有用。本文將詳細介紹 IComparable<T> 的使用方法、應用場景及其…

DeepSeek使用手冊分享-附PDF下載連接

本次主要分享DeepSeek從技術原理到使用技巧內容&#xff0c;這里展示一些基本內容&#xff0c;后面附上詳細PDF下載鏈接。 DeepSeek基本介紹 DeepSeek公司和模型的基本簡介&#xff0c;以及DeepSeek高性能低成本獲得業界的高度認可的原因。 DeepSeek技術路線解析 DeepSeek V3…

Hugging Face 推出 FastRTC:實時語音視頻應用開發變得得心應手

估值超過 40 億美元的 AI 初創公司 Hugging Face 推出了 FastRTC&#xff0c;這是一個開源 Python 庫&#xff0c;旨在消除開發者在構建實時音頻和視頻 AI 應用時的主要障礙。 "在 Python 中正確構建實時 WebRTC 和 Websocket 應用一直都很困難&#xff0c;"FastRTC…

for循環相關(循環的過程中對數據進行刪除會踩坑)

# 錯誤方式&#xff0c; 有坑&#xff0c;結果不是你想要的。 user_list ["劉的話", "范德彪", "劉華強", 劉尼古拉斯趙四, "宋小寶", "劉能"] for item in user_list: if item.startswith("劉"): …

Qt顯示一個hello world

一、顯示思路 思路一&#xff1a;通過圖形化方式&#xff0c;界面上創建出一個控件顯示。 思路二&#xff1a;通過編寫C代碼在界面上創建控件顯示。 二、思路一實現 點開 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;顯示 hello world 即可。 qmake 基于 .…

復合機器人為 CNC 毛坯件上下料注入 “智能強心針”

在競爭日益激烈的 CNC 加工行業&#xff0c;如何提升生產效率、保證產品質量、實現智能化生產成為眾多企業亟待解決的問題。富唯智能憑借其先進的復合機器人技術&#xff0c;成功為多家 CNC 加工企業提供了毛坯件上下料的優質解決方案&#xff0c;有效提升了生產效能&#xff0…

電商業務數據測試用例參考

1. 數據采集層測試 用例編號測試目標測試場景預期結果TC-001驗證用戶行為日志采集完整性模擬用戶瀏覽、點擊、加購行為Kafka Topic中日志記錄數與模擬量一致TC-002驗證無效數據過濾規則發送爬蟲請求&#xff08;高頻IP&#xff09;清洗后數據中無該IP的日志記錄 2. 數據處理層…

Spring Cloud Gateway 網關的使用

在之前的學習中&#xff0c;所有的微服務接口都是對外開放的&#xff0c;這就意味著用戶可以直接訪問&#xff0c;為了保證對外服務的安全性&#xff0c;服務端實現的微服務接口都帶有一定的權限校驗機制&#xff0c;但是由于使用了微服務&#xff0c;就需要每一個服務都進行一…

webstorm的Live Edit插件配合chrome擴展程序JetBrains IDE Support實現實時預覽html效果

前言 我們平時在前端網頁修改好代碼要點擊刷新再去看修改的效果&#xff0c;這樣比較麻煩&#xff0c;那么很多軟件都提供了實時預覽的功能&#xff0c;我們一邊編輯代碼一邊可以看到效果。下面說的是webstorm。 1 Live Edit 首先我們需要在webstorm的settings里安裝插件Live …