【已解决】如何判断剪切板中的内容是字符串还是文件
本帖最后由 kenan 于 2010-4-26 19:11 编辑If ClipGet ()=?????? While 1
ToolTip(ClipGet())
Sleep(1000)
WEnd看到你的问题, 我用了以上的函数测试了一下。 一直都没注意过,原来WINDOWS复制文件的时候,点了复制只复制的是文件的路径信息。 不管什么文件, 只复制路径信息。
由此,可以对剪贴板中的信息判断,如果前3个字符为C:\,D:\,等这样的字符,基本可以判断剪贴板中的数据是一个文件。如果你需要更准确的判断,可以对剪贴板中的数据进行按\分割,或者判断最后的4个字符是不是.au3,.txt等这样的文件后缀名。 前后综合起来,前面判断盘符,后面判断文件类型。 最后再加上FileExists(ClipGet()) 判断是不是一个文件, 基本上,剪贴板中是不是文件就可以一清二楚了。 回复 2# lanfengc
谢谢了
但我复制一个文件后,在记事本中却不能粘贴路径信息
所以我想是字符串还是文件应该还是有一点不同吧
不过ClipGet ()确实是得到路径信息
你这种判断方法似乎有点麻烦 本帖最后由 kenan 于 2010-4-25 16:45 编辑
在帮助里查了一下
成功: 返回剪贴板的文本字符串.
失败: 如果剪切板为空, @error设为1
如果剪切板为非文本, @error设为2.
如果无法访问剪切板, @error设为3或4.
我想弱弱的问一下,怎么获得这些返回值
ClipGet()
MsgBox("","",@error )
怎么老是得到0 看看也学习下:face (37): While 1
If FileExists(ClipGet()) Then
ToolTip("剪贴板中的数据是文件或文件路径。")
Else
ToolTip("剪贴板中的数据是文本。")
EndIf
WEnd这个代码能达到你的要求了吧? 如果我剪切板里面是字符串,而且是一个文件路径,而且这个路径刚好存在,那么你这个判断就出问题了
告诉我怎么获得返回值吧,:face (38): 如果我剪切板里面是字符串,而且是一个文件路径,而且这个路径刚好存在,那么你这个判断就出问题了
告诉 ...
kenan 发表于 2010-4-25 17:18 http://autoitx.com/images/common/back.gif
这种特殊情况。。。确实没法判断。 你想做什么? 回复 4# kenan
4楼的代码没有错,之所以得到0,是因为成功返回了。
你可以打开画图,选定一片区域,然后复制,你就会发现 @error 不为0了。 我在写个程序里面需要获得剪切板的内容,其实也可以不用做判断,一般不会是文件
但我想在某些情况下可能就会出问题,所以我想写得更严谨一点 回复 9# zjimmy
确实是这样剪切板中如果是一副图的话就会返回2,我原以为如果是文件的话也应该返回2
我就想剪切板中是字符串还是文件总会有一点不同吧 本帖最后由 zjimmy 于 2010-4-25 22:07 编辑
_ClipBoard_GetData 好像可以解决,例如:#Include <Clipboard.au3>
MsgBox(0,0,_ClipBoard_GetData($CF_TEXT)) #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 回复 12# zjimmy
谢谢zjimmy
问题解决了 回复 13# 3mile
3mile 还是谢了
看不懂你的代码什么意思,以后再看吧
页:
[1]
2