Самый простой способ вызвать макрос Windows из Autohotkey (или VB)?

StackOverflow https://stackoverflow.com/questions/254715

Вопрос

У меня есть следующий макрос, который я хочу вызвать из скрипта AutoHotkey, чтобы установить определенные даты в моем объекте MonthCal для полужирного начертания.

http://msdn.microsoft.com/ ан-нас / библиотека / bb774722 (VS.85) .aspx

Как бы я поступил об этом?

Обратите внимание, что, возможно, самый простой способ сделать это - написать простой VB-скрипт, который использует макрос, и вызвать его. Но я совершенно не разбираюсь в сценариях VB. Есть мысли?

Это было полезно?

Решение

Я нашел следующий скрипт на форумах AutoHotkey через их замечательный IRC-канал (спасибо _rhys и Titan)

monthNb := 3   ; How many months are displayed. Can be fetched with MCM_GETMONTHRANGE
MCM_FIRST := 0x1000
MCM_SETDAYSTATE := MCM_FIRST + 8

; MCS_DAYSTATE = 1
Gui, Add, MonthCal, +0x1 vMyCalendar
Gui, Add, Button, gBoldify w100, B
Gui Show

Gui +LastFound
guiID := WinExist()
ControlGet mcID, Hwnd, , SysMonthCal321, ahk_id %guiID%

Gosub SetDayState
Return

Boldify:
VarSetCapacity(daysBuffer, 4 * monthNb, 0)
if bOdd
{
   days = 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
}
else
{
   days = 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
}
bOdd := not bOdd
addr := &daysBuffer + 4
Loop Parse, days, `,
{
   o1 := (A_LoopField - 1) / 8
   o2 := Mod(A_LoopField - 1, 8)
   val := *(addr + o1) | (1 << o2)
   DllCall("RtlFillMemory", "UInt", addr + o1, "UInt", 1, "UChar", val)
}
Gosub SetDayState
Return

SetDayState:
   SendMessage MCM_SETDAYSTATE, monthNb, &daysBuffer, , ahk_id %mcID%
Return

GuiClose:
GuiEscape:
ExitApp
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top