Loopback
|
Posted: Sun Jul 20, 2025 21:34 Post subject: |
|
|
AkulaBig wrote: | Вот правильный код |
Можно и так, но первый тоже был правильный. Похоже, какой-то ещё баг.
AkulaBig wrote: | Можно-ли как-то отследить режим показа колонок? |
Если имеется в виду номер выбранного режима просмотра (краткий, подробный, пользовательский), то можно, делал когда-то, но способ довольно кривой и громоздкий, через открытие контекстного меню с последующим его уничтожением. Сделано на основе идеи из TCFSTools.
 Hidden text
Code: |
Global g_SelMenu = 0
Global g_ModeRes = -1
RegisterCommand 60068 TestGetSel
Func TestGetSel(lParam)
MsgBox(GetSelectedMode(RequestCopyDataInfo("A")))
EndFunc
# register WM_INITMENU
SetMessageAction /P /S 278 "MenuProc"
Func GetSelectedMode(sPanel)
g_ModeRes = -1
g_SelMenu = sPanel = "R" ? 2 : 1
SendCommand(g_SelMenu = 2 ? 170 : 70)
Local nTimeout = 300
While g_ModeRes = -1 And nTimeout > 0
Sleep(10)
nTimeout -= 10
Wend
Return g_ModeRes = -1 ? 0 : g_ModeRes
EndFunc
Func MenuProc(hWnd, nMsg, wParam, lParam)
If g_SelMenu Then
g_ModeRes = FindSelectedAndClear(wParam, g_SelMenu = 2)
g_SelMenu = 0
EndIf
EndFunc
Func FindSelectedAndClear(hMenu, bRight)
Local nCount = DllCall("GetMenuItemCount", "handle", hMenu)
If nCount = 0 Then Return 0
Local Result = 0
Static lpmii = Buffer(AUTORUN_TCARCH = 64 ? 80 : 48)
lpmii.Zero()
lpmii.SetNum(0, "uint", lpmii.size, "uint", 1) # MIIM_STATE
For i = nCount - 1 to 0 Step -1
DllCall("GetMenuItemInfoW", "handle", hMenu, "uint", i, "bool", 1, "ptr", lpmii.ptr)
If lpmii.GetNum(12) = 0x8 Then # MFS_CHECKED
Switch i
Case 0
Result = bRight ? 201 : 101
Case 1
Result = bRight ? 202 : 102
Case 2
Result = bRight ? 200 : 100
Case 3
Result = bRight ? 169 : 69
Else
Result = 70 + i - 7
If Result < 100 Then
If bRight Then Result += 100
Else
Result += (bRight ? 7030 : 6530) - 100
EndIf
EndSwitch
EndIf
DllCall("RemoveMenu", "handle", hMenu, "uint", i, "uint", 0x400)
Next
Return Result
EndFunc
|
yahuu wrote: | Можно ли добавить функцию двойного щелчка в SetHotkeyAction? |
Наверно имелось в виду ControlSetMouseAction? В любом случае, к сожалению, нет. Есть технические сложности. |
|