C#之操作窗口模拟键鼠事件文件监控等知识使用
生活随笔
收集整理的這篇文章主要介紹了
C#之操作窗口模拟键鼠事件文件监控等知识使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#之操作窗口模擬鍵鼠事件文件監控等知識使用
實現的效果圖片,這里我在輸入框輸入一個號碼,在C盤下創建一個文件txt文件,
被filewatch監控到,里面往指定窗口送sn被輸入一些鍵盤鼠標的動作等操作;通過窗口句柄的操作發現窗口;
主要代碼貼出來,
MouseHookHelper.cs類的代碼
public class MouseHookHelper{#region 根據句柄尋找窗體并發送消息[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]//參數1:指的是類名。參數2,指的是窗口的標題名。兩者至少要知道1個public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, int wParam, string lParam);[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);#endregion#region 獲取窗體位置[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);[StructLayout(LayoutKind.Sequential)]public struct RECT{public int Left; //最左坐標public int Top; //最上坐標public int Right; //最右坐標public int Bottom; //最下坐標}#endregion#region 設置窗體顯示形式public enum nCmdShow : uint{SW_NONE,//初始值SW_FORCEMINIMIZE,//:在WindowNT5.0中最小化窗口,即使擁有窗口的線程被掛起也會最小化。在從其他線程最小化窗口時才使用這個參數。SW_MIOE,//:隱藏窗口并激活其他窗口。SW_MAXIMIZE,//:最大化指定的窗口。SW_MINIMIZE,//:最小化指定的窗口并且激活在Z序中的下一個頂層窗口。SW_RESTORE,//:激活并顯示窗口。如果窗口最小化或最大化,則系統將窗口恢復到原來的尺寸和位置。在恢復最小化窗口時,應用程序應該指定這個標志。SW_SHOW,//:在窗口原來的位置以原來的尺寸激活和顯示窗口。SW_SHOWDEFAULT,//:依據在STARTUPINFO結構中指定的SW_FLAG標志設定顯示狀態,STARTUPINFO 結構是由啟動應用程序的程序傳遞給CreateProcess函數的。SW_SHOWMAXIMIZED,//:激活窗口并將其最大化。SW_SHOWMINIMIZED,//:激活窗口并將其最小化。SW_SHOWMINNOACTIVATE,//:窗口最小化,激活窗口仍然維持激活狀態。SW_SHOWNA,//:以窗口原來的狀態顯示窗口。激活窗口仍然維持激活狀態。SW_SHOWNOACTIVATE,//:以窗口最近一次的大小和狀態顯示窗口。激活窗口仍然維持激活狀態。SW_SHOWNOMAL,//:激活并顯示一個窗口。如果窗口被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程序在第一次顯示窗口的時候應該指定此標志。}public const int SW_HIDE = 0;public const int SW_SHOWNORMAL = 1;public const int SW_SHOWMINIMIZED = 2;public const int SW_SHOWMAXIMIZED = 3;public const int SW_MAXIMIZE = 3;public const int SW_SHOWNOACTIVATE = 4;public const int SW_SHOW = 5;public const int SW_MINIMIZE = 6;public const int SW_SHOWMINNOACTIVE = 7;public const int SW_SHOWNA = 8;public const int SW_RESTORE = 9;[DllImport("User32.dll")]public static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("User32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);#endregion#region 控制鼠標移動//移動鼠標 public const int MOUSEEVENTF_MOVE = 0x0001;//模擬鼠標左鍵按下 public const int MOUSEEVENTF_LEFTDOWN = 0x0002;//模擬鼠標左鍵抬起 public const int MOUSEEVENTF_LEFTUP = 0x0004;//模擬鼠標右鍵按下 public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;//模擬鼠標右鍵抬起 public const int MOUSEEVENTF_RIGHTUP = 0x0010;//模擬鼠標中鍵按下 public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;//模擬鼠標中鍵抬起 public const int MOUSEEVENTF_MIDDLEUP = 0x0040;//標示是否采用絕對坐標 public const int MOUSEEVENTF_ABSOLUTE = 0x8000;[Flags]public enum MouseEventFlag : uint{Move = 0x0001,LeftDown = 0x0002,LeftUp = 0x0004,RightDown = 0x0008,RightUp = 0x0010,MiddleDown = 0x0020,MiddleUp = 0x0040,XDown = 0x0080,XUp = 0x0100,Wheel = 0x0800,VirtualDesk = 0x4000,Absolute = 0x8000}//[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)][DllImport("user32.dll")]public static extern bool SetCursorPos(int X, int Y);[DllImport("user32.dll")]public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);#endregion#region 獲取坐標鉤子[StructLayout(LayoutKind.Sequential)]public class POINT{public int X;public int Y;}[StructLayout(LayoutKind.Sequential)]public class MouseHookStruct{public POINT pt;public int hwnd;public int wHitTestCode;public int dwExtraInfo;}public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);//安裝鉤子[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);//卸載鉤子[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]public static extern bool UnhookWindowsHookEx(int idHook);//調用下一個鉤子[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);#endregion}總結
以上是生活随笔為你收集整理的C#之操作窗口模拟键鼠事件文件监控等知识使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++实现黑客帝国流星雨效果
- 下一篇: Java之文件流操作的文件读写