类似安卓上的Tasker
比方说当
运行某程序时 执行命令
当前窗口全屏时 执行命令
指定音量时 执行命令
前置条件可以写, 执行的命令可以写
就是持续监测这个有啥好办法吗?
loop循环吗?
类似安卓上的Tasker
比方说当
运行某程序时 执行命令
当前窗口全屏时 执行命令
指定音量时 执行命令
前置条件可以写, 执行的命令可以写
就是持续监测这个有啥好办法吗?
loop循环吗?
放心循环就行。一般来说资源占用非常低。
写了个不在桌面且窗口大于1200*900时暂停动态壁纸的东西
很简单几句头都要秃了…
本来很简单就行,但是一秒执行一次命令我倒没什么,但是鼠标隔一秒会转下圈就很烦.
想半天怎么判断前一秒不是桌面,后一秒还不是桌面的情况…
最后 1+1解决.
不是桌面 2
然后怕那种1+1一直加下去数米破产(会吗?),不是桌面-不是桌面2+2
至于桌面一秒一执行我管不了了…再套层娃我要晕倒了.
…感觉太蠢了
loop
{
WinGetPos,,,w,h,a
Winget,s,ProcessName,a
f := InStr(s,"explorer")
if f=1
{
run wp mpv set pause no
v = 1
}
Else
v := v+v
if (v=2 and w>1200 and h>900)
{
run wp mpv set pause yes
v=2
}
Sleep 1000
}
这没有缩进的代码,都给我看睡着了
对的,非专业人士就这样…
参数命名也是想到啥就是啥,能运行起来就行
代码缩进是编程的基本素养。
通过使用 Tab 键使代码向右缩进来表达层级,让代码变得更加容易阅读。
然后 markdown 语法下是支持插入代码段的,并且可以指定代码的语言,然后进行高亮显示。我把你的代码整理一下放在下面,你看看区别:
loop {
WinGetPos,,,w,h,a
Winget,s,ProcessName,a
f := InStr(s,"explorer")
if (f=1){
run wp mpv set pause no
v = 1
}
Else{
v := v+v
}
if (v=2 and w>1200 and h>900){
run wp mpv set pause yes
v=2
}
Sleep 1000
}
虽然内容上基本是一致的,但你看看阅读体验是不是不一样的。
感觉上面的代码可以这样简化一下:
loop {
WinGetPos, , ,w ,h ,a
Winget, s, ProcessName, a
f := InStr(s, "explorer")
if (f=1){
run wp mpv set pause no
}else if (w>1200 and h>900){
run wp mpv set pause yes
}
Sleep 1000
}
我一开始就是这样的
但是下面这段会每一秒运行一次,也就是我上面说的怎么判断前一秒不是桌面,后一秒还不是桌面
为了判断这个所以加了个变量v,怎么在一个LOOP中修改并判断我还想了半天
在桌面时 v=1
然后 else 只运行下个if的判断语句 v+v=2
if 判断上个 else v+v, 2是回到了一次桌面,其他的数值就是没回.
在 if 后续给予 v+v!=2 的变量 我给予的是 v=2
这里不给这个 v=2 的变量也行,但是会一直*2上去,我怕一段时间会爆掉所以在这重置v的数值.
这时 if 判断前 v+v=4 就不会继续进行命令了.
到是 f 的变量是没必要的,可以直接 if InStr(s,"explorer")
,但是我一开始不是想也在这给予判断嘛,所以就给了个f的变量,方便和准备加进去的变量做类似第二个if的判断,但是加半天加不进.没有初始变量进行不下去会导致整个都不行.
markdown 语法之类我只能…我最开始github还不会多行代码 格式化,后面才明白和单行一样选择然后点击按钮(对,让我手动输入bbcode之类的我都不会- -)
else if (w>1200 and h>900){
run wp mpv set pause yes
}
我没测试,大概是下面这个意思。
isRunning := 1
loop {
If WinActive("ahk_class WorkerW ahk_exe Explorer.EXE"){
if(!isRunning){
run wp mpv set pause no
isRunning := 1
}
}else{
if(isRunning){
WinGetPos, , ,w ,h ,a
if (w>1200 and h>900){
run wp mpv set pause yes
isRunning := 0
}
}
}
Sleep 1000
}
markdown 下面插入代码的格式如下:
```ahk
这里粘贴代码
```
上面所使用的标点是反引号,就是数字 1 左边那个
我试过 If WinActive
甚至#IfWinActive
比方说限定在 桌面中 一分钟LOOP一次, 其他窗口一秒一次.
但在loop中效果不怎么好.(完全运行不了)
这段代码其实还是一样的…
if(isRunning)
在非桌面的1200*900窗口的每一秒都是真的,然后继续运行下面的命令…
我纠结了半天想出了上面那个蠢方法.
算啦 没必要纠结这个啦,作为非专业人士,我只要运行起来就行(非骄傲,…)
解决了,比我的蠢方法优雅多了.
奇了怪了 能运行而且只运行一次
if(isRunning)
为什么第一次loop是真(运行后续),第二次就假了(不运行)?
哦哦哦…
if 1=1
…
绝了
我知道怎么测试,就是懒,而且最近不写 AHK,他的语法和其他语言差异又比较大,我得对照着文档去弄……对,然后人还很懒,2333
上面代码应该就少写了一个空格,我加上了。我这里测试没什么问题,喵~