如何在 Python 中更改光标图像
How to change cursor image in Python
当我的程序是 运行.
时,我想更改我的光标图像(屏幕上的任何地方)
我尝试使用 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
请参阅 documentation 了解 OCR_NORMAL
和其他游标常量。
您可以尝试保存旧光标并恢复它,同样,如果您的程序异常退出,此方法将失败。
import win32con
import win32api
import win32gui
import ctypes
import time
import atexit
#save system cursor, before changing it
cursor = win32gui.LoadImage(0, 32512, win32con.IMAGE_CURSOR,
0, 0, win32con.LR_SHARED)
save_system_cursor = ctypes.windll.user32.CopyImage(cursor, win32con.IMAGE_CURSOR,
0, 0, win32con.LR_COPYFROMRESOURCE)
def restore_cursor():
#restore the old cursor
print("restore_cursor");
ctypes.windll.user32.SetSystemCursor(save_system_cursor, 32512)
ctypes.windll.user32.DestroyCursor(save_system_cursor);
#Make sure cursor is restored at the end
atexit.register(restore_cursor)
#change system cursor
cursor = win32gui.LoadImage(0, "file.cur", win32con.IMAGE_CURSOR,
0, 0, win32con.LR_LOADFROMFILE);
ctypes.windll.user32.SetSystemCursor(cursor, 32512)
ctypes.windll.user32.DestroyCursor(cursor);
time.sleep(3)
exit
当我的程序是 运行.
时,我想更改我的光标图像(屏幕上的任何地方)我尝试使用 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
请参阅 documentation 了解 OCR_NORMAL
和其他游标常量。
您可以尝试保存旧光标并恢复它,同样,如果您的程序异常退出,此方法将失败。
import win32con
import win32api
import win32gui
import ctypes
import time
import atexit
#save system cursor, before changing it
cursor = win32gui.LoadImage(0, 32512, win32con.IMAGE_CURSOR,
0, 0, win32con.LR_SHARED)
save_system_cursor = ctypes.windll.user32.CopyImage(cursor, win32con.IMAGE_CURSOR,
0, 0, win32con.LR_COPYFROMRESOURCE)
def restore_cursor():
#restore the old cursor
print("restore_cursor");
ctypes.windll.user32.SetSystemCursor(save_system_cursor, 32512)
ctypes.windll.user32.DestroyCursor(save_system_cursor);
#Make sure cursor is restored at the end
atexit.register(restore_cursor)
#change system cursor
cursor = win32gui.LoadImage(0, "file.cur", win32con.IMAGE_CURSOR,
0, 0, win32con.LR_LOADFROMFILE);
ctypes.windll.user32.SetSystemCursor(cursor, 32512)
ctypes.windll.user32.DestroyCursor(cursor);
time.sleep(3)
exit