0

我想用 AHK 脚本在我的日历中选择一个日期。为此,我使用了函数 sendMessage,因为我想从外部应用程序中选择一个日期。我想使用 Microsoft 文档中的 SETCURSEL_MCM 消息。我怎样才能从这条消息中找到相应的号码?Bc 它不在此页面上 https://docs.microsoft.com/en-us/windows/win32/controls/mcm-setcursel SendMessage, myCorrespondingNumberAsParam???, 0, lparam(which is my date),control, wintitle

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

我试图将发送消息放在一个循环中,当它执行消息时停止循环,但它太长了,它会向程序发送错误。

如果有人可以帮助我,

谢谢,

吉尔斯

4

1 回答 1

0

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

然后您将在该标头中看到该消息的定义如下:

#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

于 2021-11-24T23:41:07.060 回答