Autoit проблема мертвой петли - PullRequest
1 голос
/ 21 марта 2011

В SSMS (SQL Server Management Studio) необходимо щелкнуть средней кнопкой мыши по вкладке или нажать Ctrl + F4 , чтобы закрыть текущую вкладку редактора.Я хочу использовать Autoit, чтобы сделать ярлык Ctrl + w сделать то же самое.Но у меня есть проблемы с этим.Ниже приведен код.Я подумал, что когда пользователь нажимает Ctrl + w , проверьте, находится ли пользователь в SSMS, если это так, отправьте Ctrl + F4 чтобы закрыть текущую вкладку, если нет, отправьте Ctrl + w , чтобы отпустить ее как обычно.Но дело в том, что если вы отправите Ctrl + w , он будет снова захвачен Autoit, так что произойдет мертвая петля.Я не могу найти способ решить эту проблему.Кто-нибудь может мне помочь с этим?

Спасибо.

HotKeySet("^w", "close_ssms_editor")

While 1
    Sleep(200)
WEnd

; using Ctrl + w to close
; * editors in SSMS
; * editors in SSMS through Royal TS
Func close_ssms_editor()
    $window_class_name = get_window_class_name(WinGetHandle(""))
    If $window_class_name = "wndclass_desked_gsk" or $window_class_name = "WindowsForms10.Window.8.app.0.218f99c" Then
        Send("^{F4}")
    Else
        Send("^w")
    EndIf
EndFunc


Func get_window_class_name($nCtrl)
    If Not IsHWnd($nCtrl) then $nCtrl = HWnd($nCtrl)
    Local $struct = DllStructCreate("char[128]"),$classname = 0
    $ret = DllCall("user32.dll","int","GetClassName","hwnd",$nCtrl,"ptr",DllStructGetPtr($struct),"int",DllStructGetSize($struct))
    If IsArray($ret) Then
        $classname = DllStructGetData($struct,1)
        While (StringIsDigit(StringRight($classname,1)))
            $classname = StringTrimRight($classname,1)
        WEnd
    EndIf
    $struct =0 
    Return $classname
EndFunc

1 Ответ

1 голос
/ 21 марта 2011

Я нашел решение.

; using Ctrl + w to close
; * editor in SSMS
; * editor in SSMS through Royal TS
Func close_ssms_editor()
    $window_class_name = get_window_class_name(WinGetHandle(""))
    If $window_class_name = "wndclass_desked_gsk" or $window_class_name = "WindowsForms10.Window.8.app.0.218f99c" Then
        Send("^{F4}")
    Else
        HotKeySet("^w")
        Send("^w")
        HotKeySet("^w", "close_ssms_editor")
    EndIf
EndFunc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...