C# 滑鼠游標到達螢幕邊緣後從另一邊緣出現
阿新 • • 發佈:2018-11-11
描述:
將滑鼠向左移動,當游標移動到螢幕左邊邊框後,滑鼠繼續向左移動,但游標位置不再變化;
現在希望滑鼠繼續向左移動時,游標能夠從螢幕右側出現,並繼續向左移動;
實現程式碼如下:
需要宣告的變數:
bool isPrimary = true; //是否是主屏
int primaryScreenWidth = 0; //主屏
int primaryScreenHeight = 0;
int secondScreenWidth = 0; //副屏
int secondScreenHeight = 0;
需要的的函式如下:
這裡的10和11表示:在距離螢幕邊緣10畫素的時候,就把游標移動到另一端11畫素的地方;//滑鼠到螢幕最左或最右端 [DllImport("user32.dll")] private static extern int SetCursorPos(int x, int y); //設定螢幕大小 private void SetScreenSize() { primaryScreenWidth = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; primaryScreenHeight = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; //判斷是否不止一個螢幕 if (System.Windows.Forms.Screen.AllScreens.Length > 1) { secondScreenWidth = System.Windows.Forms.Screen.AllScreens[1].WorkingArea.Width; secondScreenHeight = System.Windows.Forms.Screen.AllScreens[1].WorkingArea.Height; } } //判斷游標是否在主螢幕上 private void SetScreenState() { isPrimary = true; //獲取當前滑鼠游標位置 int posX = System.Windows.Forms.Cursor.Position.X; int posY = System.Windows.Forms.Cursor.Position.Y; // 判斷當前是哪個螢幕 if (posX > primaryScreenWidth) { isPrimary = false; } } //獲取游標位置 private void GetCursorPos() { int posX = System.Windows.Forms.Cursor.Position.X; int posY = System.Windows.Forms.Cursor.Position.Y; if (isPrimary) { if (posY <= 10) { ResetCursorPos(true); } if (posY >= primaryScreenHeight - 10) { ResetCursorPos(false, true); } if (posX <= 10) { ResetCursorPos(false, false, true); } if (posX >= primaryScreenWidth - 10) { ResetCursorPos(false, false, false, true); } } else { if (posY <= 10) { ResetCursorPos(true); } if (posY >= secondScreenHeight - 10) { ResetCursorPos(false, true); } if (posX <= primaryScreenWidth + 10) { ResetCursorPos(false, false, true, false); } if (posX >= primaryScreenWidth + secondScreenWidth - 10) { ResetCursorPos(false, false, false, true); } } } //重新設定游標的位置 private void ResetCursorPos(bool isTop=false, bool isBottom=false, bool isLeft=false, bool isRight=false) { int posX = System.Windows.Forms.Cursor.Position.X; int posY = System.Windows.Forms.Cursor.Position.Y; if (isPrimary) { if (isTop) { SetCursorPos(posX, primaryScreenHeight-11); //上→下 } if (isBottom) { SetCursorPos(posX, 11); //下→上 } if (isLeft) { SetCursorPos(primaryScreenWidth-11, posY); //左→右 } if (isRight) { SetCursorPos(11, posY); //右→左 } } else { if (isTop) { SetCursorPos(posX, secondScreenHeight-11); //上→下 } if (isBottom) { SetCursorPos(posX, 11); //下→上 } if (isLeft) { SetCursorPos(primaryScreenWidth+secondScreenWidth-11, posY); //左→右 } if (isRight) { SetCursorPos(primaryScreenWidth+11, posY); //右→左 } } }
Tip:
private static extern int SetCursorPos(int x, int y);
函式功能:該函式把游標移到螢幕的指定位置。如果新位置不在由 ClipCursor函式設定的螢幕矩形區域之內,則系統自動調整座標,使得游標在矩形之內。
函式原型:BOOL SetCursorPOS(int X,int Y);
引數:
X:指定游標的新的X座標,以螢幕座標表示。
Y:指定游標的新的Y座標,以螢幕座標表示。
返回值:如果成功,返回非零值;如果失敗,返回值是零,若想獲得更多錯誤資訊,請呼叫GetLastError函式。
備註:該游標是共享資源,僅當該游標在一個視窗的客戶區域內時它才能移動該游標。
C#中使用該函式首先匯入名稱空間:
using System.Runtime.InteropServices;
然後寫API引用部分的程式碼,放入 class 內部:
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
private static extern int SetCursorPos(int x, int y);
這個函式有兩個個引數,第一個引數是指定游標的新的X座標;第二個引數是指定游標的新的Y座標。例如:
SetCursorPos(100, 100);