0

我找到了以下脚本,用于将热键动态分配给已打开的窗口:

Code (Expand):
Loop 10
{
   i := A_Index - 1
   HotKey #^%i%,DynHotkey
   HotKey #%i%, DynHotkey
   HotKey #!%i%,DynHotkey
}
Exit

DynHotkey:
   StringRight i, A_ThisHotKey, 1
   StringMid what,A_ThisHotKey, 2, 1
   var := var%i%
   IfEqual what, ^, WinGet var%i%, ID, A  ; Save ID
   Else IfEqual what,!, WinMinimizeAll    ; MinimizeAll
   WinRestore  ahk_id %var%
   WinActivate ahk_id %var%               ; Switch
Return

(代码是从这个线程复制的http://www.autohotkey.com/forum/topic38773.html&highlight=dynamic+hot+key

使用上面的脚本,您可以:

  1. 使用 Win+Ctrl+0..9热键附加到当前活动窗口。
  2. 使用 Win+0..9切换到对应窗口。

但是,如果我为给定窗口分配了一个热键(使用 Win+Ctrl+0..9),然后我想返回该窗口(Win+0..9),则该窗口将重置为新的尺寸和位置。

有没有办法保存窗口的大小和位置以及它的 ID?

如果是这样,脚本会是什么样子?

我在 Windows 7 64 位上运行上述脚本。

非常感谢,

4

2 回答 2

1

您不需要使代码复杂化:)

快速提问:如果您的窗口被最小化,您没有任何问题,对吧?代码上的“问题”是WinRestore.

问题是,如果窗口未最小化,然后您执行WinRestore它会将大小和位置更改为它的“未最大化”版本。

只有当窗口最小化时,WinActivate 才会自动执行 WinRestore,因此您可以安全地删除第 16 行(WinRestore 行),因为 WinActivate 会执行您需要的操作。

- 编辑 -

这就是代码的外观:

Loop 10
{
    i := A_Index - 1
    HotKey #^%i%,DynHotkey
    HotKey #%i%, DynHotkey
    HotKey #!%i%,DynHotkey
}
Exit

DynHotkey:
    StringRight i, A_ThisHotKey, 1
    StringMid what,A_ThisHotKey, 2, 1
    var := var%i%
    IfEqual what, ^, WinGet var%i%, ID, A  ; Save ID
    Else IfEqual what,!, WinMinimizeAll    ; MinimizeAll
    WinActivate ahk_id %var%               ; Switch
Return

我测试了它,它工作得很好。

于 2010-07-31T12:37:04.480 回答
0

您可以使用 WinGetPos 读取实际位置并保存。然后您可以使用 WinMove 设置位置。这是一个功能列表:http ://www.autohotkey.com/docs/commands.htm 。

于 2010-05-14T17:24:39.213 回答