找回密码
 加入
搜索
查看: 6790|回复: 16

[AU3基础] 【已解决】如何判断剪切板中的内容是字符串还是文件

 火.. [复制链接]
发表于 2010-4-25 14:49:21 | 显示全部楼层 |阅读模式
本帖最后由 kenan 于 2010-4-26 19:11 编辑

If ClipGet ()=??????

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-4-25 15:49:23 | 显示全部楼层
While 1
        ToolTip(ClipGet())
        Sleep(1000)
WEnd
看到你的问题, 我用了以上的函数测试了一下。 一直都没注意过,原来WINDOWS复制文件的时候,点了复制只复制的是文件的路径信息。 不管什么文件, 只复制路径信息。

由此,可以对剪贴板中的信息判断,如果前3个字符为C:\,D:\,等这样的字符,基本可以判断剪贴板中的数据是一个文件。如果你需要更准确的判断,可以对剪贴板中的数据进行按\分割,或者判断最后的4个字符是不是.au3,.txt等这样的文件后缀名。 前后综合起来,前面判断盘符,后面判断文件类型。 最后再加上FileExists(ClipGet()) 判断是不是一个文件, 基本上,剪贴板中是不是文件就可以一清二楚了。

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

 楼主| 发表于 2010-4-25 16:21:30 | 显示全部楼层
回复 2# lanfengc

谢谢了
但我复制一个文件后,在记事本中却不能粘贴路径信息
所以我想是字符串还是文件应该还是有一点不同吧
不过ClipGet ()确实是得到路径信息
你这种判断方法似乎有点麻烦
 楼主| 发表于 2010-4-25 16:43:18 | 显示全部楼层
本帖最后由 kenan 于 2010-4-25 16:45 编辑

在帮助里查了一下
成功: 返回剪贴板的文本字符串.
失败: 如果剪切板为空, @error设为1
如果剪切板为非文本, @error设为2.
如果无法访问剪切板, @error设为3或4.

我想弱弱的问一下,怎么获得这些返回值

ClipGet()
MsgBox("","",@error )

怎么老是得到  0
发表于 2010-4-25 16:54:39 | 显示全部楼层
看看也学习下
发表于 2010-4-25 17:05:06 | 显示全部楼层
While 1
If FileExists(ClipGet()) Then
        ToolTip("剪贴板中的数据是文件或文件路径。")
Else
        ToolTip("剪贴板中的数据是文本。")
EndIf
WEnd
这个代码能达到你的要求了吧?
 楼主| 发表于 2010-4-25 17:18:37 | 显示全部楼层
如果我剪切板里面是字符串,而且是一个文件路径,而且这个路径刚好存在,那么你这个判断就出问题了

告诉我怎么获得返回值吧,
发表于 2010-4-25 19:03:04 | 显示全部楼层
如果我剪切板里面是字符串,而且是一个文件路径,而且这个路径刚好存在,那么你这个判断就出问题了

告诉 ...
kenan 发表于 2010-4-25 17:18



    这种特殊情况。。。确实没法判断。 你想做什么?
发表于 2010-4-25 19:07:03 | 显示全部楼层
回复 4# kenan


    4楼的代码没有错,之所以得到0,是因为成功返回了。
你可以打开画图,选定一片区域,然后复制,你就会发现 @error 不为0了。
 楼主| 发表于 2010-4-25 19:13:07 | 显示全部楼层
我在写个程序里面需要获得剪切板的内容,其实也可以不用做判断,一般不会是文件
但我想在某些情况下可能就会出问题,所以我想写得更严谨一点
 楼主| 发表于 2010-4-25 19:21:37 | 显示全部楼层
回复 9# zjimmy


    确实是这样剪切板中如果是一副图的话就会返回2,我原以为如果是文件的话也应该返回2

我就想剪切板中是字符串还是文件总会有一点不同吧
发表于 2010-4-25 22:06:03 | 显示全部楼层
本帖最后由 zjimmy 于 2010-4-25 22:07 编辑

_ClipBoard_GetData 好像可以解决,例如:
#Include <Clipboard.au3>
MsgBox(0,0,_ClipBoard_GetData($CF_TEXT))

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2010-4-26 10:47:32 | 显示全部楼层
#include <GuiConstantsEx.au3>
#include <GuiEdit.au3>
#include <ClipBoard.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $iMemo

_Main()

Func _Main()
        Local $hGUI, $btn_SetData, $btn_GetData,$str,$str1

        ; Create GUI
        $hGUI = GUICreate("Clipboard", 400, 350)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 296, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
        GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
        $btn_SetData = GUICtrlCreateButton("Set ClipBoard Data", 50, 310, 120, 30)
        $btn_GetData = GUICtrlCreateButton("Get ClipBoard Data", 210, 310, 120, 30)
        GUISetState()

        ; Loop until user exits
        While 1
                Switch GUIGetMsg()
                        Case $GUI_EVENT_CLOSE
                                ExitLoop
                        Case $btn_SetData
                                _ClipBoard_SetData ("ClipBoard Library")
                        Case $btn_GetData
                                $str=_ClipBoard_GetData ()
                                If $str<>0 Then 
                                MemoWrite($str)
                        Else
                                $str1=ClipGet()                                
                                MemoWrite($str1)
                                EndIf
                EndSwitch
        WEnd

EndFunc   ;==>_Main

; Write message to memo
Func MemoWrite($sMessage = "")
        GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

 楼主| 发表于 2010-4-26 19:08:43 | 显示全部楼层
回复 12# zjimmy

谢谢zjimmy
问题解决了
 楼主| 发表于 2010-4-26 19:09:49 | 显示全部楼层
回复 13# 3mile


    3mile 还是谢了
看不懂你的代码什么意思,以后再看吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 01:57 , Processed in 0.089449 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表