2017-01-26 7 views
0

Я пытаюсь установить время работы устройства Windows Mobile с помощью coredll.dll. Я создал функции, которые будут устанавливать время, но я смущен тем, как я должен вызвать функцию на кнопке, чтобы установить время. Ниже объект и метод, чтобы установить время, но не знаю, как назвать его кнопкой мышиВремя установки на устройстве Windows CE при нажатии кнопки

// Это будет метод вам необходимо установить системное время

[DllImport("coredll.dll", SetLastError=true)] 
static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime); 

// Это объект, который вы должны заполнить, прежде чем использовать SetLocalTime

public struct SYSTEMTIME 
{ 
    public short year; 
    public short month; 
    public short dayOfWeek; 
    public short day; 
    public short hour; 
    public short minute; 
    public short second; 
    public short milliseconds; 
} 

// И это последний метод для выполнения

public static void SetSystemDateTime(DateTime dt) 
{ 
    SYSTEMTIME systime; 
    systime.year = (short)dt.Year; 
    systime.month = (short)dt.Month; 
    systime.day = (short)dt.Day; 

    systime.hour = (short)dt.Hour; 
    systime.minute = (short)dt.Minute; 
    systime.second = (short)dt.Second; 
    systime.milliseconds = (short)dt.Millisecond; 
    systime.dayOfWeek = (short)dt.DayOfWeek; 

    SetLocalTime(systime); 
} 

Как мне вызвать эту функцию в методе нажатия кнопки ниже?

private void btnSync_Click(object sender, EventArgs e) 
     { 
//What Should I write here? 
     } 
+0

вы не можете установить его через http. –

ответ

1

Прежде всего, вам необходимо ввести в действие переменную DateTime и заполнить ее теми значениями, которые вы хотите установить.

DateTime localDateTime = DateTime.Now; 

В настоящее время localDateTime содержит локальные значения даты и времени (компьютера). Затем вы можете изменить свойства структуры DateTime в соответствии с вашими потребностями. Например изменить час:

//localDateTime.Hour=13; // cannot be changed, so create a new DateTime 
DateTime newDT = new DateTime(localDateTime.year, localDateTime.month, localDateTime.day, 
    13, localDateTime.minute, localDateTime.second, localDateTime.millisecond); 

Это изменит значение DateTime часа до 13. Измененного LocalDateTime теперь может быть использовано для изменения местного времени внутри обработчика щелчка:

private void btnSync_Click(object sender, EventArgs e) 
    { 
     DateTime localDateTime = DateTime.Now; 
     //localDateTime.Hour=13; // cannot be changed, so create a new DateTime 
     DateTime newDT = new DateTime(localDateTime.year, localDateTime.month, localDateTime.day, 
     13, localDateTime.minute, localDateTime.second, localDateTime.millisecond); 
     SetSystemDateTime(newDT 
     // set datetime a second time to avoid issues when crossing DST intervals 
     System.Threading.Thread.Sleep(500); 
     SetSystemDateTime(newDT); 
    } 

BTW: Я бы назвал SetSystemDateTime лучше как SetLocalDateTime, поскольку он меняет местное время, а не системное время. Местное время рассчитывается по системному времени плюс настройка смещения часового пояса компьютеров (т.е. GMT + 1) плюс текущее время летнего времени (если есть). Также работает другой способ, когда установка локального времени изменяет системное время с учетом смещений.

Примечание: местное время может измениться из-за изменений TZ или DST, но системное время на всех компьютерах (в Гонконге или Нью-Йорке) одинаково. В противном случае ИТ-мир будет не синхронизирован.

Существует также функция API SetSystemTime, что называется по той же схеме:

[DllImport("coredll.dll", SetLastError=true)] 
    static extern bool SetSystemTime(ref SYSTEMTIME lpSystemTime); 

Хотя можно было бы подумать о настройке DayOfWeek при изменении значения часа. Но нет необходимости менять любые другие значения.

Не забудьте вызвать SetSystemTime или SetLocalTime два раза, чтобы избежать проблем при пересечении областей DST. См. Также http://www.hjgode.de/wp/2010/10/08/windows-mobile-setsystemtime-and-dst-einsteins-relativity-theory/

+0

Это не работает? Он не меняет локальное время устройства? – Programmermid

+0

, когда я устанавливаю localDateTime.Hour = 13; он показывает ошибку с указанием System.Date.Time.Hour не может быть назначено только для чтения? Это из-за того, что время устройства не установлено? – Programmermid

+0

см. Изменения в коде, которые создают новое datetime – josef

0

Вы можете перетащить DateTimePicker элемент из панели инструментов VS, а затем поместите его в форму. Он будет называться: dateTimePicker1. Если у вас есть имя btnSync кнопки на форме, чтобы установить дату устройства и время, когда кнопка нажата вы можете сделать так:

private void btnSync_Click(object sender, EventArgs e) 
{ 
    DateTime dtToBeSet = dateTimePicker1.Value; 
    SetSystemDateTime(dtToBeSet); 
} 

Если вы не используете DateTimePicker, вы должны в любом случае, чтобы получить аналогично ваши значения из ваших элементов пользовательского интерфейса, создайте DateTime, а затем установите его.

+0

Я никогда не использовал DateTimePicker. Я довольно новичок в C#. Можете ли вы привести мне пример? Как я могу использовать его в этом конкретном сценарии? – Programmermid

+0

вам просто нужно перетащить элемент DateTimePicker из панели инструментов в VS и поместить его в вашу форму. Затем вы можете перейти к свойствам и задать соответствующее имя, и вы закончили – salvolds

+0

, но это установило время на datetimepicker, а не на устройстве? Я пытаюсь установить время на устройстве. – Programmermid

Смежные вопросы