Добавлено: Сб мар 07, 2026 23:56
А почему нельзя просто уменьшить задержку?Orion9 писал(а):WinSetState(0, hWnd) сразу скрывает окно при появлении.
Sleep(1)
nTimeOut -= 1
А почему нельзя просто уменьшить задержку?Orion9 писал(а):WinSetState(0, hWnd) сразу скрывает окно при появлении.
Можно. Но окно все-равно будет мелькать ) Проблема возникает не при обнаружении окна (WinFind находит его быстро), а в задержке SendMessage. Пока клик не дойдет и не обработается, окно будет висеть на экране, вызывая эффект мелькания. Но если его сразу скрыть после обнаружения, появится плавность как в рекламе Gillette Razor IIIsa писал(а):А почему нельзя просто уменьшить задержку?
Код: Выделить всё
Func NagScreen()
Global gNagPush = 0, gNagCtrl = List()
If WincmdKeyExist() Then Return
Local ewp = Callback("EnumChilProc", "hwnd;lparam"), dbg = 1, i = 1
Local hWnd, nTimeOut = 1500, nSleep = 0
While nTimeOut > 0
hWnd = WinFind(0, "TNASTYNAGSCREEN")
If hWnd > 0 Then
If nSleep > 0 Then Sleep(nSleep)
WinSetState(0, hWnd)
DllCall("EnumChildWindows", "hwnd", hWnd, "ptr", ewp.Ptr, "lparam", 0)
If gNagPush = -1 Then Break
EndIf
Sleep(5)
nTimeOut -= 5
i += 1
Wend
If hWnd = 0 Then Return
If dbg And IsPressed(0x11) Then ShowHint("iter. = " & i & auCRLF & gNagCtrl.Text)
Free(gNagCtrl, ewp)
Sleep(500)
If WinGetState(1, hWnd) Then WinSetState(1, hWnd)
EndFunc
Func WincmdKeyExist()
Local lst = gNagCtrl
Local sKeyPath = IniRead("~/R", COMMANDER_INI, "Configuration", "KeyPath")
If sKeyPath = "$" Then Return 1
If sKeyPath <> "" Then
sKeyPath = JoinPath(Set(sKeyPath))
If FileExist(sKeyPath) Then lst.Add(sKeyPath)
EndIf
lst.Add(COMMANDER_PATH)
lst.Add(FileGetDir(COMMANDER_INI))
If FileExist("c:\totalcmd") Then lst.Add("c:\totalcmd")
For i = 0 To lst.Count - 1
If FileExist(lst[i] & "\wincmd.key") Then Return 1
If FileExist(lst[i] & "\tcmdkey.zip") Then Return 1
Next
Return 0
EndFunc
Func EnumChilProc(hwnd, lparam)
Local Text = WinGetText(hwnd)
gNagCtrl.Add(WinGetClass(hwnd) & " - " & Text)
If StrLen(Text) = 1 Then
gNagPush = Text
Return 1
EndIf
If StrLen(Text) = 2 Then
If StrReplace(Text, "&", "") = gNagPush Then
gNagPush = -1
SendMessage(hwnd, 245, 0, 0)
Return 0
EndIf
EndIf
Return 1
EndFuncЕсли речь о респектабельной задержке, то нужный параметр я добавил. На счет видюхи, не знаю. Очень сомнительно, что простое скрытие окна может привести к каким-то проблемам.AkulaBig писал(а):Я против этого
При значении Sleep(50) у меня оно мелькает и при WinSetState(0, hWnd).Orion9 писал(а):Можно. Но окно все-равно будет мелькать
Исходников автокликеров нет. Поэтому гадать бесполезно. Факт что они все глючные.Orion9 писал(а):Очень сомнительно, что простое скрытие окна может привести к каким-то проблемам.
В общем, это была только наработка, поэтому к конфигурации я ее и не стал подключать.Пример больше концептуальный, его еще нужно на практике проверять и доводить до рабочего состояния.
https://forum.wincmd.ru/viewpost.php?p=140472
Код: Выделить всё
Func NagScreen()
Global gNagPush = 0, gNagCtrl = List()
If WincmdKeyExist() Then Return
Local ewp = Callback("EnumChilProc", "hwnd;lparam"), dbg = 1, i = 1, h = 0
Local hWnd, nTimeOut = 1500, nSleep = 0
While nTimeOut > 0
hWnd = WinFind(0, "TNASTYNAGSCREEN")
If hWnd > 0 Then
h += 1
If nSleep > 0 Then Sleep(nSleep)
WinSetState(0, hWnd)
#Break
DllCall("EnumChildWindows", "hwnd", hWnd, "ptr", ewp.Ptr, "lparam", 0)
If gNagPush = -1 Then Break
EndIf
Sleep(5)
nTimeOut -= 5
i += 1
Wend
If hWnd = 0 Then Return
If dbg And IsPressed(0x11) Then
ShowHint("find = " & h & auCRLF & "round = " & i & auCRLF & gNagCtrl.Text)
EndIf
Free(gNagCtrl, ewp)
Sleep(500)
If WinGetState(1, hWnd) Then WinSetState(1, hWnd)
EndFunc Код: Выделить всё
LoadLibrary Plugins\Autorun_Tweaks.dll
LoadLibrary Plugins\Autorun_Runtime.dll
RunThread("NagScreen")
Func NagScreen()
Global gNagPush = 0, gNagCtrl = List(), gNagDbg = false
If WincmdKeyExist() Then Return
Local ewp = Callback("EnumChilProc", "hwnd;lparam"), i = 1, h = 0
Local hWnd, nTimeOut = 1500, nSleep = 0
While nTimeOut > 0
hWnd = WinFind(0, "TNASTYNAGSCREEN")
If hWnd > 0 Then
h += 1
If nSleep > 0 Then Sleep(nSleep)
WinSetState(0, hWnd)
DllCall("EnumChildWindows", "hwnd", hWnd, "ptr", ewp.Ptr, "lparam", 0)
If gNagPush = -1 Then Break
EndIf
Sleep(5)
nTimeOut -= 5
i += 1
Wend
If hWnd = 0 Then Return
If gNagDbg And IsPressed(0x11) Then
ShowHint("find = " & h & auCRLF & "round = " & i & auCRLF & gNagCtrl.Text)
EndIf
Free(gNagCtrl, ewp)
Sleep(500)
If WinGetState(1, hWnd) Then WinSetState(1, hWnd)
EndFunc
Func WincmdKeyExist()
Local lst = gNagCtrl
Local sKeyPath = IniRead("~/R", COMMANDER_INI, "Configuration", "KeyPath")
If sKeyPath = "$" Then Return 1
If sKeyPath <> "" Then
sKeyPath = JoinPath(Set(sKeyPath))
If FileExist(sKeyPath) Then lst.Add(sKeyPath)
EndIf
lst.Add(COMMANDER_PATH)
lst.Add(FileGetDir(COMMANDER_INI))
If FileExist("c:\totalcmd") Then lst.Add("c:\totalcmd")
For i = 0 To lst.Count - 1
If FileExist(lst[i] & "\wincmd.key") Then Return 1
If FileExist(lst[i] & "\tcmdkey.zip") Then Return 1
Next
Return 0
EndFunc
Func EnumChilProc(hwnd, lparam)
Local sText = WinGetText(hwnd), nLen = StrLen(sText)
If gNagDbg Then
gNagCtrl.Add(WinGetClass(hwnd) & " - " & sText)
EndIf
If nLen = 1 Then
gNagPush = "&" & sText
ElseIf nLen = 2 And sText = gNagPush Then
gNagPush = -1
SendMessage(hwnd, 245, 0, 0)
Return 0
EndIf
Return 1
EndFuncПохоже, работает стабильнее, чем у AkulaBigOrion9 писал(а):Ну все, это последняя версия с оптимизацией EnumChilProc.
этого уже нет.Mrak_Tlen писал(а):если после запуска первым делом нажать на любой пункт меню или правой кнопкой на панель табуляторов
А если закомментировать (или убрать) строкуFallenAngel писал(а):Если СРАЗУ кликнуть ПКМ по табуляторам - закрывает ТС.
Может и закрывает, но больше похоже, что ТС тупо падает из-за сбоя в каком-то плагине, необязательно Autorun.FallenAngel писал(а):Если СРАЗУ кликнуть ПКМ по табуляторам - закрывает ТС.
Код: Выделить всё
Free(gNagCtrl, ewp)
Sleep(500)
If WinGetState(1, hWnd) Then WinSetState(1, hWnd)
MsgBox("Exit")
EndFuncхм, вроде помогло!sa писал(а):# WinSetState(0, hWnd)
Не понимаю, как это может влиять. Но если помогло, уже что-то.FallenAngel писал(а):хм, вроде помогло!
Предварительно, нет.Orion9 писал(а):Повторяется проблема?
Вот больше всего что мне не нравится, вы и сделали. У вас окно так противно мелькает. Как в свое время ассоциации мелькали. Предлагаю либо сделать задержку, чтобы окно успевало появляться, либо добиться, чтобы оно совсем не появлялось.Orion9 писал(а):мини-сборке ТС
Уже сделано: установите желаемое значение nSleep.AkulaBig писал(а):Предлагаю либо сделать задержку, чтобы окно успевало появляться
Прикольно искусственно делать то, что может работать изначально.sa писал(а):Уже сделано: установите желаемое значение nSleep.