According to this link you can use a macro function to achieve this.
DTM_SETSYSTEMTIME message (Windows)
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Can you use macro functions in AutoHotkey via DllCall? If so, in which dll is the DateTime_SetSystemtime macro stored? Thanks.
Code: Select all
;warning: dealing with the memory of an external process, can potentially cause it to crash
q:: ;DTP control - set date/time
ControlGet, hCtl, Hwnd,, SysDateTimePick321, A
JEE_DTPSetDate(hCtl, 20060504030201)
return
;==================================================
JEE_DTPSetDate(hCtl, vDate)
{
vLen := StrLen(vDate)
if !RegExMatch(vLen, "^(4|6|8|10|12|14|17)$")
return
vScriptPID := DllCall("kernel32\GetCurrentProcessId", UInt)
WinGet, vPID, PID, % "ahk_id " hCtl
if (vPID = vScriptPID)
vIsLocal := 1, vPIs64 := (A_PtrSize=8)
if (vLen < 17)
vDate .= SubStr(19990101000000000, vLen+1) ;17 characters: Y M D H M S M
vDate := RegExReplace(vDate, "(....)(..)(..)(..)(..)(..)(...)", "$1-$2-0-$3-$4-$5-$6-$7")
vSize := 16
VarSetCapacity(SYSTEMTIME, 16, 0)
Loop, Parse, vDate, % "-"
NumPut(A_LoopField, &SYSTEMTIME, (A_Index*2)-2, "UShort")
;GDT_VALID := 0
if vIsLocal
SendMessage, 0x1002, 0, % &SYSTEMTIME,, % "ahk_id " hCtl ;DTM_SETSYSTEMTIME := 0x1002
else
{
if !hProc := JEE_DCOpenProcess(0x438, 0, vPID)
return
if !pBuf := JEE_DCVirtualAllocEx(hProc, 0, vSize, 0x3000, 0x4)
return
JEE_DCWriteProcessMemory(hProc, pBuf, &SYSTEMTIME, vSize, 0)
SendMessage, 0x1002, 0, % pBuf,, % "ahk_id " hCtl ;DTM_SETSYSTEMTIME := 0x1002
JEE_DCVirtualFreeEx(hProc, pBuf, 0, 0x8000)
JEE_DCCloseHandle(hProc)
}
}
;==================================================
JEE_DCOpenProcess(vAccess, hInherit, vPID)
{
return DllCall("kernel32\OpenProcess", UInt,vAccess, Int,hInherit, UInt,vPID, Ptr)
}
JEE_DCVirtualAllocEx(hProc, vAddress, vSize, vAllocType, vProtect)
{
return DllCall("kernel32\VirtualAllocEx", Ptr,hProc, Ptr,vAddress, UPtr,vSize, UInt,vAllocType, UInt,vProtect, Ptr)
}
JEE_DCWriteProcessMemory(hProc, vBAddress, pBuf, vSize, vWritten)
{
return DllCall("kernel32\WriteProcessMemory", Ptr,hProc, Ptr,vBAddress, Ptr,pBuf, UPtr,vSize, Ptr,vWritten)
}
JEE_DCReadProcessMemory(hProc, vBAddress, pBuf, vSize, vRead)
{
return DllCall("kernel32\ReadProcessMemory", Ptr,hProc, Ptr,vBAddress, Ptr,pBuf, UPtr,vSize, Ptr,vRead)
}
JEE_DCVirtualFreeEx(hProc, vAddress, vSize, vFreeType)
{
return DllCall("kernel32\VirtualFreeEx", Ptr,hProc, Ptr,vAddress, UPtr,vSize, UInt,vFreeType)
}
JEE_DCCloseHandle(hObject) ;e.g. hProc
{
return DllCall("kernel32\CloseHandle", Ptr,hObject)
}
;==================================================