【发布时间】:2017-07-21 21:30:25
【问题描述】:
我一直在尝试这样做,但无法做到,这就是我要做的:
[DllImport("user32.dll")]
static extern bool SetSystemCursor(IntPtr hcur, uint id);
[DllImport("user32.dll", EntryPoint = "GetCursorInfo")]
public static extern bool GetCursorInfo(out CURSORINFO pci);
[DllImport("user32.dll", EntryPoint = "CopyIcon")]
public static extern IntPtr CopyIcon(IntPtr hIcon);
[StructLayout(LayoutKind.Sequential)]
public struct CURSORINFO
{
public Int32 cbSize; // Specifies the size, in bytes, of the structure.
public Int32 flags; // Specifies the cursor state. This parameter can be one of the following values:
public IntPtr hCursor; // Handle to the cursor.
public POINT ptScreenPos; // A POINT structure that receives the screen coordinates of the cursor.
}
public void etc()
{
IntPtr hwndic = new IntPtr();
CURSORINFO curin = new CURSORINFO();
curin.cbSize = Marshal.SizeOf(curin);
if (GetCursorInfo(out curin))
{
if (curin.flags == CURSOR_SHOWING)
{
hwndic = CopyIcon(curin.hCursor);
SetSystemCursor(hwndic, OCR_NORMAL);
}
}
}
问题是复制的图标有时与默认的鼠标图标不同,例如,如果它在等待位置捕获它,那么它可能会给我鼠标等待图标。
我想获取正在运行的系统的默认光标图标(空闲时的图标),我该怎么做?
提前致谢。
【问题讨论】:
-
看LoadCursor和IDC_ARROW常量
-
@Pascalz 这对我没有帮助,它没有检测到系统的光标是什么。
-
复制前可以设置Cursor.Current = Cursors.Default吗?
-
@obl 我以前试过这样做,它说成员'cursor.current'不能用实例引用访问,而是用类型名称来限定它,据我所知,光标命令只能在表单设计器文件中使用,而不是在它之外。因此,即使我设法在应用程序启动时获取光标图标,用户也可能会在之后更改其光标图标,并且我将无法返回上次用户更改的光标图标。
-
@obl 也是您所说的即使可以正常工作也无法正常工作,因为 setsystemcursor 函数粘贴的光标超出了应有的阴影。无论如何我已经解决了这个问题,我会回答这个线程。