File 以编程方式拖放文件-VB6

File 以编程方式拖放文件-VB6,file,drag-and-drop,vb6,global-hotkey,File,Drag And Drop,Vb6,Global Hotkey,我试图在当前鼠标位置“删除”一个图像文件,文件类型为PNG(始终) 使用“Drop”我指的是相同类型的功能,就像您要单击并按住图像,然后在按下热键时将其放到另一个位置 通过这种方式,我可以粘贴我刚刚“剪下”的图像,并将其粘贴为具有适当文件名的文件。(这主要是为了粘贴到wordpress中,没有可用的插件) 我已经编写了从剪贴板抓取图像并保存它的代码。但现在我想抓取这张图片,当按下热键时,把它放在鼠标点上 热键是“异步”工作的,我的应用程序没有焦点(按预期),但现在我被困在按下热键时实际删除此文件

我试图在当前鼠标位置“删除”一个图像文件,文件类型为PNG(始终)

使用“Drop”我指的是相同类型的功能,就像您要单击并按住图像,然后在按下热键时将其放到另一个位置

通过这种方式,我可以粘贴我刚刚“剪下”的图像,并将其粘贴为具有适当文件名的文件。(这主要是为了粘贴到wordpress中,没有可用的插件)

我已经编写了从剪贴板抓取图像并保存它的代码。但现在我想抓取这张图片,当按下热键时,把它放在鼠标点上

热键是“异步”工作的,我的应用程序没有焦点(按预期),但现在我被困在按下热键时实际删除此文件

我的表格(于2020年1月27日更新):

我的模块(于2020年1月27日更新):

我试着用以下方法来模拟,但没有成功..:

Public ssfDESKTOP As Variant
Public FILE As Variant

Public Sub PasteIt(ByVal FileName As String)
ssfDESKTOP = 0
FILE = FileName

With CreateObject("Shell.Application").NameSpace(ssfDESKTOP)
    With .ParseName(FILE)
        .InvokeVerb "copy" 'This is a canonical verb and should work for any
                           'regional and language settings.
    End With
End With

End Sub
但是,
复制
没有发生。当我之后手动单击粘贴按钮时,它会将文件粘贴到资源管理器中,但这不是我想要的拖放功能

我只是更改了标题,以更好地反映我试图解决的最后一个问题


在为同一个问题想出了不同的措辞之后,我再次发现自己陷入了死胡同,因为我还不明白
OLEdrag
是如何为
image
对象工作的。这个对象实际上有OLEdragdrop,但我不确定需要什么来调用它的
startdrag
,然后用鼠标单击我想放置的位置来完成它。

我想我不明白你是如何将拖放的概念与按热键混为一谈的。似乎你只需要一个或另一个…?因为我必须在我的情况下把它们混在一起。。我不能使用复制粘贴:当我选择一个文件(右键单击>复制)时,我不能将其粘贴到编辑器。您只能粘贴原始的“剪切”数据。但是粘贴这些数据会导致一个随机文件名,这就是为什么有必要将它们混合在一起的原因,换句话说:我正试图通过编程方式拖放一个文件。通过文件路径开始拖动,然后通过鼠标单击可以将其拖放到任何位置。如果我不能更好地解释我自己,我很抱歉。@RkdL目前面临同样的问题,你是如何解决的?@sansa我提出了一个解决方案,当我按下热键时,鼠标位置会出现一个带按钮的小窗口。然后我可以通过拖动按钮开始拖动操作。但我仍然无法通过编程启动拖动操作。
Option Explicit

Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


Public Type POINTAPI
    X As Long
    Y As Long
End Type
Public Mpos As POINTAPI
Public FileName$
Public ssfDESKTOP As Variant
Public FILE As Variant

Public Sub PasteIt(ByVal FileName As String)
ssfDESKTOP = 0
FILE = FileName

With CreateObject("Shell.Application").NameSpace(ssfDESKTOP)
    With .ParseName(FILE)
        .InvokeVerb "copy" 'This is a canonical verb and should work for any
                           'regional and language settings.
    End With
End With

End Sub