永发信息网

python用ctypes操作剪切板遇到问题!!

答案:1  悬赏:30  手机版
解决时间 2021-01-30 18:41
  • 提问者网友:记得曾经
  • 2021-01-30 01:30
python代码如下:
import ctypes
def get():
'''从剪切板中获得字符串'''
h=ctypes.WinDLL('user32.dll')
h.OpenClipboard(0)
aa=h.GetClipboardData(13)
ss=ctypes.c_wchar_p(aa)
h.CloseClipboard()
return ss.value

def set(mystr):
'''把字符串放到剪切板中,成功返回1,失败返回0'''
u=ctypes.WinDLL('user32.dll')
k=ctypes.WinDLL('kernel32.dll')
s=mystr.encode('utf-16')
s=s[2:]+b'\0\0'
ss=ctypes.c_char_p(s)
u.OpenClipboard(0)
u.EmptyClipboard()
k.GlobalAlloc.argtypes=[ctypes.c_uint32,ctypes.c_uint32]
try:
cb=k.GlobalAlloc(0,len(s))
cb=ctypes.c_void_p(cb)
print(type(cb))
ctypes.memmove(cb,ss,len(s))
rr=u.SetClipboardData(13,cb) # 13->unicode
finally:
u.CloseClipboard()
if rr==0:
return 0
else:
return 1

#-----
set("abcdefg")

同样是这段代码,在python3.4.3(x64)下运行没问题,但是在3.5就出问题了!

提示如下:
Traceback (most recent call last):
File "", line 1, in
File "clip.py", line 25, in set
ctypes.memmove(cb,ss,len(s))
OSError: exception: access violation writing 0x000000004AAA1E40

请问这是为啥??
python3.5有更新这方面内容??

卧槽,百度把我的缩进吃掉了。大家凑合着看吧。。。
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-01-30 02:20
这边执行没有问题,版本如下
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32代码如下
import ctypes
def get(): 
    '''从剪切板中获得字符串'''
    h=ctypes.WinDLL('user32.dll')
    h.OpenClipboard(0) 
    aa=h.GetClipboardData(13) 
    ss=ctypes.c_wchar_p(aa) 
    h.CloseClipboard()
    return ss.value
def set(mystr):
    '''把字符串放到剪切板中,成功返回1,失败返回0'''
    u=ctypes.WinDLL('user32.dll')
    k=ctypes.WinDLL('kernel32.dll')
    s=mystr.encode('utf-16')
    s=s[2:]+b'\0\0'
    ss=ctypes.c_char_p(s)
    u.OpenClipboard(0)
    u.EmptyClipboard()
    k.GlobalAlloc.argtypes=[ctypes.c_uint32,ctypes.c_uint32]
    try:
        cb=k.GlobalAlloc(0,len(s))
        cb=ctypes.c_void_p(cb)
        print(type(cb))
        ctypes.memmove(cb,ss,len(s))
        rr=u.SetClipboardData(13,cb) # 13->unicode
    finally:
        u.CloseClipboard()
    if rr==0:
        return 0
    else:
        return 1
#-----
set("abcdefg")程序返回

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯