将热键分配给窗口(并记住大小和位置)。 AHK

时间:2010-05-14 17:15:59

标签: windows-7 keyboard-shortcuts autohotkey

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

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 切换到对应窗口。
  3. 但是,如果我给一个给定的窗口分配一个热键(使用Win + Ctrl + 0..9),然后我想要回到那个窗口(Win + 0..9),窗口是重置为新的尺寸&位置。

    是否有保存尺寸和方式的方法窗口的位置及其ID?

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

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

    非常感谢,

2 个答案:

答案 0 :(得分: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

我测试过它,效果很好。

答案 1 :(得分:0)

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