c# - 通过 AutomationElement 设置 DateTimePicker 元素

标签 c# .net datetimepicker ui-automation automationelement

我希望能够通过 AutomationElementDateTimePicker 元素设置为特定时间。它将时间存储为“hh:mm:ss tt”(即 10:45:56 PM)。

我得到的元素是这样的:

ValuePattern p = AECollection[index].GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;

我相信我有两个选择:

p.SetValue("上午 9:41:22");

p.Current.Value = "9:41:22 AM";

但是,第一个选项根本行不通(我在某处读到这在 .NET 2.0 中可能会被破坏?尽管我使用的是 .NET 3.0)。第二个选项告诉我该元素是只读的,我该如何更改状态使其不是只读的?或者更简单地说,我怎样才能改变时间:(?

最佳答案

您可以获取 native 窗口句柄并发送DTM_SETSYSTEMTIME 消息来为DateTimePicker 控件设置选定日期。

这样做,我想你已经找到了元素,那么你可以使用下面的代码:

var date =  new DateTime(1998, 1, 1);
DateTimePickerHelper.SetDate((IntPtr)element.Current.NativeWindowHandle, date);

DateTimePickerHelper

这是DateTimePickerHelper 的源代码。该类有一个公共(public)静态 SetDate 方法,允许您为日期时间选择器控件设置日期:

using System;
using System.Runtime.InteropServices;
public class DateTimePickerHelper {
    const int GDT_VALID = 0;
    const int DTM_SETSYSTEMTIME = (0x1000 + 2);
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    struct SYSTEMTIME {
        public short wYear;
        public short wMonth;
        public short wDayOfWeek;
        public short wDay;
        public short wHour;
        public short wMinute;
        public short wSecond;
        public short wMilliseconds;
    }
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr SendMessage(IntPtr hWnd, int msg, 
        int wParam, SYSTEMTIME lParam);
    public static void SetDate(IntPtr handle, DateTime date) {
        var value = new SYSTEMTIME() {
            wYear = (short)date.Year,
            wMonth = (short)date.Month,
            wDayOfWeek = (short)date.DayOfWeek,
            wDay = (short)date.Day,
            wHour = (short)date.Hour,
            wMinute = (short)date.Minute,
            wSecond = (short)date.Second,
            wMilliseconds = 0
        };
        SendMessage(handle, DTM_SETSYSTEMTIME, 0, value);
    }
}

关于c# - 通过 AutomationElement 设置 DateTimePicker 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331667/

相关文章:

c# - 在 LINQ 中过滤冗余数据

c# - 可标记计数器

c# - vsts new repo 有许多平台/语言的 gitignore 选项,但 .net/c# 没有

c# - c# 是否有内部类额外开销?

javascript - 如何通过双击关闭 DateTimePicker

datetimepicker - BootsFaces类型错误: minDate() Could not parse date parameter

c# - CS0120 : An object reference is required for the nonstatic field, 方法或属性 'foo'

c# - Xamarin Forms - 使用自定义 map 渲染器在 map 上创建多个多边形

javascript - 计算 Ajax 请求中返回的对象数量

angularjs - Angular-bootstrap-datetimepicker 在选择日期时不会自动关闭