C# 为Windows全局获取鼠标悬停项目/按钮/文件夹的名称/ID

C# 为Windows全局获取鼠标悬停项目/按钮/文件夹的名称/ID,c#,mousehover,C#,Mousehover,我试图做的是通过在项目上悬停来触发鼠标点击。 如果鼠标停留在项目/按钮/文件夹上足够长的时间而不离开,它将触发鼠标单击。 我已经做了鼠标点击触发部分。 现在的问题是检测鼠标光标是否仍在同一项目上,或者是否已离开该项目。 我曾尝试使用user32.dll提取信息,但并不适用于所有项目,例如文件夹中的项目和应用程序中的按钮 [DllImport("user32.dll")] static extern int GetDlgCtrlID(IntPtr hwndCtl); [D

我试图做的是通过在项目上悬停来触发鼠标点击。 如果鼠标停留在项目/按钮/文件夹上足够长的时间而不离开,它将触发鼠标单击。 我已经做了鼠标点击触发部分。 现在的问题是检测鼠标光标是否仍在同一项目上,或者是否已离开该项目。 我曾尝试使用user32.dll提取信息,但并不适用于所有项目,例如文件夹中的项目和应用程序中的按钮

    [DllImport("user32.dll")]
    static extern int GetDlgCtrlID(IntPtr hwndCtl);

    [DllImport("user32.dll")]
    static extern IntPtr WindowFromPoint(int xPoint, int yPoint);

    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
    static extern int GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);

    public static int GetHoveredControlID(int xPoint, int yPoint)
    {
        return GetDlgCtrlID(WindowFromPoint(xPoint, yPoint));
    }

WindowFromPoint是否返回有效值?你不能直接使用它吗?它只会为不同的窗口返回不同的值。所以我不能用它来做图标、文件夹和按钮。