如何设置其他程序中DatePicker的日期

X615769472 2019-01-12 04:35:18
我想为其他程序中的 DatePicker 控件设置日期,用如下的代码运行不成功,
这一句总是返回 0 ,
a = SendMessage(hControl, DTM_SETSYSTEMTIME, 0, pStrBufferMemory),
我是单开了一个新的Excel进程,然后在里面画了一个Datepicker,这样来测试,
请大家帮我看看,哪里有问题


Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long

Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long




Private Const DTM_SETSYSTEMTIME = &H1002
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Const MEM_COMMIT = &H1000
Private Const PAGE_EXECUTE_READWRITE = &H40
Private Const MEM_RELEASE = &H8000


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


hControl = 1379188 '获得DatePicker句柄

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
...全文
76 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
X615769472 2019-01-12
  • 打赏
  • 举报
回复
引用 1 楼 舉杯邀明月 的回复:
没试过这种操作……

你试试把调用 SendMessage( )最后一个参数,改用 ByVal pStrBufferMemory 看看能成不。

用Excel Form 上面的 DTP,好像测试成功了 。。。
下周用公司的程序上面的 DTP 试试看,
感谢感谢
舉杯邀明月 2019-01-12
  • 打赏
  • 举报
回复
没试过这种操作……

你试试把调用 SendMessage( )最后一个参数,改用 ByVal pStrBufferMemory 看看能成不。
我是控件的作者,请下载此版本

一个非常好用的web日期控件,功能非常优秀,绝对是你一直想要的日期控件.

更人性化,更全面的功能
大部分日期控件都具备功能如:带时间显示,支持周显示,自定义格式,自动纠错,智能纠错,起始日期,操作按钮自定义,快速选择日期,支持多种调用模式等,My97DatePicker在这些方面做得更全面,更人性化,并且速度一流.

强大的日期范围限制功能
支持静态限制,动态限制,脚本自定义限制,以及无效天和无效日期功能,利用这样功能你可以任意定制不能选择的日期,这些日期即使毫无规律,毫无连续性,你也可以通过这些功能的组合使用轻松搞定.

自定义事件和丰富的API库
如果你需要做一些附加的操作,你也不必担心,日期控件自带的自定义事件可以满足你的需求.此外,你还可以在自定义事件调用提供的API库来做更多的运算和扩展,绝对可以通过很少的代码满足你及其个性化的需求.

多语言支持和自定义皮肤支持
通过lang属性,可以为每个日期控件单独配置语言,当然也可以通过WdatePicker.js配置全局的语言,皮肤也是一样,只要配置skin属性即可.这样一个页面可以显示多种语言,多种皮肤的日期控件,更棒的是,他们之间的切换是无刷新的.

跨无限级框架显示和自动选择显示位置
无论你把日期控件放在哪里,你都不需要担心会被外层的iframe所遮挡进而影响客户体验,My97日期控件是可以跨无限级框架显示的,并且当控件处在页面边界是,它会自动选择显示的位置.此外你还可以使用position参数对弹出位置做调整.

演示地址: http://www.my97.net/dp/demo/
下载1: http://www.cnblogs.com/Files/my97/My97DatePicker.rar
下载2: http://my97.net/dp/down/My97DatePicker.rar
技术支持: http://www.my97.net/dp/support.asp
皮肤心: http://www.my97.net/dp/skin.asp

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧