2012-02-17 157 views
3

我希望能夠通過AutomationElementDateTimePicker元素設置爲特定時間。它將時間存儲爲「hh:mm:ss tt」(即10:45:56 PM)。通過AutomationElement設置DateTimePicker元素

我得到的元素,例如:

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

我相信我有兩個選擇:

p.SetValue("9:41:22 AM");

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

Howev呃,第一個選項根本不起作用(我在某處讀到這可能會在.NET 2.0中被破壞,但我使用的是.NET 3.0)。第二個選項告訴我該元素是隻讀的,我怎樣才能改變狀態,使它不是隻讀的?或者更簡單地說,我怎麼能更改時間:(?

回答

0

你可以得到本地窗口句柄,併發送DTM_SETSYSTEMTIME消息設置所選日期DateTimePicker控制。

要做到這一點,我想你已經找到元素,那麼你可以使用follwing代碼:

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

DateTimePickerHelper

下面是DateTimePickerHelper源代碼。該類有一個公共靜態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); 
    } 
} 
相關問題