windnd.hook_dropfiles中的create_buffer值太小无法拖放长文件名
今天在使用我之前的Python识别拖放的PDF文件再转成文本文件-CSDN博客发现,文件藏在路径太深入的地方,不能打开,因为拖放文件只能读取260个字节的文件名(b’路径),再查看windnd.hook_dropfiles函数,发现里面有个create_buffer(260),把它改成460,问题解决,搞不懂为什么要设置260。
def py_drop_func(hwnd,msg,wp,lp):global filesif msg == WM_DROPFILES:count = func_DragQueryFile(argtype(wp),-1,None,None)szFile = create_buffer(460) #原来为260files = []for i in range(count):func_DragQueryFile(argtype(wp),i,szFile,ctypes.sizeof(szFile))dropname = szFile.valuefiles.append(dropname)func(files)ctypes.windll.shell32.DragFinish(argtype(wp))return ctypes.windll.user32.CallWindowProcW(*map(argtype,(globals()[old],hwnd,msg,wp,lp)))