Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2017, 10:12   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию WaitableTimer, вывод компьютера из спячки

Здравствуйте. Недавно мне посоветовали WaitableTimer для вывода компьютера из сна.
Сегодня дотянулись руки, решил глянуть, и реализовать. Полез в интернет за информацией. Нашёл два исходника для шарпа:
Первый, второй.
Проверил каждый как в источнике - компьютер из сна не выходит.
Как я понимаю, гвоздь сегодняшней программы - последний параметр функции SetWaiableTimer - должен быть true, как я правильно понял ?

На основе этих двух исходников соорудил свой под собственные нужды.
Код:
using System;
using System.Threading;
using System.Runtime.InteropServices;

namespace Waitable
{
	public class WaitableTimer
	{
		[DllImport("kernel32.dll")]
		private static extern IntPtr CreateWaitableTimer(
			IntPtr lpTimerAttributes,
			bool bManualReset,
			string lpTimerName);
		[DllImport("kernel32.dll")]
		private static extern bool SetWaitableTimer(
			IntPtr hTimer,
			[In] ref long pDueTime,
			int lPeriod,
			IntPtr pfnCompletionRoutine,
			IntPtr lpArgToCompletionRoutine,
			bool fResume);
		[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
		private static extern Int32 WaitForSingleObject(IntPtr handle, uint milliseconds);

		private static IntPtr handle;
		private static Thread mainwait; // давайте жить дружно
		private static void SetWaitForWakeUpTime(object input)
		{
			long duetime=(long)input;
			input=null;
			handle=CreateWaitableTimer(IntPtr.Zero,true,"LOL_Bot_WaitableTimer");
			SetWaitableTimer(handle,ref duetime,0,IntPtr.Zero,IntPtr.Zero,true);
			uint INFINITE = 0xFFFFFFFF;
			int ret=WaitForSingleObject(handle,INFINITE);
			mainwait=null;
		}
		public static void SetWakeUp(TimeSpan delay)
		{
			mainwait=new Thread(WaitableTimer.SetWaitForWakeUpTime);
			mainwait.Start(-delay.Ticks);
		}
	}
}
Из-вне вызывается оч просто: WaitableTimer.SetWakeUp(new TimeSpan(0,0,5,0,0));
Перевод в такты и отрицательная задержка делаются "на месте". Абсолютное время (положительная задержка) ещё не пробовал.

Что тут не так ? Как разбудить компьютер ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 13.02.2017 в 11:51.
OmegaBerkut вне форума Ответить с цитированием
Старый 13.02.2017, 11:37   #2
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Попробовал абсолютное время. Так же не работает.
Вы не подумайте, сам таймер то работает, но он не делает "обещанное" - вывести компьютер из сна.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 13.02.2017, 11:47   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почитайте это
http://stackoverflow.com/questions/1...m-a-wake-timer
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.02.2017, 12:53   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Пепел Феникса, прочёл, честно скопировал исходник, подправил под свои нужды, вырезал ненужное (тыщь) и не работает - не выводит из сна ... В принципе, я не удивлён, так как между предыдущим и новым исходником разница только в Thread/BackgroundWorker.

Может дело в компе ... У меня в биосе настроено, что бы при открытии крышки ноут не выгружался из спячки ...
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 13.02.2017 в 14:37.
OmegaBerkut вне форума Ответить с цитированием
Старый 13.02.2017, 13:03   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

OmegaBerkut, сообщения(MSI) слать не пробовал монитору?

Код:
;включить монитор
-------------------
SendMessage, HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1

;другие параметры
"""""""""""""""""
 1 - сон.
 2 - выключить.
–1 - включить.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 13.02.2017, 13:06   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы определитесь уже, у вас сон или гибернация.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.02.2017, 13:41   #7
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы определитесь уже, у вас сон или гибернация
Сон. Он же "Ждущий" в XP.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 13.02.2017, 13:43   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

R71MT, а откуда их слать то нужно ?
У меня компьютер в режиме сна
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 13.02.2017, 13:56   #9
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Может дело в компе ... У меня в биосе настроено, что бы при открытии крышки ноут не выгружался из спячки ...
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Вы не подумайте, сам таймер то работает, но он не делает "обещанное" - вывести компьютер из сна.
..тогда начни с биоса, а дальше видно будет.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 14.02.2017, 00:17   #10
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

В общем, компьютер не просыпается ни в одном из вариантов. Чё делать - я не знаю. Может отдельно написать апплет на плюсах, и паровозиком за теми программами, где нужен самовывод ...
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
управление Arduino Mega, вывод на монитор компьютера аналоговых сигналов с портов А0-А5, и управлением 10 внешними реле rz1zr Фриланс 3 22.02.2016 17:10
Изменить МАС адрес компьютера и опредилить прошлый МАС адрес компьютера Эвелинка Помощь студентам 11 12.05.2015 15:58
Вывод списка символов справа налево 5 раз подряд и исключить вывод цифр Gareek Помощь студентам 2 23.12.2011 21:41
Вывод конфигурации компьютера и управление клавиатурой, компилятор gcc Enchance Общие вопросы C/C++ 0 04.11.2010 21:26
ID компьютера Demien Общие вопросы Delphi 10 06.11.2009 18:01