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
。
我想 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
。