Форум: "Прочее";
Текущий архив: 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