2012-02-17 48 views
3

DateTimePicker要素をAutomationElementで特定の時間に設定したいと考えています。時間は「hh:mm:ss tt」(つまり10:45:56 PM)となります。AutomationElementを使用してDateTimePicker要素を設定する

私のような要素を取得:

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

または

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

Howev:

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

私は二つの選択肢を持っていると信じてい最初のオプションはうまくいきません(.NET 2.0では壊れているかもしれませんが、私は.NET 3.0を使っています)。 2番目のオプションは、要素が読み取り専用であることを示していますが、読み取り専用ではないように状態を変更するにはどうすればよいですか?以上簡単に、どのように私は時間を変更することができます:(?

答えて

0

あなたはネイティブウィンドウハンドルを取得し、DateTimePicker制御のために選択した日付を設定するDTM_SETSYSTEMTIMEメッセージを送ることができます。

そうするために、私はあなたが発見したと仮定します要素、そしてあなたが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); 
    } 
} 
関連する問題