gpt4 book ai didi

C# 获取当前光标图标

转载 作者:行者123 更新时间:2023-11-30 12:55:50 24 4
gpt4 key购买 nike

我一直在尝试这样做,但无法做到,这就是我必须做的:

[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);
}
}
}

问题是复制的图标有时与默认的鼠标图标不同,例如,如果它在等待位置捕捉到它,那么它可能会给我鼠标等待图标。

我想获取系统运行时的默认光标图标(空闲时的图标),如何获取?

提前致谢。

最佳答案

我已经解决了我的问题,经过一些研究,我找到了一些可能会一直有效的有趣的东西。

我没有尝试保存光标的图标并加载它,而是想到了一个不同的想法。

我注意到,每当我更改光标图标(比如说使用代码,更改为某个随机图标)时,每当我转到 Windows 光标设置时,图标都不会在那里更改,但是没有应用按钮来应用我以前的设置,因为 Windows 认为我正在使用这些设置。

所以我将设置更改为一些随机的其他设置而不应用并返回到我之前拥有并应用的设置,这样做将我的光标重置为其原始光标,在任何更改之前。

因此 Windows 只是在“刷新”鼠标,所以我就这样做了,也许如果我可以强制刷新一切都会很完美,所以我找到了一种方法来做到这一点,使用这个函数:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SystemParametersInfo(UInt32 uiAction,UInt32 uiParam, String pvParam, UInt32 fWinIni);

当我观看 msdn 时,我在它的参数中发现了一些有趣的东西,参数“SPI_SETCURSORS (0x57)”,我引用:

“重新加载系统游标。将 uiParam 参数设置为零,将 pvParam 参数设置为 NULL。”

所以我已经尝试过,并且成功了,过程示例:

[DllImport("User32.dll", CharSet = CharSet.Ansi, BestFitMapping = false, ThrowOnUnmappableChar = true)]
private static extern IntPtr LoadCursorFromFile(String str);

uint SPI_SETCURSORS = 0x57;
var NewArrow = LoadCursorFromFile("C:\\Users\\mtnju\\Downloads\\invisible.cur"); // loads some new cursor icon using the LoadCursorFromFile function
SetSystemCursor(NewArrow, OCR_NORMAL); // sets the new cursor icon using the SetSystemCursor function
SystemParametersInfo(SPI_SETCURSORS, 0, null, 0);// reloads all of the system cursors

我认为做这样的事情需要我 5 分钟......我希望它能帮助你们,我非常感谢试图帮助我的评论。

关于C# 获取当前光标图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45246980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com