Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определяем неактивность пользователя 
:(
    Опции темы
Darkmaster
Дата 10.9.2010, 12:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Возникла проблема. Пытаюсь определить, как долго пользователь уже не пользуется системой (мышью, клавиатурой). Для этого использую следующий код:


Код

        public int GetLastInputTime()
        {
            int idleTime = 0;
            LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
            lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
            lastInputInfo.dwTime = 0;

            int envTicks = Environment.TickCount;

            if (GetLastInputInfo(ref lastInputInfo))
            {
                int lastInputTick = (int)lastInputInfo.dwTime;

                idleTime = envTicks - lastInputTick;
            }

            return ((idleTime > 0) ? (idleTime / 1000) : 0);
        }


Еще есть таймер, срабатывающий каждые 100 миллисекунд. Он в свое очередь получает значение этой функции и выводит его в Label.  В интернете во всех статьях по этой теме приводят данный код. Вот только одна беда - хотя я в своих проверках не нажимаю никаких клавиш и не трогаю мышь, тем не менее, у меня всегда получается ситуация как будто система активна. Т.е. функция возвращает значение 0. В чем проблема? Может кто-то уже сталкивался с этим. 
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
CYBERDREAM
Дата 10.9.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Работает на ура, не знаю в чем беда
Код

#region

using System;
using System.Runtime.InteropServices;
using System.Threading;

#endregion

namespace delCON
{
    class Program
    {
        static void Main()
        {
            new Timer(CheckIt, null, 0, 2000);

            Console.ReadLine();
        }

        private static void CheckIt(Object obj)
        {
            int time = GetLastInputTime();
            if (time > 0)
                Console.WriteLine("Не активно: " + time);
            else
                Console.WriteLine("активно=>>>>>>>>>");
        }

        [DllImport("user32.dll")]
        static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        struct LASTINPUTINFO
        {
            public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

            [MarshalAs(UnmanagedType.U4)]
            public uint cbSize;
            [MarshalAs(UnmanagedType.U4)]
            public UInt32 dwTime;
        }

        public static int GetLastInputTime()
        {
            int idleTime = 0;
            LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
            lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
            lastInputInfo.dwTime = 0;

            int envTicks = Environment.TickCount;

            if (GetLastInputInfo(ref lastInputInfo))
            {
                int lastInputTick = (int)lastInputInfo.dwTime;

                idleTime = envTicks - lastInputTick;
            }

            return ((idleTime > 0) ? (idleTime / 1000) : 0);
        }
    }
}



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Darkmaster
Дата 10.9.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Цитата(CYBERDREAM @ 10.9.2010,  12:48)
Работает на ура, не знаю в чем беда

Даже попробовал полностью скопипастить ваш код. Та же история. Все время выдает "активно". Ума не приложу в чем проблема. Перерыл уже массу зарубежных ресурсов - у всех все работает. Странно.
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
CYBERDREAM
Дата 10.9.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



как вариант отруби мышку и клавиатуру после запуска))
Может что то у тебя влияет на активность, не спроста ведь такая нехорошесть


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Darkmaster
Дата 10.9.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Цитата(CYBERDREAM @ 10.9.2010,  13:21)
как вариант отруби мышку и клавиатуру после запуска))
Может что то у тебя влияет на активность, не спроста ведь такая нехорошесть

Да пробовал. И софт отрубал почти весь. Никакого эффекта не принесло...
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
WolfAlone
Дата 10.9.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Не могу сказать точно, но когда-то очень давно я делал нечто подобное ещё на Basic или Delphi. Я конечно могу ошибаться, но должна быть какая-то готовая API-функция, так как заставке же включается опираясь как раз на время не активности пользователя!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
Darkmaster
Дата 10.9.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Цитата(WolfAlone @ 10.9.2010,  14:51)
Не могу сказать точно, но когда-то очень давно я делал нечто подобное ещё на Basic или Delphi. Я конечно могу ошибаться, но должна быть какая-то готовая API-функция, так как заставке же включается опираясь как раз на время не активности пользователя!

Ну, собственно, мной приведенная функция и есть она. Везде о ней в сети пишут. Вот у CyberDream работает - у меня нет. Я еще одному человеку скидывал программку - у него работает. Теперь просто интересно узнать причину - а почему может не работать? 
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
WolfAlone
Дата 10.9.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx - вот тут описана эта функция.

Добавлено через 3 минуты и 41 секунду
Darkmaster, попробуйте, настроить систему на включение заставки через 1мин., включиться ли она? Возможно, в системе что-либо слетела, некая DLL-ка заменилась/повредилась, из за чего функция ведет себя не корректно, вариантов в принципе масса... Ещё возможно по тому, что это Windows...

P.S. Я вот например сейчас сижу под Windows 7 и не могу понять, почему на достаточно мощном компьютере 4х3Ггц + 8Гб ОЗУ тормозит FireFox?  smile 


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.