为了尽可能简单地说明我的困境:
我有一个范围从 1 到 10 的值列表,我想复制并存储它们。
当我按下Ctrl+键V(或任何粘贴执行)时,我希望显示 1。当我再次按下Ctrl+ 键时V,我希望显示 2。此操作持续到列表末尾。
就上下文而言,我必须将用户分配到一大堆组中。问题是,在我们的系统中,我一次只能粘贴和分配一个组,而有些用户可以分配 200 多个组。我不得不转到 Excel 电子表格,复制一个 ID,将其粘贴到我们的系统中并将其添加到用户中,然后返回 Excel 并转到下一行并重复该过程。如果我可以留在系统屏幕中,将组存储在剪贴板中的数组中,然后逐个粘贴它们,而不必来回转到 Excel,那就太好了。
谢谢!
答案1
一个非常基本的例子自动识别:
#include <Array.au3>
$sText = ClipGet() ;store the text that is currently on the clipboard
ConsoleWrite($sText)
$aArray = StringSplit($sText, @CRLF, BitOr($STR_NOCOUNT, $STR_ENTIRESPLIT))
_ArrayDisplay($aArray, "Clipboard") ;display the copied text to see if it is OK to paste
$currItem = 0;
While 1
If _IsPressed('2C') Then ; Print Screen https://www.autoitscript.com/autoit3/docs/libfunctions/_IsPressed.htm
ConsoleWrite("Print Screen was pressed" & @CRLF)
Sleep(100)
ClipPut($aArray[$currItem])
Sleep(100)
Send("^v")
Sleep(100)
$currItem = $currItem + 1
If $currItem = UBound($aArray) Then
ConsoleWrite("DONE!" & @CRLF)
ClipPut("") ;empty the clipboard
Exit
EndIf
EndIf
WEnd
Func _IsPressed($HexKey)
Local $AR
$HexKey = '0x' & $HexKey
$AR = DllCall("user32","int","GetAsyncKeyState","int",$HexKey)
If NOT @Error And BitAND($AR[0],0x8000) = 0x8000 Then Return 1
Return 0
EndFunc
复制多行文本。
启动脚本。
它显示一个包含所有行列表的对话框(以便您可以确认已复制正确的数据)。
关闭对话框后,每次按下 Print Screen 键,它都会粘贴一行,直到完成所有行,然后清空剪贴板并退出。