Как отловить вид курсора вне формы - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, собственно вопрос заключается как получить вид курсора вне формы. Стремлюсь к коду который будет получать определенный вид курсора вне формы и тогда выполнять функцию.

Решение задачи: «Как отловить вид курсора вне формы»

textual
Листинг программы
using MouseKeyboardActivityMonitor;
using MouseKeyboardActivityMonitor.WinApi;
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        struct POINT
        {
            public Int32 x;
            public Int32 y;
        }
 
        [StructLayout(LayoutKind.Sequential)]
        struct CURSORINFO
        {
            public Int32 cbSize;        // Specifies the size, in bytes, of the structure. 
                                        // The caller must set this to Marshal.SizeOf(typeof(CURSORINFO)).
            public Int32 flags;         // Specifies the cursor state. This parameter can be one of the following values:
                                        //    0             The cursor is hidden.
                                        //    CURSOR_SHOWING    The cursor is showing.
            public IntPtr hCursor;          // Handle to the cursor. 
            public POINT ptScreenPos;       // A POINT structure that receives the screen coordinates of the cursor. 
        }
 
        /// <summary>Must initialize cbSize</summary>
        [DllImport("user32.dll")]
        static extern bool GetCursorInfo(ref CURSORINFO pci);
 
        Hooker hooker;
        MouseHookListener mhListener;
 
        public Form1()
        {
            InitializeComponent();
 
            this.TopMost = true;
            this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
 
            this.FormClosing += Form1_FormClosing;
 
            hooker = new GlobalHooker();
 
            mhListener = new MouseHookListener(hooker);
            
            mhListener.MouseMove += Mhl_MouseMove;
 
            mhListener.Start();
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            mhListener.Dispose();
        }
 
        private void Mhl_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
 
                CURSORINFO ci = new CURSORINFO();
                ci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
                var res = GetCursorInfo(ref ci);
 
                var cursor = new Cursor(ci.hCursor);
 
                label1.Text = $"{res};{cursor.ToString()};{ci.hCursor};[{ci.ptScreenPos.x};{ci.ptScreenPos.y}]";
            }
            catch(Exception ex)
            {
                label1.Text = ex.Message;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.533 из 5
Похожие ответы