Orion9

|
Posted: Fri Sep 05, 2025 13:30 Post subject: |
|
|
A55555 wrote: | например ты в браузере, а TC свётрнут, то этого окна не будет после окончания копирования при ранее запущенном процессе выключения (только восклицательный звук Windows), даже если активировать окно TC после окончания копирования, чтоб увидеть отсчет (сам процесс невидимо без этой визуализации идет и Windows сообщение Выключение ПК выскочит). |
Прикольный глюк. Как оказалось, он связан с функцией выравнивания окна "WinAlign". Может, Loopback глянет, в чём там может быть проблема, а пока можно выравнивать по центру рабочего стола. Для этого нужно заменить строку WinAlign(h_WinShutdown) на WinAlign(h_WinShutdown, 0, DllCall("GetDesktopWindow")). Я не буду скидывать весь код, просто замените фрагмент на новый:
Code: | h_WinShutdown = DllCall("CreateWindowExW", _
"dword", 0, _
"wstr", "msctls_progress32", _
"wstr", "", _
"dword", 0x10C80000, _
"int", 200, "int", 100, "int", 500, "int", 55, _
"handle", AUTORUN_TCHANDLE, _
"handle", 0, "handle", 0, "ptr", 0, _
"handle")
If h_WinShutdown = 0 Then Return 0
WinAlign(h_WinShutdown, 0, DllCall("GetDesktopWindow")) |
Здесь я также увеличил ширину и высоту окна соответственно на значения "int", 500, "int", 55.
Поменять стиль подсказки и время ее отображения также можно по вкусу. Вот например (снова замените всю функцию CopyMonitor):
Code: | Func CopyMonitor()
Static hCopyWnd = 0
# Если монитор уже запущен - остановить
If g_CopyMonitor Then
g_CopyMonitor = false
Return
EndIf
hCopyWnd = WinFind(0, "TDLG2FILEACTIONMIN")
If hCopyWnd = 0 Then
ShowHint("Копирование не запущено", 0, 0, 1000, 1)
WinAlign(LAST_HINT_WINDOW)
Return
EndIf
g_CopyMonitor = true
# установка значения прозрачности
WinSetStyle(0x80000, 3)
DllCall("SetLayeredWindowAttributes", "hwnd", AUTORUN_TCHANDLE, _
"ptr", 0, "byte", 192, "dword", 2)
#параметры подсказки
SetHintParam("ShowHint", "Font", 15, "Arial")
SetHintParam("ShowHint", "BackColor", 0xFF0000)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Монитор выключения запущен, ожидание завершения копирования", 0, 0, 1000, 1)
SetHintParam("ShowHint", "Reload")
WinAlign(LAST_HINT_WINDOW)
While hCopyWnd <> 0
For i = 1 To 10
If Not g_CopyMonitor Then Break
Sleep(100)
Next
If Not g_CopyMonitor Then Break
hCopyWnd = WinFind(0, "TDLG2FILEACTIONMIN")
Wend
If g_CopyMonitor Then
g_CopyMonitor = false
WinShutdown()
Else
SetHintParam("ShowHint", "Font", 15, "Arial")
SetHintParam("ShowHint", "BackColor", 0xFF0000)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Монитор выключения остановлен", 0, 0, 1000, 1)
SetHintParam("ShowHint", "Reload")
WinAlign(LAST_HINT_WINDOW)
EndIf
WinSetStyle(0x80000, 9)
DllCall("SetLayeredWindowAttributes", "hwnd", AUTORUN_TCHANDLE, _
"ptr", 0, "byte", 255, "dword", 2)
EndFunc |
Теперь действительно смотрится лучше. А вообще могу сказать, пока мне выдалась возможность "погонять" немножко, вещь-то получилась прикольная, но ее нужно доделывать и больше тестировать. Например, сейчас не предусмотрено, что делать, если нажать кнопку "В фоне", а ведь наверняка найдутся и прочие мелкие нюансы. |
|