Autohotkey 使用自动热键自动最大化skype live对话窗口

Autohotkey 使用自动热键自动最大化skype live对话窗口,autohotkey,skype,Autohotkey,Skype,这就是我正在努力做的,我非常感谢这里的任何帮助 我正在尝试使用自动热键脚本自动最大化skype中的实时对话窗口。我正在尝试这样做,以便我可以使用skype呼叫远程机器并让它自动应答(这在skype中是本机的)…一旦我有了实时对话窗口,我希望最大化实时对话窗口以填充屏幕 我已经尝试过了,但不知何故,我认为我没有正确的ahk_类用于实时对话窗口,但可能还有一些东西我遗漏了。我在下面列出了我尝试使用的代码…任何帮助都会很好 #NoEnv ; Recommended for performance a

这就是我正在努力做的,我非常感谢这里的任何帮助

我正在尝试使用自动热键脚本自动最大化skype中的实时对话窗口。我正在尝试这样做,以便我可以使用skype呼叫远程机器并让它自动应答(这在skype中是本机的)…一旦我有了实时对话窗口,我希望最大化实时对话窗口以填充屏幕

我已经尝试过了,但不知何故,我认为我没有正确的ahk_类用于实时对话窗口,但可能还有一些东西我遗漏了。我在下面列出了我尝试使用的代码…任何帮助都会很好

#NoEnv  ; Recommended for performance and compatibility with future     AutoHotkey releases.
#Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#Persistent

IfWinExist, TLiveConversationWindow ;
{
WinActivate
WinMaximize
send !{Enter};When using skype normally this Alt+Enter will maximize the window
return
}
我还尝试使用这段代码为live conversation窗口确定合适的类…但到目前为止还没有帮助

Alt & Enter::
IfWinExist, TLiveConversationWindow
WinActivate
ControlFocus, ClassNN TLiveConversation1
ControlClick, ClassNN TLiveConversation1, , , , 2, 
MouseClick, left, , , 2
send !{Enter}
; now we get the ID & CLASS
WinGet, Active_Window_ID, ID, A
WinGetClass, Active_Window_Class, A
MsgBox, The active window's class is "%Active_Window_class%" and ID is %Active_Window_ID%
能够使用热键启动简化版本的代码,但无法按照@Schneyer的要求使用WinWait函数

热键激活的功能代码

#NoEnv
#Warn
#Persistent
SendMode Input
SetWorkingDir %A_ScriptDir%

; Skype Maximizer initiating functions
^!p::
;WinWait ahk_class TLiveConversation1
;WinWait ahk_class TConversationForm
;WinWait ahk_class TLiveConversationWindow
;WinMaximize ahk_class TLiveConversation1

;functioning code
;Activate tSkMainForm.
WinActivate ahk_class tSkMainForm

;Send Alt Enter Input to maximize.
SendInput !{Enter}

;TLiveConversationWindow Always On Top
WinSet, AlwaysOnTop,,ahk_class TLiveConversationWindow

;Minimize main form
WinMinimize ahk_class tSkMainForm

Return
交换^时!对于任何WinWait函数,似乎都不会发生任何事情。WinWait似乎应该是正确的方法,有没有想过为什么它不起作用?

问题
#persistent
允许脚本运行,但在启动脚本时代码仍然只执行一次。之后,它会保持活动状态,但什么也不做。 使用
WinWait
等待窗口出现(如果希望它运行不止一次,请将其包装在
循环中)

使用
ahk_class
搜索窗口类而不是窗口标题

工作代码 您可以使用AHK中包含的Window Spy工具。使用正在运行的AHK脚本的托盘图标菜单启动它

我在代码中使用了TConversationForm,但它适用于每个窗口类

#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%

WinWait ahk_class TConversationForm
WinActivate
WinMaximize

通过浏览AHK论坛,我找到了一篇帖子,这篇帖子让我找到了这个小问题的答案。查看以下链接以了解更多信息

使用ahk_类来识别skype呼叫何时处于活动状态的问题在于,在inspector中标识为classNN TLiveConversation1的“活动呼叫窗口”实际上是ahk_类TSK通知窗口中的控件,而不是窗口。这使得WinWait函数在调用启动时无法识别它

为了识别控件,有必要在ahk_类TskamInfo中的控件(使用WinGet)中循环,直到TLiveConversation存在,然后启动所需的任何子例程。对我来说,这是最大限度地扩大现场对话窗口

您将看到从WinGet函数开始执行此操作的代码。所有这些都被包装在一个while循环中,因此它将持续运行,从而允许反复调用它。本质上,此代码将执行以下操作:

  • 创建ahk_类中现有控件的列表(SkypeController)
  • 在SkypeController中不断循环
  • 启动新的实时对话时,将存在控制TLiveConversation1
  • 一旦TLiveConversation1 esists运行必要的代码
  • 只要调用的机器上没有活动的屏幕保护程序,上述代码就可以正常工作。如果有一个活动的屏幕保护程序,电话会接听,但屏幕保护程序不会消失。您可以看到试图将计算机从屏幕保护程序中唤醒的代码残留(这目前不起作用)

    我还添加了一些代码来清理这种体验,比如删除skype在通话后弹出的通话质量弹出窗口,以及在通话结束后清除桌面


    感谢@Blauhirn和@Schneyer为解决这一问题所做的努力。

    什么是不起作用的?您可以将问题缩小到哪一行?据我所知,不起作用的部分是识别LiveConversationWindow的适当类。我尝试了下面的ahk_类LiveConversationWindow ahk_类TLiveConversation1(它显示为ahk_类TskamInform的ClassNN),我使用了下面@Schneyer给出的代码,并在下面的注释中显示。WinWait函数似乎对我没有任何帮助。我已经尝试过下面所示的ahk_类的一些变体,但在开始对话时似乎都不起作用。我甚至尝试用MsgBox进行测试,看看它是否启动了任何东西,但没有成功。WinWait ahk_类TLiveConversation1 WinWait ahk_类TConversationForm WinWait ahk_类TLiveConversationWindow@Chardho使用Window Spy工具来确定正确的类。我确实使用了Spy工具来查找该类…但不确定是否正确查找。我认为问题在于ClassNN TLiveConversation1是一个窗口中的控件,带有ahk_类TskamInfo。控件表示我想用WinWait关闭的活动对话…只是不确定当WinWait可能是控件而不是窗口时我是否可以使用它。当窗口或控件是tskmaninform的子对象时,tskmaninform似乎相对持久。我无法在WinWait中使用tSkMainForm as,因为它在启动调用之前和之后都会持续存在。
    #NoEnv 
    #Warn 
    #Persistent
    SendMode Event
    SetWorkingDir %A_ScriptDir%
    
    DetectHiddenWindows, on
    
    stop = 0
    Loop
    {
    
    While stop = 0
    {
    
        WinGet, SkypeControlList, ControlList, ahk_class tSkMainForm
        Loop, Parse,SkypeControlList, `n
        {
            ;Loop to search for control TLiveConversation1
            if (A_LoopField = "TLiveConversation1")
            {
    
            ;Deactivate active screensaver
            PostMessage, 0x0112, 0x0F060, 0,, A
            ;RegWrite REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop, ScreenSaveActive, 0
            ;SetKeyDelay, 500
            Send {Esc}
    
    
            ;Activate tSkMainForm.
            WinActivate ahk_class tSkMainForm
    
    
            ;Send Alt Enter Input to maximize.
            Send !{Enter}
    
            ;TLiveConversationWindow Always On Top
            WinSet, AlwaysOnTop,,ahk_class TLiveConversationWindow
    
    
            stop = 1
            sleep, 100
            }           
        }
    }
    
    IfWinExist ahk_class TLiveConversationWindow
        {
        stop = 1
        sleep, 1000
        }
    IfWinNotExist ahk_class TLiveConversationWindow
        {
        ;Minimize all windows by win+D show desktop
        send #d
        sleep,1000
    
    
        ; is that call quality feedback window up?  kill it.
        SetTitleMatchMode, Regex
        WinClose, ^Skype.*Call quality feedback$
    
        stop = 0
        }
    sleep 1000
    
    
    }
    Return