eric6/ThirdParty/Send2Trash/send2trash/plat_win.py

changeset 8258
82b608e352ec
parent 8257
28146736bbfc
child 8259
2bbec88047dd
--- a/eric6/ThirdParty/Send2Trash/send2trash/plat_win.py	Tue Apr 20 19:47:39 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-# Copyright 2017 Virgil Dupras
-
-# This software is licensed under the "BSD" License as described in the "LICENSE" file,
-# which should be included with this package. The terms are also available at
-# http://www.hardcoded.net/licenses/bsd_license
-
-from __future__ import unicode_literals
-
-from ctypes import (windll, Structure, byref, c_uint,
-                    create_unicode_buffer, addressof)
-from ctypes.wintypes import HWND, UINT, LPCWSTR, BOOL
-import os.path as op
-
-from .compat import text_type
-
-kernel32 = windll.kernel32
-GetShortPathNameW = kernel32.GetShortPathNameW
-
-shell32 = windll.shell32
-SHFileOperationW = shell32.SHFileOperationW
-
-
-class SHFILEOPSTRUCTW(Structure):
-    _fields_ = [
-        ("hwnd", HWND),
-        ("wFunc", UINT),
-        ("pFrom", LPCWSTR),
-        ("pTo", LPCWSTR),
-        ("fFlags", c_uint),
-        ("fAnyOperationsAborted", BOOL),
-        ("hNameMappings", c_uint),
-        ("lpszProgressTitle", LPCWSTR),
-        ]
-
-
-FO_MOVE = 1
-FO_COPY = 2
-FO_DELETE = 3
-FO_RENAME = 4
-
-FOF_MULTIDESTFILES = 1
-FOF_SILENT = 4
-FOF_NOCONFIRMATION = 16
-FOF_ALLOWUNDO = 64
-FOF_NOERRORUI = 1024
-
-
-def get_short_path_name(long_name):
-    if not long_name.startswith('\\\\?\\'):
-        long_name = '\\\\?\\' + long_name
-    buf_size = GetShortPathNameW(long_name, None, 0)
-    output = create_unicode_buffer(buf_size)
-    GetShortPathNameW(long_name, output, buf_size)
-    return output.value[4:]  # Remove '\\?\' for SHFileOperationW
-
-
-def send2trash(path):
-    if not isinstance(path, text_type):
-        path = text_type(path, 'mbcs')
-    if not op.isabs(path):
-        path = op.abspath(path)
-    path = get_short_path_name(path)
-    fileop = SHFILEOPSTRUCTW()
-    fileop.hwnd = 0
-    fileop.wFunc = FO_DELETE
-    # FIX: https://github.com/hsoft/send2trash/issues/17
-    # Starting in python 3.6.3 it is no longer possible to use:
-    # LPCWSTR(path + '\0') directly as embedded null characters are no longer
-    # allowed in strings
-    # Workaround
-    #  - create buffer of c_wchar[] (LPCWSTR is based on this type)
-    #  - buffer is two c_wchar characters longer (double null terminator)
-    #  - cast the address of the buffer to a LPCWSTR
-    # NOTE: based on how python allocates memory for these types they should
-    # always be zero, if this is ever not true we can go back to explicitly
-    # setting the last two characters to null using buffer[index] = '\0'.
-    buffer = create_unicode_buffer(path, len(path)+2)
-    fileop.pFrom = LPCWSTR(addressof(buffer))
-    fileop.pTo = None
-    fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT
-    fileop.fAnyOperationsAborted = 0
-    fileop.hNameMappings = 0
-    fileop.lpszProgressTitle = None
-    result = SHFileOperationW(byref(fileop))
-    if result:
-        raise WindowsError(None, None, path, result)

eric ide

mercurial