И так сегодня мы напишем приложение которое будет выводить компьютер из спящего режима или гибернации, и запускать какое то приложение. Зачем это надо? Наверняка многие хотели чтоб утром нас будил любимый нам компьютер и проигрывал наши любимые композиции DubStep_a =) или выполнял какое то другое приложения.
Приступим к написанию.
1. Запускаем студию
2. Создаем консольный проект
3. Добавим в проект вот этот неймспейс using System.Runtime.InteropServices
4. Пишем следующий код
Пример консольный и очень "сырой", вы можете добавить красивую GUI и еще много разных фичей и у вас получится полноценный программный продукт (как это в ближайшем времени сделаю Я).
P.S. Если у вас не будет работать "пробуждение" кампа тогда проверьте включен ли в настройках электропитания "Таймер пробуждения".
Удачи в ПРОграммировании!
Скачать проект.
Приступим к написанию.
1. Запускаем студию
2. Создаем консольный проект
3. Добавим в проект вот этот неймспейс using System.Runtime.InteropServices
4. Пишем следующий код
[DllImport("kernel32.dll")]вот в принципе и все, самое главное здесь это три API функции которые ми объявили на початку программы (в них вам нет необходимости вникать, ну и я вам об этом не напишу =)), далее создали переменную типа long (диапазон от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807) - такое большой диапазон потому что время задается для таймера в наносекундах, соответственно -600000000 ровно 1 минуте. Далее создали таймер, ожидаем истечения времени и запускаем приложение (в примере калькулятор).
public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes,
bool bManualReset, string lpTimerName);
[DllImport("kernel32.dll")]
public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long
pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr
lpArgToCompletionRoutine, bool fResume);
[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
public static extern Int32 WaitForSingleObject(IntPtr handle, uint
milliseconds);
static void Main(string[] args)
{
SetWaitForWakeUpTime(); // вызов метода в главной программе
}
static IntPtr handle;
static void SetWaitForWakeUpTime()
{
long duetime = -900000000; // задаем время в наносекундах
Console.WriteLine("{0:x}", duetime);
// Создаем таймер
handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer");
SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true);
uint INFINITE = 0xFFFFFFFF;
int ret = WaitForSingleObject(handle, INFINITE); // Ожидание истечение таймера
System.Diagnostics.Process.Start("calc.exe"); // Вызов приложения
}
Пример консольный и очень "сырой", вы можете добавить красивую GUI и еще много разных фичей и у вас получится полноценный программный продукт (как это в ближайшем времени сделаю Я).
P.S. Если у вас не будет работать "пробуждение" кампа тогда проверьте включен ли в настройках электропитания "Таймер пробуждения".
Удачи в ПРОграммировании!
Скачать проект.
И так сегодня мы напишем приложение которое будет выводить компьютер из спящего режима или гибернации, и запускать какое то приложение. Зачем это надо? Наверняка многие хотели чтоб утром нас будил любимый нам компьютер и проигрывал наши любимые композиции DubStep_a =) или выполнял какое то другое приложения.
Приступим к написанию.
1. Запускаем студию
2. Создаем консольный проект
3. Добавим в проект вот этот неймспейс using System.Runtime.InteropServices
4. Пишем следующий код
Пример консольный и очень "сырой", вы можете добавить красивую GUI и еще много разных фичей и у вас получится полноценный программный продукт (как это в ближайшем времени сделаю Я).
P.S. Если у вас не будет работать "пробуждение" кампа тогда проверьте включен ли в настройках электропитания "Таймер пробуждения".
Удачи в ПРОграммировании!
Скачать проект.
Приступим к написанию.
1. Запускаем студию
2. Создаем консольный проект
3. Добавим в проект вот этот неймспейс using System.Runtime.InteropServices
4. Пишем следующий код
[DllImport("kernel32.dll")]вот в принципе и все, самое главное здесь это три API функции которые ми объявили на початку программы (в них вам нет необходимости вникать, ну и я вам об этом не напишу =)), далее создали переменную типа long (диапазон от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807) - такое большой диапазон потому что время задается для таймера в наносекундах, соответственно -600000000 ровно 1 минуте. Далее создали таймер, ожидаем истечения времени и запускаем приложение (в примере калькулятор).
public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes,
bool bManualReset, string lpTimerName);
[DllImport("kernel32.dll")]
public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long
pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr
lpArgToCompletionRoutine, bool fResume);
[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
public static extern Int32 WaitForSingleObject(IntPtr handle, uint
milliseconds);
static void Main(string[] args)
{
SetWaitForWakeUpTime(); // вызов метода в главной программе
}
static IntPtr handle;
static void SetWaitForWakeUpTime()
{
long duetime = -900000000; // задаем время в наносекундах
Console.WriteLine("{0:x}", duetime);
// Создаем таймер
handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer");
SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true);
uint INFINITE = 0xFFFFFFFF;
int ret = WaitForSingleObject(handle, INFINITE); // Ожидание истечение таймера
System.Diagnostics.Process.Start("calc.exe"); // Вызов приложения
}
Пример консольный и очень "сырой", вы можете добавить красивую GUI и еще много разных фичей и у вас получится полноценный программный продукт (как это в ближайшем времени сделаю Я).
P.S. Если у вас не будет работать "пробуждение" кампа тогда проверьте включен ли в настройках электропитания "Таймер пробуждения".
Удачи в ПРОграммировании!
Скачать проект.
0 коммент.:
Отправить комментарий