User Tag List

Страница 21 из 101 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 1003

Тема: Эмулятор терминала типа VT52

  1. #201

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Т.е. все глобальные хуки должны быть БИБЛИОТЕКАМИ!
    Не знаю как, но у меня глобальный хук работает в обычном exe-файле.

    И в XP, и в Висте - без проблем работает.

    Щас попробую сделать небольшой консольный екзешник, устанавливающий глобальный хук..

  2. #202

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Не знаю как, но у меня глобальный хук работает в обычном exe-файле.

    И в XP, и в Висте - без проблем работает.

    Щас попробую сделать небольшой консольный екзешник, устанавливающий глобальный хук..
    Оки.

  3. #203

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    И в XP, и в Висте - без проблем работает.
    И даже на виндовс 8
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  4. #204

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Глобальный хук работает только тогда, когда установившее его приложение проверяет очередь сообщений.

    В приложении - программа, которая глобально отключает NumLock на 20 секунд и пишет все нажатые клавиши в GlobalHook.log

    ...

    v1.1 делает то же самое, не отнимая процессорного времени.

    ...
    Вложения Вложения
    Последний раз редактировалось Patron; 31.12.2012 в 02:06.

  5. #205

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Действительно, работает.

    Буду разбираться, почему.

    И что понимается под проверкой очереди сообщений.

    ---------- Post added at 02:12 ---------- Previous post was at 02:09 ----------

    Если под очередью сообщений подразумевается PeekMessage() и т.д., то у меня тоже это все проверяется, но хук не вызывается)

    ---------- Post added at 03:45 ---------- Previous post was at 02:12 ----------

    Перенес затем один в один обработчик в свой эмулятор - не работает)

    Не понимаю, как из-за сообщений что-то там вообще может зависеть. Откуда такая информация? Чисто экспериментально?

    У тебя они обрабатываются так:
    Код:
    		if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
    		{
    			TranslateMessage( &msg );
    			DispatchMessage( &msg );
    			if( msg.message == WM_QUIT ) break;
    		}
    а у меня так:

    Код:
    	if (PeekMessage(&msg, NULL, 0, 0, 0)) {
    		if (GetMessage(&msg, NULL, 0, 0)) {		// Получить сообщение
    			TranslateMessage(&msg);				// Если сообщение не QUIT,
    			DispatchMessage(&msg);				// оттранслировать его окну
    		}
    		else 	SysExit();						// Иначе выйти закрыв все устройства
    	}
    Разницы никакой.


    Еще точнее уточнил.
    Если активно окно эмулятора, хук не работает. Если не активно работает. Опять активно - не работает.

    Причем обработчик окна меняю даже на полностью дефолтный типа:
    return (DefWindowProc(hWnd,Message,wParam,lParam));
    Это ничего не меняет. Т.е. зависит не от функции обработки окна а... непонятно опять от чего)
    Последний раз редактировалось Titus; 31.12.2012 в 04:19.

  6. #206

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    зависит не от функции обработки окна а... непонятно опять от чего)
    У меня эмулятор многопоточный. Есть поток интерфейса и потоки эмуляции. Поток интерфейса мало что делает. Главным образом - ждёт сообщений. Ну, разве что активное окно 60 раз в секунду перерисовывает. Может, поэтому я пока и не столкнулся с проблемами при работе хука.

    ---------- Post added at 03:44 ---------- Previous post was at 03:36 ----------

    Цитата Сообщение от Titus Посмотреть сообщение
    Если активно окно эмулятора, хук не работает. Если не активно работает. Опять активно - не работает.
    Это похоже на последствия предыдущих экспериментов, когда при получении фокуса окно эмулятора криво устанавливает какой-то свой кривой обработчик глобального хука, а после потери фокуса - убирает его и опять всё приходит в норму.

  7. #207

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Это похоже на последствия предыдущих экспериментов, когда при получении фокуса окно эмулятора криво устанавливает какой-то свой кривой обработчик глобального хука, а после потери фокуса - убирает его и опять всё приходит в норму.
    В том-то и дело, что никаких хуков я не устанавливаю.

    Только что вспомнил, что я использую DirectInput привязанный к моему окну. Может это он делает.
    Проверю.

  8. #208

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Проверю.
    Когда программа имеет рабочий (с интересующей точки зрения ) вариант и не рабочий - причину неработоспособности легко определить "методом половинного деления" - добавляя в рабочий вариант куски нерабочего до тех пор, пока не обнаружится тот кусок, при добавлении которого нормальная работа прекращается.

    Иногда так и приходится приятать весь программный код ( кроме начального создания главного окна программы ) в комментариях, а потом добавлять по-немногу, чтобы выловить некоторые глюки.

  9. #209

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Когда программа имеет рабочий (с интересующей точки зрения ) вариант и не рабочий - причину неработоспособности легко определить "методом половинного деления" - добавляя в рабочий вариант куски нерабочего до тех пор, пока не обнаружится тот кусок, при добавлении которого нормальная работа прекращается.
    Программа гигантская, чтобы так легко было части прятать)
    Но попробую сперва отключить DirectInput, посмотрю, чего получится.

    А запусти мой эмуль параллельно своей тестилке хуков, посмотри, работает ли блокировка нумлока при активном моем окне.

    ---------- Post added at 14:33 ---------- Previous post was at 14:24 ----------

    Проверил. Отключил DirectInput, все заработало.

    Но проблема в том, что DirectInput мне очень необходим)
    Надо будет почитать доки к нему.

    Интересно, почему он нарушает глобальный хук.
    Причем, совершенно штатно, т.к. никаких кривых методов его использования я не применяю.

  10. #210

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Проще говоря - при получении фокуса окном нужно проверить следующие варианты:

    1. Установить свой хук сразу ( и проверить успешность его установки ).

    2. Установить сначала вместо хука таймер на 50 мс и после получения сигнала таймера - установить хук. Пользователь вряд ли успеет нажать на клавишу быстрее чем через 50 мс после активации окна.

Страница 21 из 101 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. [Аукционъ] Клавиатура от терминала ЕС-7927
    от BYTEMAN в разделе Барахолка (архив)
    Ответов: 18
    Последнее: 15.05.2012, 14:50
  2. Срочно ищу монитор от терминала 15ИЭ-00-013 (от ДВК-2)
    от dk_spb в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 10.02.2012, 10:19
  3. Куплю клавиатуру КМ-035 для терминала СМ 7238
    от Kronshou в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 13.09.2010, 23:33
  4. C64 или C128 в качестве терминала под Linux
    от Vinnny в разделе Commodore 16/64/128
    Ответов: 6
    Последнее: 14.12.2007, 16:39
  5. Подгрузка pc-файла типа "codes" в эмулятор
    от maximk в разделе Эмуляторы
    Ответов: 15
    Последнее: 13.11.2006, 15:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •