标题:VB怎么把一个文件 复制到内存,是复制到内存里!!
只看楼主
elik720
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2020-8-27
结帖率:50%
已结贴  问题点数:20 回复次数:11 
VB怎么把一个文件 复制到内存,是复制到内存里!!


假设 我点了一下 VB里的某个按钮( 或者按下了某个全局的 快捷键热键 ) 就可以实现把程序根目录下的 a.txt复制到内存

这样的话 无论后来打开到什么目录下,都可以很快的按CTRL+V 实现粘帖这个文件 很方便!!
因为我不知道我会在什么目录下粘帖 所以我需要按下按钮后复制到内存 而不是指定的目录

求高手指点
搜索更多相关主题的帖子: VB 内存 目录 复制 文件 
2020-08-27 22:29
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:7 
用来复制用?那可以放到粘贴板上嘛。
粘贴板对象是Clipboard
对于文本,用settext方法。图形,用setdata方法。

SetText 方法示例
本示例使用 SetText 方法从一个文本框中复制文本到剪贴板。要检验此示例,可将本例代码粘贴到一个带有名为 Text1 的窗体的声明部分,然后按 F5 键并单击该窗体。

Private Sub Form_Click ()
   Const CF_TEXT = 1   ' 定义位图各种格式。
   Dim I, Msg, Temp   ' 声明变量。
   On Error Resume Next   ' 设置错误处理。
   Msg = "Type anything you like into the text box below."
   Text1.Text = InputBox(Msg)   ' 取得用户正文。
   Msg = "Choose OK to copy the contents of the text box "
   Msg = Msg & "to the Clipboard."
   MsgBox Msg   ' 显示信息。
   ClipBoard.Clear   ' 清除剪贴板。
   Clipboard.SetText Text1.Text   ' 将正文放置在剪贴板上。
   If Clipboard.GetFormat(CF_TEXT) Then
      Text1.Text = ""   ' 清除该正文框。
      Msg = "The text is now on the Clipboard. Choose OK "
      Msg = Msg & "to copy the text from the Clipboard back "
      Msg = Msg & "to the text box."
      MsgBox Msg   ' 显示信息。
      Temp = Clipboard.GetText(CF_TEXT)   ' 取得剪贴板正文。
      For I = Len(Temp) To 1 Step -1   ' 使该正文反向。
         Text1.Text = Text1.Text & Mid(Temp, I, 1)   
      Next I
   Else
      Msg = "There is no text on the Clipboard."
      MsgBox Msg   ' 显示错误信息。
   End If
End Sub

2020-08-28 08:22
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:7 
他是要把文件的复制信息 保存到剪贴板上。需要构建 二进制 数据保存到剪贴板上去。这个数据格式目前我不知道。

其实一些多重剪贴板软件 应该可以达到你的目的。

授人于鱼,不如授人于渔
早已停用QQ了
2020-08-28 11:24
elik720
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2020-8-27
得分:0 
以下是引用风吹过b在2020-8-28 11:24:19的发言:

他是要把文件的复制信息 保存到剪贴板上。需要构建 二进制 数据保存到剪贴板上去。这个数据格式目前我不知道。

其实一些多重剪贴板软件 应该可以达到你的目的。

大佬  你去研究下贝   你们毕竟经验丰富    稍微研究一下  然后就可以把源代码 写出来了

我问的问题 看上去 还是很 直白的 要求   或许实现起来  麻烦一点   我想你们只要去研究 肯定可以把文件 复制进内存  楼上的那个是把文本内容复制进内存 和我需要的完全是2码事了   
2020-08-29 21:51
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
昨天晚上百度了一圈,然后,只看到一个 使用C++的代码,并且有一个结构到处没找到定义,然后对后面的数据是怎么样的格式也不太清楚。
里面有一个标记,复制还是 剪切 ,然后这个代码里注释说自定义标志
算了,不折腾了。本来就英文不行,然后这里全是API操作,VB自带的可能不支持这里的操作。


授人于鱼,不如授人于渔
早已停用QQ了
2020-08-30 11:52
elik720
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2020-8-27
得分:0 
回复 2楼 cwa9958
你这回复的不对啊  明人不说暗话

我要的是  复制文件 到剪贴版   txt文件  不是 txt文本里面的内容    复制进内存后  无论任何的电脑目录下      右键 黏贴是亮的   按CTRL+V 可以黏贴出文本文件的

你发的这个代码 网上很容易找到的  没什么用   


我网上找了半天   的确实现起来或许会很麻烦   如果没有先人写过类似的功能,要自己研究寻找函数 肯定要花时间     看上去简单的功能,可不要难倒一大片啊

[此贴子已经被作者于2020-8-31 23:31编辑过]

2020-08-31 23:27
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:0 
要复制文件,粘贴用Ctrl+V,还不是用了系统的粘贴板吗?
粘贴板是系统共用的,在别的地方更新了粘贴板怎么办?
还真不知道你要怎么用,系统的粘贴板应该是在内存里的吧
2020-09-03 13:01
William1949
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:109
专家分:0
注 册:2009-3-17
得分:0 
楼主是不是想要这种效果:
程序代码:
Option Explicit
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Const GMEM_MOVEABLE = &H2
Private Const GMEM_ZEROINIT = &H40
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long

Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Const CF_HDROP = &HF

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type POINTAPI
    X       As Long
    Y       As Long
End Type
Private Type DROPFILES
    pFiles  As Long
    pT      As POINTAPI
    fNC     As Long
    fWide   As Long
End Type

Private Sub Command1_Click()
    Dim FileName  As String
    
    FileName = "C:\a.txt"
    If Dir(FileName) = "" Then Exit Sub
    FileName = FileName & vbNullChar & vbNullChar
    Call FileToClipboard(FileName)
End Sub

Private Sub FileToClipboard(ByVal FileName As String)
    Dim dFiles  As DROPFILES
    Dim hMem    As Long, MemPtr   As Long, Len1 As Long, Len2 As Long

    If OpenClipboard(Me.hWnd) = 0 Then Exit Sub
    Call EmptyClipboard
    Len1 = Len(dFiles)
    Len2 = LenB(StrConv(FileName, vbFromUnicode))
    hMem = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, Len1 + Len2)
    MemPtr = GlobalLock(hMem)
    dFiles.pFiles = Len1
    Call CopyMemory(ByVal MemPtr, dFiles, Len1)
    Call CopyMemory(ByVal (MemPtr + Len1), ByVal FileName, Len2)
    Call GlobalUnlock(hMem)
    Call SetClipboardData(CF_HDROP, hMem)
    Call CloseClipboard
End Sub
2020-09-03 14:25
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
应该是这种的。我前就是没找到那个结构的定义。
    Call EmptyClipboard            打开剪切板
    Len1 = Len(dFiles)             结构长度
    Len2 = LenB(StrConv(FileName, vbFromUnicode))   文件名长度
    hMem = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, Len1 + Len2)   申请剪切板内存
    MemPtr = GlobalLock(hMem)      锁定剪切板内存
    dFiles.pFiles = Len1
    Call CopyMemory(ByVal MemPtr, dFiles, Len1)       结构体写入剪切板内存
    Call CopyMemory(ByVal (MemPtr + Len1), ByVal FileName, Len2)   结构体后写入文件名
    Call GlobalUnlock(hMem)        开锁剪切板内存
    Call SetClipboardData(CF_HDROP, hMem)    设置剪切板内容
    Call CloseClipboard            关闭剪切板


授人于鱼,不如授人于渔
早已停用QQ了
2020-09-03 16:06
elik720
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2020-8-27
得分:0 
回复 8楼 William1949
对对对     你这个  和 我 花了150大洋  别人写给我的一样   要是早点给 我就不用花钱了   
2020-09-05 12:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502983-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.110741 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved