Я хотел бы установить конкретное значение даты для элемента управления DatePicker, встроенного во внешнюю системную панель. Благодаря SPy ++ я могу прочитать имя класса этого элемента управления - SysDateTimePick32. Есть ли решение для меня, чтобы выполнить это с помощью Excel VBA?
Я пробовал несколько методов, но все не удалось, например:
API
SendMessage(Handle, WM_SETTEXT, byval 0&, ByVal "2019-01-05")
UI_Automation
valuePattern = (ValuePattern)element.GetCurrentPattern(ValuePattern.Pattern);
valuePattern.SetValue("2019-01-05")
Я попробовал приведенный ниже код, но все равно не работает, эта строка всегда возвращает zeor:
'a = SendMessage (hControl, DTM_SETSYSTEMTIME, 0, pStrBufferMemory)'
Public Const DTM_SETSYSTEMTIME = &H1002
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Const MEM_COMMIT = &H1000
Private Const PAGE_EXECUTE_READWRITE = &H40
Public Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Sub Test()
Dim hms As SYSTEMTIME
Dim hControl As Long
Dim pid As Long
Dim hProcess As Long
Dim pStrBufferMemory As Long
Dim a As Long
Dim b As Long
hms.wYear = 1982
hms.wMonth = 10
hms.wDay = 2
GetWindowThreadProcessId hControl, pid
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
pStrBufferMemory = VirtualAllocEx(hProcess, ByVal 0&, LenB(hms), MEM_COMMIT, PAGE_EXECUTE_READWRITE)
If (WriteProcessMemory(hProcess, pStrBufferMemory, hms, LenB(hms), 0)) Then
a = SendMessage(hControl, DTM_SETSYSTEMTIME, 0, pStrBufferMemory)
End If
VirtualFreeEx hProcess, pStrBufferMemory, 0, MEM_RELEASE
CloseHandle hProcess
End sub