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: Mon Oct 20, 2025 00:12    Post subject: Reply with quote

A55555 wrote:
Да, я сейчас спокойно пользуюсь 32-битной версией, разницы пока не встречал, всё нормально.

В wiki есть статья, которая хорошо описывает разницу между ТСх64 и ТСх32, на случай если будет интересно:
https://tckb.ru/wiki/total_commander_x64/
Очень хорошая статья. Всё просто по полочкам.

Loopback
Вопрос немного внезапный: а почему идентификаторы пунктов меню не перехватываются в WM_SYSCOMMAND? Сами пункты нормально создаются и отображаюся, но вот с их обработкой ничего не получается:
Code:
hMenu = DllCall("GetSystemMenu", "handle", AUTORUN_TCHANDLE, "bool", 0, "handle")
If hMenu > 0 Then
   DllCall("AppendMenuW", "handle", hMenu, "uint", 2048, "uint_ptr", 0, "ptr", 0)
   DllCall("AppendMenuW", "handle", hMenu, "uint", 0, "uint_ptr", 1000, "wstr", "About")
   DllCall("AppendMenuW", "handle", hMenu, "uint", 1, "uint_ptr", 1001, "wstr", "Settings...")
EndIf

# WM_SYSCOMMAND
SetMessageAction /P /DM 0x0112 "SysMenuCallback"    

Func SysMenuCallback(hWnd, uMsg, wParam, lParam)
    OutputDebugString(wParam)
    If wParam = 1000 Then
       MsgBox("About")
    ElseIf wParam = 1001 Then
       MsgBox("Settings")
    EndIf
EndFunc

Можно накидать интересных пунктов меню, включая логотип, который прикольно кстати смотрится:
Code:
hBitFile = DllCall("LoadImageW", "handle", 0, _
                                 "wstr", "d:\Temp\Images\logo.bmp", _
                                 "uint", 0, "int", 0, "int", 0, _
                                 "uint", 0x00000010, "handle")
hMenu = DllCall("GetSystemMenu", "handle", AUTORUN_TCHANDLE, "bool", 0, "handle")
If hMenu > 0 Then
   DllCall("AppendMenuW", "handle", hMenu, "uint", 2048, "uint_ptr", 0, "ptr", 0)
   DllCall("AppendMenuW", "handle", hMenu, "uint", 0, "uint_ptr", 1000, "wstr", "About")
   DllCall("AppendMenuW", "handle", hMenu, "uint", 4, "uint_ptr", 1001, "ptr", hBitFile)
   DllCall("AppendMenuW", "handle", hMenu, "uint", 1, "uint_ptr", 1002, "wstr", "Settings...")
EndIf
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group