Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Напомните функцию, которая реагирует на Input.   Найти похожие ветки 

 
Студент_1234   (2012-07-14 16:53) [0]

Т.е. при нажатии клавиши или сдвиге мышки она реагирует.


 
TUser ©   (2012-07-14 16:55) [1]

var c: char;

read (c);

?


 
Студент_1234   (2012-07-14 17:08) [2]

Нет. Она из модуля Windows.


 
TUser ©   (2012-07-14 17:22) [3]

SetWindowHookEx ?


 
Куку   (2012-07-14 17:59) [4]

Функции не "реагируют на Input".


 
Студент_1234   (2012-07-14 20:13) [5]


> TUser ©   (14.07.12 17:22) [3]


Нет.


 
Smile   (2012-07-14 20:51) [6]

"Напомните функцию, которая реагирует на Input."

Включи память :)
Твой ответ "нет" не актуален :)


 
Студент_1234   (2012-07-14 22:18) [7]


>  Smile   (14.07.12 20:51) [6]
>
> "Напомните функцию, которая реагирует на Input."
>
> Включи память :)
> Твой ответ "нет" не актуален :)


Что значит "не актуален"?о
У меня спросили "SetWindowHookEx ?", я ответил: "Нет".
LOL.


 
Студент_1234   (2012-07-15 01:33) [8]

Нашел. GetLastInputInfo.


 
Германн ©   (2012-07-15 02:47) [9]


> Студент_1234   (15.07.12 01:33) [8]
>
> Нашел. GetLastInputInfo.

Ну молодец! Но сам то понимаешь, что нашёл то, что хотел, но не то что спрашивал?
:)


 
Студент_1234   (2012-07-15 03:37) [10]


> Германн ©   (15.07.12 02:47) [9]
>
>
> > Студент_1234   (15.07.12 01:33) [8]
> >
> > Нашел. GetLastInputInfo.
>
> Ну молодец! Но сам то понимаешь, что нашёл то, что хотел,
>  но не то что спрашивал?
> :)
>


GetLastInputInfo - при нажатии клавиши или сдвиге мышки она реагирует.
Что то не так?


 
silver ©   (2012-07-15 03:48) [11]


> Что то не так?

ты встретил "самого бесполезного человека на ДМ"


 
Юрий Зотов ©   (2012-07-15 06:45) [12]


> Студент_1234 (15.07.12 03:37) [10]
> Что то не так?

Конечно. Эта функция ни на что не реагирует. Реагируют драйверы и что-то там делают (сами или через другой софт - неважно). В частности, пишется информация куда-то в в системные потроха - а GetLastInputInfo вызывается нами и всего лишь эту информацию извлекает.

Точно так же GetKeyboardState дает состояние клавиатуры на момент своего вызова, но на нажатия клавиш не реагирует. И многие другие GetЧтоТо дают этот самое ЧтоТо на момент свего вызова, но на изменение этого самого ЧегоТо тоже не реагируют.

Поэтому Германн по сути прав - нашёл то, что хотел, но не то, о чем спрашивал.


 
Студент_1234   (2012-07-15 11:15) [13]


> silver ©   (15.07.12 03:48) [11]
>
>


Да. Вы правы. Я такое по нему уже заметил. :)


> GetLastInputInfo вызывается нами


Ну это понятно что нами вызывается.
Ставим вызов в OnIdle и она будет реагировать на мышь и клавиатуру. (Input)


 
Дмитрий С ©   (2012-07-15 11:22) [14]


> Ставим вызов в OnIdle и она будет реагировать на мышь и
> клавиатуру. (Input)

Жесть:)


 
Юрий Зотов ©   (2012-07-15 11:29) [15]


> Студент_1234   (15.07.12 11:15) [13]
> Ставим вызов в OnIdle и она будет реагировать на мышь и
> клавиатуру. (Input)

Не будет.


 
Студент_1234   (2012-07-15 11:32) [16]


> Дмитрий С ©   (15.07.12 11:22) [14]
>
>
> > Ставим вызов в OnIdle и она будет реагировать на мышь
> и
> > клавиатуру. (Input)
>
> Жесть:)


Это для примера.


> Юрий Зотов ©   (15.07.12 11:29) [15]
>
>
> > Студент_1234   (15.07.12 11:15) [13]
> > Ставим вызов в OnIdle и она будет реагировать на мышь
> и
> > клавиатуру. (Input)
>
> Не будет.


Если выводить время "простоя". "Простой" будет зависеть от управления.


 
Юрий Зотов ©   (2012-07-15 11:51) [17]


> Студент_1234   (15.07.12 11:32) [16]

На мышь и клавиатуру (точнее, на переход в статус ожидания ввода) будет реагировать Application, а не GetLastInputInfo. А GetLastInputInfo всего лишь позволяет узнать время ожидания. То же самое можно было бы получить через GetTickCount.


 
Юрий Зотов ©   (2012-07-15 12:12) [18]

> Студент_1234   (15.07.12 11:32) [16]

Кстати, если Вам нужно время "простоя", то может оказаться удобнее Application.OnMessage с фильтрацией сообщений:

if (Msg.message >= WM_MOUSEFIRST) and (Msg.message <= M_MOUSELAST)
 or (Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST) then
 begin
   ...
 end;

Только что считать "простоем"? Например, программа полчаса не получала никаких сообщений, но за эти полчаса рассчитала какой-нибудь теплообменник - это простой или нет?


 
Студент_1234   (2012-07-15 12:40) [19]


> Юрий Зотов ©   (15.07.12 11:51) [17]
>  А GetLastInputInfo всего лишь позволяет узнать время ожидания.
>  То же самое можно было бы получить через GetTickCount.


И возюкаться с проверками, не сдвинули ли мы мышь?


> Кстати, если Вам нужно время "простоя", то может оказаться
> удобнее Application.OnMessage с фильтрацией сообщени


Ужас.


> Только что считать "простоем"?


Время, с последнего изменения ввода.


 
Юрий Зотов ©   (2012-07-15 12:46) [20]


> Студент_1234   (15.07.12 12:40) [19]
> >  То же самое можно было бы получить через GetTickCount.
> И возюкаться с проверками, не сдвинули ли мы мышь?

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


 
Студент_1234   (2012-07-15 13:00) [21]


> Юрий Зотов ©   (15.07.12 12:46) [20]


Это был сарказм.
Вы предлагаете вместо удобного GetLastInputInfo использовать сообщения и прочую лабуду?


 
Юрий Зотов ©   (2012-07-15 13:21) [22]


> Студент_1234   (15.07.12 13:00) [21]

1. Я написал "может оказаться удобнее". Это означает, что может оказаться удобнее и не означает ничего другого. Потому что OnIdle срабатывает, когда все сообщения ввода УЖЕ обработаны, а OnMessage - ДО их обработки. Кроме того, сообщение TMsg содержит время в явном виде, поэтому вычисление длительности простоя становится очень простым:

Caption := IntToStr(Msg.time - FTickCount);
FTickCount := Msg.time;

То есть, разница есть, а что удобнее - решать Вам.

2. С каких пор сообщения системы стали лабудой?


 
Inovet ©   (2012-07-15 13:23) [23]

> [21] Студент_1234   (15.07.12 13:00)
> использовать сообщения и прочую лабуду?

А не в голове лабуда?


 
Студент_1234   (2012-07-15 14:09) [24]


> Юрий Зотов ©   (15.07.12 13:21) [22]
>
>
> > Студент_1234   (15.07.12 13:00) [21]
>
> 1. Я написал "может оказаться удобнее". Это означает, что
> может оказаться удобнее и не означает ничего другого. Потому
> что OnIdle срабатывает, когда все сообщения ввода УЖЕ обработаны,
>  а OnMessage - ДО их обработки. Кроме того, сообщение TMsg
> содержит время в явном виде, поэтому вычисление длительности
> простоя становится очень простым:
>
> Caption := IntToStr(Msg.time - FTickCount);
> FTickCount := Msg.time;
>
> То есть, разница есть, а что удобнее - решать Вам.


Сдвиг мышки обрабатывает?


> 2. С каких пор сообщения системы стали лабудой?


Относительно GetLastInputInfo же.


> Inovet ©   (15.07.12 13:23) [23]


Уйди, шафка.


 
Дмитрий С ©   (2012-07-15 14:28) [25]


> Студент_1234

Ну ты дурак :)


 
Студент_1234   (2012-07-15 14:29) [26]


> Дмитрий С ©   (15.07.12 14:28) [25]
>
>
> > Студент_1234
>
> Ну ты дурак :)


Я тебя тоже люблю. :***


 
Inovet ©   (2012-07-15 14:35) [27]

> [24] Студент_1234   (15.07.12 14:09)
> > Inovet ©   (15.07.12 13:23) [23]
>
> Уйди, шафка.

Мало того, что глупый, к ещё и хам.


 
Юрий Зотов ©   (2012-07-15 14:48) [28]


> Студент_1234   (15.07.12 14:09) [24]


1. Извините, а Вы [18], вообще-то, смотрели? Там же явно написано, что обрабатываются все телодвижения юзера, включая и сдвиг мышки. Если какие-то из них надо исключить, то меняем условие в IF, и все дела. Кстати, с GetLastInputInfo ничего исключить не получится.

2. Эта, как Вы ее назвали, "лабуда относительно GetLastInputInfo" позволяет вычислить длительность простоя действительно без всякого возюканья.

Подумайте сами: вот в обработчике OnIdle Вы вызвали GetLastInputInfo. Она даст время последнего (то есть, только что обработанного) сообщения ввода (поскольку ничего другого она не дает).

Вопрос - и что дальше? Как Вы собираетесь пересчитывать это время в продолжительность простоя?

3. Воспроизводим Вашу реализацию:

procedure TForm1.OnAppIdle(Sender: TObject; var Done: Boolean);
var
 Info: TLastInputInfo;
begin
 Info.cbSize := SizeOf(TLastInputInfo);
 GetLastInputInfo(Info);
 Caption := IntToStr(Info.dwTime) // Просто чтобы видеть реакцию
end;

Запускаем программу и возим над ее окном окно другой программы. Наслаждаемся картиной Репина "Приплыли".

===============

Короче, убеждать я Вас не буду - дело хозяйское. Но сильно напоминает сагу об X, Y, Z: сначала спросил не то, что нужно, потом сказал "Z не предлагать, хочу Y".

Удачи!



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.065 c
15-1335422333
Дмитрий С
2012-04-26 10:38
2013.03.22
Кадр из 112 серии интернов.


15-1329209570
Димка На
2012-02-14 12:52
2013.03.22
Как сделать чтобы WinControl ловил mousemove за пределами себя.?


15-1333917002
Юрий
2012-04-09 00:30
2013.03.22
С днем рождения ! 9 апреля 2012 понедельник


15-1342559770
Германн
2012-07-18 01:16
2013.03.22
Интересное значение "свободного места на диске" наблюл давеча


2-1340139775
Разведка
2012-06-20 01:02
2013.03.22
Перегрузка метода





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский