使用Python临时改变光标

0 投票
2 回答
1678 浏览
提问于 2025-04-17 05:08

我正在写一个脚本,这个脚本可以拦截触摸板的输出,然后经过一些处理后再发送到Windows系统里。所以这个过程没有图形界面(GUI)。我想在某些特定的光标行为发生时,临时改变光标的样子。我在网上搜索了很多,但发现很少有帖子提到使用win32api.SetCursor(),而且这个方法根本不管用。大多数帖子都在讲如何用Tkinter或wxPython来改变光标。有没有其他方法可以在整个系统中改变光标呢?

2 个回答

0
import win32con
import win32api
import win32gui
import ctypes
import time
import atexit


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)



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

我希望这能帮到你

1

使用下面的代码后,光标在整个系统中都被改变了。不过在退出程序后,我必须把光标恢复成箭头形状。如果有其他更好的方法,我会很感激你的回复。

from ctypes import *
import win32con

SetSystemCursor = windll.user32.SetSystemCursor #reference to function
SetSystemCursor.restype = c_int #return
SetSystemCursor.argtype = [c_int, c_int] #arguments

LoadCursorFromFile = windll.user32.LoadCursorFromFileA #reference to function
LoadCursorFromFile.restype = c_int #return
LoadCursorFromFile.argtype = c_char_p #arguments

CursorPath = "../cursor/MyCross.cur"

NewCursor = LoadCursorFromFile(CursorPath)

if NewCursor is None:
    print "Error loading the cursor"
elif SetSystemCursor(NewCursor, win32con.IDC_ARROW) == 0:
    print "Error in setting the cursor"

撰写回答