Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用winapi通过DragQueryFile从剪贴板获取文件时不返回任何内容_Python_Winapi_Clipboard - Fatal编程技术网

Python使用winapi通过DragQueryFile从剪贴板获取文件时不返回任何内容

Python使用winapi通过DragQueryFile从剪贴板获取文件时不返回任何内容,python,winapi,clipboard,Python,Winapi,Clipboard,我试图制作一个简单的Python程序,它从剪贴板获取当前复制的文件。我用风车来实现这一点。我使用了已经存在的pyperclip工具中的一些代码(只能获取文本而不是文件),并尝试对其进行调整以获取当前复制的文件 以下是我正在调用的函数的文档: 剪贴板函数的参考: 经过一些调整,这段代码可以完美地从剪贴板中删除文本,但它无法处理文件。也许我遗漏了一些明显的东西,或者只是误解了规范 系统:Python3.5.2,Windows 8.1为什么你认为剪贴板涉及拖放?我看到它是这样使用的,我没有看到任何类似

我试图制作一个简单的Python程序,它从剪贴板获取当前复制的文件。我用风车来实现这一点。我使用了已经存在的pyperclip工具中的一些代码(只能获取文本而不是文件),并尝试对其进行调整以获取当前复制的文件

以下是我正在调用的函数的文档:

剪贴板函数的参考:

经过一些调整,这段代码可以完美地从剪贴板中删除文本,但它无法处理文件。也许我遗漏了一些明显的东西,或者只是误解了规范


系统:Python3.5.2,Windows 8.1

为什么你认为剪贴板涉及拖放?我看到它是这样使用的,我没有看到任何类似的原因拖放和剪贴板是不同的系统服务。它们之间没有任何关系,除了一个事实,即蹩脚的工具使用复制粘贴作为用户不友好的借口来实现拖放。那么我应该使用什么呢?如果文件是通过拖放方式复制的,您将无能为力。这是在源和丢弃目标之间单独建立的协议。除非拖放提供了安装钩子的截取点(我不知道这一点),否则无法检索您所要的信息。
import ctypes
from ctypes.wintypes import *
from ctypes import c_size_t, sizeof, c_wchar_p, get_errno, c_wchar, c_ulong, c_uint32

class CheckedCall(object):
    def __init__(self, f):
        super(CheckedCall, self).__setattr__("f", f)

    def __call__(self, *args):
        ret = self.f(*args)
        if not ret and get_errno():
            raise PyperclipWindowsException("Error calling " + self.f.__name__)
        return ret

    def __setattr__(self, key, value):
        setattr(self.f, key, value)

windll = ctypes.windll

safeCreateWindowExA = CheckedCall(windll.user32.CreateWindowExA)
safeCreateWindowExA.argtypes = [DWORD, LPCSTR, LPCSTR, DWORD, INT, INT,
                                    INT, INT, HWND, HMENU, HINSTANCE, LPVOID]
safeCreateWindowExA.restype = HWND

safeDestroyWindow = CheckedCall(windll.user32.DestroyWindow)
safeDestroyWindow.argtypes = [HWND]
safeDestroyWindow.restype = BOOL

OpenClipboard = windll.user32.OpenClipboard
OpenClipboard.argtypes = [HWND]
OpenClipboard.restype = BOOL

clipboarddata=CheckedCall(windll.user32.GetClipboardData)
clipboarddata.argtypes = [UINT]
clipboarddata.restype = HANDLE

safeCloseClipboard = CheckedCall(windll.user32.CloseClipboard)
safeCloseClipboard.argtypes = []
safeCloseClipboard.restype = BOOL

hwnd = safeCreateWindowExA(0, b"STATIC", None, 0, 0, 0, 0, 0,None, None, None, None)
print(hwnd)
print(OpenClipboard(hwnd))

hendl=clipboarddata(15)
print(hendl)


text = ctypes.create_string_buffer(255)

UINTval=windll.shell32.DragQueryFile(c_uint32(hendl),c_uint32(0),text,c_uint32(255))
print(repr(text.raw))
print(UINTval)


safeCloseClipboard()