2012-02-17 4 views
3

DateTimePicker 요소를 AutomationElement을 통해 특정 시간으로 설정할 수 있기를 원합니다. 시간은 "hh : mm : ss tt"(즉, 오후 10:45:56)로 저장됩니다.AutomationElement를 통해 DateTimePicker 요소를 설정하십시오.

I과 같은 요소를 얻을 :

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을 사용하고 있습니다. 두 번째 옵션은 요소가 읽기 전용임을 나타냅니다. 어떻게 상태를 변경하여 읽기 전용이 될 수 있습니까? 또는 더 간단하게, 내가 시간 :(?

답변

0

을 변경하는 방법 당신은 기본 창 핸들을 얻을 DateTimePicker 제어를 위해 선택한 날짜를 설정 DTM_SETSYSTEMTIME 메시지를 보낼 수 있습니다.

이 이렇게하려면, 당신이 발견 한 가정 요소는 다음 follwing을 코드를 사용할 수 있습니다

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

DateTimePickerHelper 여기

것은 DateTimePickerHelper의 소스 코드 . 이 클래스에는 날짜 선택 도구 컨트롤의 날짜를 설정할 수있는 public static 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); 
    } 
}