Как установить дату для DatePicker Control во внешней системе, используя VBA - PullRequest
0 голосов
/ 11 января 2019

Я хотел бы установить конкретное значение даты для элемента управления 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
...