| View previous topic :: View next topic |
| Author |
Message |
sa
Joined: 29 Apr 2009 Posts: 2722
|
(Separately) Posted: Sun Mar 08, 2026 00:56 Post subject: |
|
|
| Orion9 wrote: | | WinSetState(0, hWnd) сразу скрывает окно при появлении. |
А почему нельзя просто уменьшить задержку?
Sleep(1)
nTimeOut -= 1 |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1031
|
(Separately) Posted: Sun Mar 08, 2026 13:21 Post subject: |
|
|
| sa wrote: | | А почему нельзя просто уменьшить задержку? |
Можно. Но окно все-равно будет мелькать ) Проблема возникает не при обнаружении окна (WinFind находит его быстро), а в задержке SendMessage. Пока клик не дойдет и не обработается, окно будет висеть на экране, вызывая эффект мелькания. Но если его сразу скрыть после обнаружения, появится плавность как в рекламе Gillette Razor III
Неже обновленный код двух функций. Исправил мелкий косяк, который мог приводить к несрабатыванию клика при низком значении Sleep и высокой нагрузке на процессор. В дебаге добавлена информация о количестве итераций. Параметр nSleep стоит теперь на правильно месте. Если нужно затормозить окно триала, например, на секунду, то nSleep = 1000. Под спойлером разместил все три функции, чтобы не было путаницы.
 Hidden text | Code: | 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 wrote: | | Я против этого |
Если речь о респектабельной задержке, то нужный параметр я добавил. На счет видюхи, не знаю. Очень сомнительно, что простое скрытие окна может привести к каким-то проблемам. |
|
| Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2722
|
(Separately) Posted: Sun Mar 08, 2026 13:36 Post subject: |
|
|
| Orion9 wrote: | | Можно. Но окно все-равно будет мелькать |
При значении Sleep(50) у меня оно мелькает и при WinSetState(0, hWnd). |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 498
|
(Separately) Posted: Sun Mar 08, 2026 14:16 Post subject: |
|
|
| Orion9 wrote: | | Очень сомнительно, что простое скрытие окна может привести к каким-то проблемам. |
Исходников автокликеров нет. Поэтому гадать бесполезно. Факт что они все глючные.
Что-то в вашей сборке не работают хинты с exiftool. У вас они не подключены, но я подключил и получаю ошибку в строке 277 файла hints.cfg о недопустимом диапазоне. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1031
|
(Separately) Posted: Sun Mar 08, 2026 19:11 Post subject: |
|
|
AkulaBig
Это отсюда:
В общем, это была только наработка, поэтому к конфигурации я ее и не стал подключать.
sa
Похоже, мелкая щетина остается Особенно это заметно, если процессор изрядно нагрузить.
Скорее всего ничего не поделать. Даже если поставить Break после WinSetState(0, hWnd) окно все-равно может мелькать. Что удивительно, в 64-битной версии все нормально, даже если проц полностью загрузить. Добавил еще переменную для дебага.
 Hidden text | Code: | 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 |
Сейчас используется Sleep(5), но Sleep(1) тоже не помогает. Просто происходит задержка, которая не зависит от Autorun. Код ведь не параллельно выполняется. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1031
|
(Separately) Posted: Sun Mar 08, 2026 23:54 Post subject: |
|
|
Ну все, это последняя версия с оптимизацией EnumChilProc.
 Hidden text | Code: | 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 |
Убраны лишние функции и отключен дебаг. Прибавку в скорости вряд ли получится заметить, но все же. |
|
| Back to top |
|
 |
FallenAngel
Joined: 30 Dec 2025 Posts: 26
|
(Separately) Posted: Mon Mar 09, 2026 15:54 Post subject: |
|
|
| Orion9 wrote: | | Ну все, это последняя версия с оптимизацией EnumChilProc. |
Похоже, работает стабильнее, чем у AkulaBig
По крайней мере
| Mrak_Tlen wrote: | | если после запуска первым делом нажать на любой пункт меню или правой кнопкой на панель табуляторов |
этого уже нет.
Буду еще тестить.
UPD. Если СРАЗУ кликнуть ПКМ по табуляторам - закрывает ТС. |
|
| Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2722
|
(Separately) Posted: Mon Mar 09, 2026 20:45 Post subject: |
|
|
| FallenAngel wrote: | | Если СРАЗУ кликнуть ПКМ по табуляторам - закрывает ТС. |
А если закомментировать (или убрать) строку
# WinSetState(0, hWnd)
? |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|