如何在Python中更改光标图像

如何在Python中更改光标图像,python,winapi,win32gui,win32con,Python,Winapi,Win32gui,Win32con,我想在程序运行时更改光标图像(屏幕上的任何地方) 我尝试用win32gui加载图像,然后使用win32api更改光标图像,但出现了一些问题,我的光标没有显示出来 我的光标图像是map.cur import win32api import time import win32gui import win32con x = win32gui.LoadImage(0,'map.cur',win32con.IMAGE_CURSOR,0,0,win32con.LR_LOADFROMFILE) win32a

我想在程序运行时更改光标图像(屏幕上的任何地方)

我尝试用win32gui加载图像,然后使用win32api更改光标图像,但出现了一些问题,我的光标没有显示出来 我的光标图像是map.cur

import win32api
import time
import win32gui
import win32con

x = win32gui.LoadImage(0,'map.cur',win32con.IMAGE_CURSOR,0,0,win32con.LR_LOADFROMFILE)
win32api.SetCursor(x)

time.sleep(5)

不建议更改系统光标。出于好奇,可以使用
SetSystemCursor
,例如

ctypes.windll.user32.SetSystemCursor(hcursor, 32512) #OCR_NORMAL
有关
OCR\u NORMAL
和其他光标常量,请参阅

对于python,我不建议这样做,因为很难恢复光标,因此用户将被一个新的光标卡住,除非他通过系统设置更改光标。您可以尝试保存旧游标并将其还原,但如果程序异常退出,此方法将失败

hold = win32gui.LoadImage(0, 32512, win32con.IMAGE_CURSOR, 
                          0, 0, win32con.LR_SHARED )
hsave = ctypes.windll.user32.CopyImage(hold, win32con.IMAGE_CURSOR, 
                                       0, 0, win32con.LR_COPYFROMRESOURCE)
hnew = win32gui.LoadImage(0, 'file.cur', 
                             win32con.IMAGE_CURSOR, 0, 0, win32con.LR_LOADFROMFILE);
ctypes.windll.user32.SetSystemCursor(hcursor, 32512)
time.sleep(5)

#restore the old cursor
ctypes.windll.user32.SetSystemCursor(hsave, 32512)

你检查过函数的返回值了吗?如果
x
是有效的
HCURSOR
并且如果SetCursor()执行成功,您必须更仔细地阅读。特别关注点:“光标是共享资源。只有当光标位于其客户端区域或窗口捕获鼠标输入时,窗口才应设置光标形状。[…]如果应用程序必须在窗口中设置光标,请确保指定窗口类的类光标设置为NULL。如果类光标不为NULL,则每次移动鼠标时,系统都会恢复类光标。”@RitaHan MSFT我认为它是有效的“HCURSOR”,并且它执行成功,因为当我运行程序时,光标会改变0.1秒,但随后又会变回windows光标。@I不可检测的抱歉,我对编程非常陌生,不知道该怎么办。如果我没有错,我只能在程序窗口中更改光标?当我试图走出我的窗口时,它总是会变回OEM?@Lxix69看看这个