我正在尝试创建一个有用的系统来自动增加所选文本中的数字。例如,当我在Zbrush中使用名为“Example_character012”的项目时,我有一个包含23个文件的文件夹,从“Example_character012_prj_01.zpr”到“Example_character012_prj_23.zpr” “。当我需要保存下一次迭代时,我按下“ctrl + s”,然后在最后一个工作目录中打开常规保存屏幕并预选文件名文本,在这种情况下它将是“Example_character012_prj_23.zpr” 。我需要复制此文本,选择最后一个数字(23)将其增加一个,然后将所有文本返回到文本字段。在这种情况下,它将是“Example_character012_prj_24.zpr”。 这种脚本在各种场景中都非常有用,主要是保存在不同的程序中。 我试图自己做出来并提出这个:
^!Numpad1::
Sleep 100
Send ^c
Sleep 10
RegExMatch(clipboard,"(\d+)(?!.*\d)",Number)
NewNumber:=Number1+1
OldNumber:=NewNumber-1
Clipboard:=RegExReplace(clipboard, OldNumber, NewNumber)
Sleep 10
Send ^v
Sleep 10
Send +{Home}
Return
^!Numpad0::
Sleep 100
Send ^c
Sleep 10
RegExMatch(clipboard,"(\d+)(?!.*\d)",Number)
NewNumber:=Number1-1
OldNumber:=NewNumber+1
Clipboard:=RegExReplace(clipboard, OldNumber, NewNumber)
Sleep 10
Send ^v
Sleep 10
Send +{Home}
Return
Ctrl + alt + Num1用于增加,Ctrl + alt + Num0用于减少。 在最简单的场景中它可以正常工作,但是有一些我无法解决的重大问题:
编辑: 在Autohotkey论坛上获得了一些帮助,下面是当前版本的脚本。只留下问题4和5。
^!Numpad1::
^!Numpad0::
Sleep 50
Send {Ctrl up}^{Ins}
Sleep 10
RegExMatch(Clipboard, "^(.*)(?=_)_(\d+)(\....)$", Match)
Len := StrLen(Match2)
if InStr(A_ThisHotkey, 1)
Match2++
else
Match2--
if (StrLen(Match2) < Len)
Match2 := Format("{:0" Len "}", Match2)
Clipboard := Match1 "_" Match2 Match3
Sleep 10
Send +{Ins}
Sleep 10
Send +{Home}
Return
答案 0 :(得分:0)
你的CTRL键行为不端的原因可能是因为:
如果你有像
这样的热键int * pt = 0;
pt = new int;
*pt = 12;
delete pt;
pt=0;
if (pt==0) {
// the pointer doesn't point to anything, and we can test it safely
}
/* ... */
if (pt!=0) {
delete pt; //this second delete wont occur if pt is null (==0)
pt=0;
}
当您按下CTRL + F12时实际发生的是AHK释放CTRL,发送a,然后重新点击CTRL。
这可能会变得更复杂,例如在你的场景中。
尝试使用^F12::
Send {a}
Send
命令前缀{Blind}
来阻止此行为。
这可能也可能不起作用(即如果热键是shift + ctrl +但是热键发送ctrl + v,那么实际上会发送的是ctrl + shift + v)但是如果它仍然有效,它< em>可能让CTRL开始表现得更多。