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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2017, 00:33   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вы думаете из плюсов он у вас проснется? функции вы будете применять ровно те же.
Мне кто-то как то говорил "писать под WinApi на байт-коде (шарп, ява и подобные) - гиблое дело ...
Во всяком случае попробовать стоит ...
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.02.2017, 01:34   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

На возможность разбудить компьютер может повлиять тот факт, что на биосе установлен пароль ? Вопрос конечно из ряда вон выходящие хотя бы потому, что при ручном пробуждении биос-пароль не запрашивается; но тем не менее - мало ли ... Как страшно жить
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.02.2017, 02:50   #15
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
создайте DLL в С++, ее и вызывайте
нинавижу длл ... Постоянно тягать за собой какие то данные, от которых ты зависим ... Постоянно проверять их наличие ...
Я конечно утрирую, ибо в любом случае, так или иначе я изначально работаю на системных библиотеках ... Самый простой способ в моём случае - все нужные мне данные таскать в ресурсах, и восстанавливать по первому скрипу. А если данные динамические (какие либо файлы каких либо параметров чего либо) - то уже от постоянных проверок не отвертеться ... Не люблю, когда программа падает из-за банального отсутствия какой то dll ... И да, я знаю, что в таком случае "мне в Net делать нечего"; повторяю - я утрирую.
Подпись ? Не, не слышал ...

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

Попробовал, безрезультатно. Пепел Феникса прав, а я изначально не спорил, попробовать хотелось .
Получился гораздо более компактный и "опрятный" код ...
Код:
#include <Windows.h>
#include <iostream>

int main()
{
	int ticks;
	std::cin>>ticks;
	HANDLE hTimer=CreateWaitableTimer(NULL,TRUE,NULL);
	if (hTimer==NULL)
		return -1;
	else;
	LARGE_INTEGER liDueTime;
	liDueTime.QuadPart=ticks;
	BOOL output=SetWaitableTimer(hTimer,&liDueTime,0,NULL,NULL,TRUE);
	if (!output)
		return -1;
	else;
	WaitForSingleObject(hTimer,INFINITE);
	CloseHandle(hTimer);
	return 0;
}
Но тогда собсна вАпрос: должен ли этот таймер выводить компьютер из спящего режима ?
Если да, то что может ему мешать это делать ?
В биосе включил функцию "Stay on lid open" и отключил "Power energy saving".
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 14.02.2017 в 05:56.
OmegaBerkut вне форума Ответить с цитированием
Старый 14.02.2017, 07:38   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
нинавижу длл ... Постоянно тягать за собой какие то данные, от которых ты зависим ... Постоянно проверять их наличие ...
тогда ваш потолок это мини утилиты и вечный копипаст кода.
нет ничего страшного в зависимостях(на нормальный софт посмотрите)

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Получился гораздо более компактный и "опрятный" код ...
потому что декларации все спрятаны от вас.

в ссылке что я вам кидал кстати расписано почему может не работать, ссылка далее правда умерла уже, но нагуглить можно было.
а код абсолютно рабочий, эта функция разрешена должна быть.
Код:
using System;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
using System.ComponentModel;
using System.Threading;

namespace WakeUPTimer
{
    public class Program
    {
        public static void Main()
        {
            var timer = new WakeUP();
            timer.Woken += Timer_Woken;
            timer.SetWakeUpTime(DateTime.Now.AddMinutes(2));
            Console.WriteLine("Go to sleep");
            Thread.Sleep(TimeSpan.FromMinutes(5));
            Console.WriteLine(nameof(Thread.Sleep));
            Console.ReadLine();
        }

        private static void Timer_Woken(object sender, EventArgs e)
        {
            Console.WriteLine(nameof(Timer_Woken));
        }
    }

    class WakeUP
    {
        [DllImport("kernel32.dll")]
        public static extern SafeWaitHandle CreateWaitableTimer(IntPtr lpTimerAttributes,
                                                                  bool bManualReset,
                                                                string lpTimerName);

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetWaitableTimer(SafeWaitHandle hTimer,
                                                    [In] ref long pDueTime,
                                                              int lPeriod,
                                                           IntPtr pfnCompletionRoutine,
                                                           IntPtr lpArgToCompletionRoutine,
                                                             bool fResume);

        public event EventHandler Woken;

        private BackgroundWorker bgWorker = new BackgroundWorker();

        public WakeUP()
        {
            bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
            bgWorker.RunWorkerCompleted +=
              new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
        }

        public void SetWakeUpTime(DateTime time)
        {
            bgWorker.RunWorkerAsync(time.ToFileTime());
        }

        void bgWorker_RunWorkerCompleted(object sender,
                      RunWorkerCompletedEventArgs e)
        {
            if (Woken != null)
            {
                Woken(this, new EventArgs());
            }
        }

        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            long waketime = (long)e.Argument;

            using (SafeWaitHandle handle =
                      CreateWaitableTimer(IntPtr.Zero, true,
                      this.GetType().Assembly.GetName().Name.ToString() + "Timer"))
            {
                if (SetWaitableTimer(handle, ref waketime, 0,
                                       IntPtr.Zero, IntPtr.Zero, true))
                {
                    using (EventWaitHandle wh = new EventWaitHandle(false,
                                                           EventResetMode.AutoReset))
                    {
                        wh.SafeWaitHandle = handle;
                        wh.WaitOne();
                    }
                }
                else
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
            }
        }

    }
}
пробуждение из гибернации иная тема, если что.
единственное НО, в моем случае комп вернулся на экран блокировки, но сессия пользователя все еще активна.
Изображения
Тип файла: png 1.png (14.6 Кб, 75 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.02.2017, 08:11   #18
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
потому что декларации все спрятаны от вас
От меня много чё спрятано, как и от вас. Можно асм вспомнить; или бинарь; или вообще сигналы (аля схемотехника).
Но на шарпе под API код выглядит более неуклюже, чем на плюсах, ибо шарп не рассчитан на разработку под него (API), о чём я говорил "гиблое дело".

За пикчу спасибо, не знал и забыл про наличие этого пункта.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.02.2017, 08:32   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Но на шарпе под API код выглядит более неуклюже, чем на плюсах, ибо шарп не рассчитан на разработку под него (API), о чём я говорил "гиблое дело".
вы "рассчитан" считаете по тому что в коробке есть декларации?
напишите на С++ через LoadLIbrary+GetProcAddress, и сравните.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.02.2017, 08:46   #20
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы "рассчитан" считаете по тому что в коробке есть декларации?
"рассчитан" я считаю по наличию "прямого доступа" к функциям, без ручного ввода деклараций. Если эти декларации уже прописаны в том же windows.h - слава инклюду. Чего в шарпе нет.
В сравнении с плюсами, у шарпа нет заранее подготовленных деклараций как вы сказали "из коробки", и шарп уже рассчитан на более "словесно"-ориентированное написание кода в целом.
В частности по API, для того, что бы на шарпе писать под него - нужно мутить воду, и в каком то смысле это даже хорошо (вандалам тяжелее добраться будет);
в плюсах это уже подготовлено.
Подпись ? Не, не слышал ...
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