Orion9

|
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: | | Я против этого |
Если речь о респектабельной задержке, то нужный параметр я добавил. На счет видюхи, не знаю. Очень сомнительно, что простое скрытие окна может привести к каким-то проблемам. |
|