Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Fri Sep 05, 2025 13:30    Post subject: Reply with quote

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

Теперь действительно смотрится лучше. А вообще могу сказать, пока мне выдалась возможность "погонять" немножко, вещь-то получилась прикольная, но ее нужно доделывать и больше тестировать. Например, сейчас не предусмотрено, что делать, если нажать кнопку "В фоне", а ведь наверняка найдутся и прочие мелкие нюансы.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group