AutoHotKey / SendMessage/ 我应该如何使用 sendmessage 检索特定控件的相应动作编号

AutoHotKey / SendMessage/ How should i retrieve the corresponding number of an action for a specific control with sendmessage

我想 select 使用 AHK 脚本在我的日历中指定一个日期。 为此,我正在使用函数 sendMessage,因为我想 select 来自外部应用程序的日期。 我想使用 Microsoft 文档中的 SETCURSEL_MCM 消息。 我如何从这条消息中找到相应的号码?因为它不在这个页面上 https://docs.microsoft.com/en-us/windows/win32/controls/mcm-setcursel SendMessage, myCorrespondingNumberAsParam???, 0, lparam(这是我的日期),control, wintitle

以此类推,如果我想将文本发送到记事本中的编辑控件,我应该发送 WM_SETTEXT。 ahk doc 明确将该消息的值引用为该控件的 12。但 MCM_SETCURSEL 消息并非如此。

我尝试将发送消息放入循环中,并在执行消息时停止循环,但是它太长了,而且它给程序带来了错误。

如果有人能帮助我,

谢谢,

吉尔斯

您从文档中看到此消息是在 Commctrl.h header.
中定义的 因此,您想从 Windows SDK 文件中打开 header,路径可能是
C:\Program Files (x86)\Windows Kits\Include.0.19041.0\um,但我真的建议只使用一些适当的 Windows搜索引擎(例如Everything,并搜索 header 名称以快速找到它。

然后你会看到 header 消息定义如下:

#define MCM_FIRST           0x1000

// BOOL MonthCal_GetCurSel(HWND hmc, LPSYSTEMTIME pst)
//   returns FALSE if MCS_MULTISELECT
//   returns TRUE and sets *pst to the currently selected date otherwise
#define MCM_GETCURSEL       (MCM_FIRST + 1)
#define MonthCal_GetCurSel(hmc, pst)    (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))

// BOOL MonthCal_SetCurSel(HWND hmc, LPSYSTEMTIME pst)
//   returns FALSE if MCS_MULTISELECT
//   returns TURE and sets the currently selected date to *pst otherwise
#define MCM_SETCURSEL       (MCM_FIRST + 2)
#define MonthCal_SetCurSel(hmc, pst)    (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))

这是你的价值,0x1000 + 2