发表回复 
修改“把窗口钉到桌面上”这段代码
2008-09-18, 21 : 12
修改“把窗口钉到桌面上”这段代码
官方论坛找到的代码,作用是把窗口钉到桌面上
代码: (全选)
^n::
Gosub PinToDesktop
return

PinToDesktop:

WinGetClass, class, A
    
IfWinActive, ahk_class %class%
    SysGet, MonitorWorkArea, MonitorWorkArea,1

    WinGet, DID, ID, ahk_class Progman
    WinGet, CID, ID, ahk_class %class%
    DllCall("SetParent", "uint", CID, "uint", DID)

return
要将其改成命令行工具,用法大概是
代码: (全选)
p.exe <class|title>
默认是”钉“,加上 /u 参数就是取消”钉“;如果可以用 title 的话,能否支持通配符?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-18, 21 : 32
 
WinGet 系列中的 WinTitle 参数可以使用正则表达式, 参考 SetTitleMatchMode .
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-18, 21 : 49
 
还有一个方法,可以把 你需要的窗口加入到一个 Group 里面,调用的时候就用 Ahk_group GroupName 就行了!
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-18, 21 : 52
 
就要命令行...help...
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-18, 22 : 09
 
下面有说如何对命令行参数的操作.
http://ahkbbs.cn/Help/docs/Scripts.htm#cmd
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-19, 17 : 10
 
劳驾下各位给出完整的代码。我很菜的...
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-19, 18 : 09
 
只用加一句 SetTitleMatchMode RegEx 自己看下帮助吧!
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 12 : 15
 
他是不是想说将这个脚本编译成EXE后,想自定义那个 /u 的开关给这个EXE?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 13 : 17
回复 8楼 天堂之门 的帖子
是的
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 13 : 44
 
在第一句加 SetTitleMatchMode RegEx
把 IfWinActive, ahk_class %class% 改成 IfWinActive, ahk_class %2%
至于怎么匹配 你还要去看看帮助: RegExMatch()
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 14 : 45
 
楼主你贴的代码在我的机子上没有“把窗口钉到桌面上”的效果啊,倒是把它们“从任务栏中隐藏了”(桌面可看到),奇怪:o ?楼主你那有“把窗口钉到桌面上”的效果吗?“把窗口钉到桌面上”的效果是什么样的?晕:L
呵呵,楼主你的问题okey3m兄说得很清楚了啊
p.exe  参数1 参数2 。。。  参数1 参数2对应于脚本中的%1%  %2% ... 参数间用空格隔开,若参数含空格用引号框起,再用StringReplace, 1, 1, ",, All在脚本中去除
WinGet 的 WinTitle 参数支持正则表达式,那如BLoom2说的只要在脚本开头处加上SetTitleMatchMode RegEx ,用WinGet, id, List, 可得到所有满足条件的窗口的id
因为脚本在我机子上反应奇怪,所以就不贴代码了

天下随我意,道德只本心
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 15 : 43
 
引用:原帖由 rdingding 于 2008-9-20 14:45 发表 [Image: back.gif]
楼主你贴的代码在我的机子上没有“把窗口钉到桌面上”的效果啊,倒是把它们“从任务栏中隐藏了”(桌面可看到),奇怪:o ?
...
.就是你看到那个效果啊..
从任务栏里消失了..像钉子一样钉到桌面上了(穿透了N个窗口,穿透术)...

我感觉本来就是这个意思.你表示的是什么意思?我木有理解
任务栏上消失我理解是.钉到了任务栏了背面.~~~


[ 本帖最后由 wgf4242 于 2008-9-20 15:47 编辑 ]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 18 : 47
回复 1楼 tireless 的帖子
我记得groups上说过次用参数的啊,用那个改改就行了~

哪个是取消呢
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 20 : 26
回复 13楼 helfee 的帖子
引用:哪个是取消呢
所以就问你们啊...我在官方论坛里问了,结果一个人很快就回复了,叫我搜索 setparent,果然找到了代码,我再问就没人答了...
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 21 : 42
 
引用:原帖由 wgf4242 于 2008-9-20 15:43 发表 [Image: back.gif]

.就是你看到那个效果啊..
从任务栏里消失了..像钉子一样钉到桌面上了(穿透了N个窗口,穿透术)...

我感觉本来就是这个意思.你表示的是什么意思?我木有理解
任务栏上消失我理解是.钉到了任务栏 ...

呵呵,我被最小化按键一按窗口就消失的现象给弄晕了,:loveliness:
简单试验用的代码,参考一下吧,不会恢复,什么子窗口父窗口弄不清啦:'( ,要请教会编程的高手们,怎样用Dllcall得到指定窗口的父窗口?又或者不指定父窗口为Progman就会恢复了??

SetTitleMatchMode RegEx
if 0 = 0
{
msgbox, 使用说明:`n`n`n p.exe [/u] [title1] [title2]... `n`n 当title含空格时须用引号框起`n`n title支持正则表达式
return
}


Loop, %0%
{
StringReplace, param, %A_Index%, ",, All
if (param = "/u")
{
msgbox, 这里填入恢复代码
}
WinGet, id, list, %param%
Loop, %id%
{
var = % id%a_index%
WinGetTitle, OutputVar , ahk_id %var%
IfWinActive, %OutputVar%
SysGet, MonitorWorkArea, MonitorWorkArea,1
WinGet, DID, ID, ahk_class Progman
WinGet, CID, ID, %OutputVar%
DllCall("SetParent", "uint", CID, "uint", DID)
}
}
return

天下随我意,道德只本心
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-20, 22 : 08
回复 15楼 rdingding 的帖子
多谢,能用。

到官方论坛逛逛看如何恢复啊..
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-23, 16 : 36
 
DllCall("SetParent", "uint", ChildHwnd, "uint", 0)
只用把父窗体的句柄赋值为 0 就可以了!
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-09-23, 21 : 11
 
噢~~,原来这样就行了:P 会编程就是厉害啊;P
学习了!!

天下随我意,道德只本心
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合