Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.10.2012, 21:21
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
Радость Переключение раскладки клавиатуры Caps-lock'ом

Переключается раскладки клавиатуры через Caps-Lock.
Лампочка Scroll-lock'а - отображает текущий язык ввода.
Непосредственно режим caps-lock включается/выключается клавишами shift+caps-lock.
Написано на основе lswitch + KbLangLED, но использование 2 утилит мне не понравилось, поэтому решил совместить их в одной программе.

скачать исходники можно отсюда
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 06.10.2012 в 01:52.
Ответить с цитированием
  #2  
Старый 05.10.2012, 22:52
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Во-первых, выложенный исходник не компилируется, потому как содержит ошибки. И часть ошибок намекает на то, что код переводили с C++.

Во-вторых, после исправления ошибок мне удалось собрать программку с более чем в 4 раза меньшим размером -- с модулями KOL. Для мелких утилит -- самое то. Работоспособность вроде сохранилась.

Какая лицензия у исходника, кстати?
Ответить с цитированием
  #3  
Старый 05.10.2012, 23:02
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от Freeman
Во-первых, выложенный исходник не компилируется, потому как содержит ошибки. И часть ошибок намекает на то, что код переводили с C++.

Я писал на Делфи 2006, все компилируется без проблем.
в коде разница только в этом?
Код:
{$IFDEF Tricks}
  HeapMM,
{$ENDIF}

И что это даёт?...

З.Ы. скомпилировав твоё вышло почти 83 кб... чем компилируешь ты?
З.Ы.Ы. С ужосом заметил, что выложил не ту версию исходников, перезалил туда же.

Лицензия - с указанием моего авторства в составе желательно. А так свободная - мне не жалко.
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 05.10.2012 в 23:11.
Ответить с цитированием
  #4  
Старый 05.10.2012, 23:05
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от SCrat.ORS
З.Ы. скомпилировав твоё вышло почти 83 кб... чем компилируешь ты?
Учимся читать
Цитата:
Сообщение от Freeman
с модулями KOL
А мне KOL не нравится уж лучше на "чистом" API.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 05.10.2012, 23:13
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от angvelem
Учимся читать
А мне KOL не нравится уж лучше на "чистом" API.

KOL ... хм не слышал, почитаю гугл =)

на API - был вариант сделать,. но как-то влом расписывать потоки
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #6  
Старый 05.10.2012, 23:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Действительно код писан на С, а потом перенесён в Дельфи без понимания сути. После исправления ошибок (Hi Freeman) , скомпилировался.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 05.10.2012, 23:22
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от angvelem
Действительно код писан на С, а потом перенесён в Дельфи без понимания сути. После исправления ошибок (Hi Freeman) , скомпилировался.
Бралось действительно с Си, но вот не без понимания сути. Суть ясна прекрасно.
3 пост.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #8  
Старый 05.10.2012, 23:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну тогда объясни, зачем здесь &
Код:
  while GetMessage(&msg, 0, 0, 0) do
  begin
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 05.10.2012, 23:29
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от angvelem
Ну тогда объясни, зачем здесь &
Код:
  while GetMessage(&msg, 0, 0, 0) do
  begin
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  end;

Да, этот момент переехал вместе с Си... как то упустил.

Вообще тогда меня больше мучал вопрос, как сделать Хуки без ДЛЛ, и почему когда Хук работает без Длл, и при вставке кода ЛЕД в цикл GetMessage, хук переставал работать?...
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #10  
Старый 05.10.2012, 23:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Потому что DLL может "встраиваться" в "чужие" процессы, exe-шникам это запрещено.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 05.10.2012, 23:33
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Да, но ведь работает в ехе!
Вообще как я понял, для работы хука надо просто запретить трансляцию месагов,...
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 05.10.2012 в 23:35.
Ответить с цитированием
  #12  
Старый 05.10.2012, 23:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

При запуске из консоли (FAR), скрывает значок смены "языка" и Scroll-lock не переключается.
Цитата:
Да, но ведь работает в ехе!
конечно, ведь используется "нить".
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 05.10.2012 в 23:46.
Ответить с цитированием
  #13  
Старый 05.10.2012, 23:50
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от angvelem
При запуске из консоли (FAR), скрывает значок смены "языка" и Scroll-lock не переключается.

быть может при активном окне FAR консоль использует свои хуки?

вот идея которую я не смог реализовать в сей программке:
включение/выключения режима CAPS-LOCK при нажатии shift + caps-lock, или двойным нажатием на caps-lock. При реализации получалось что при определённых моментах срабатывает, но после включения CAPS-LOCK назад он не выключался, или выключался но после того как сменишь раскладку... вообщем бред какой то получался. так я и сдался.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #14  
Старый 05.10.2012, 23:58
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну правильно, у тебя проверяется только на CapsLock без учёта других клавиш
Код:
  fEatKeystroke := (p^.vkCode = 20);
а как же это?
Цитата:
Specifies the extended-key flag, event-injected flag, context code, and transition-state flag. This member is specified as follows. An application can use the following values to test the keystroke flags. Value Purpose
LLKHF_EXTENDED Test the extended-key flag.
LLKHF_INJECTED Test the event-injected flag.
LLKHF_ALTDOWN Test the context code.
LLKHF_UP Test the transition-state flag.

0 Specifies whether the key is an extended key, such as a function key or a key on the numeric keypad. The value is 1 if the key is an extended key; otherwise, it is 0.
1-3 Reserved.
4 Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0.
5 Specifies the context code. The value is 1 if the ALT key is pressed; otherwise, it is 0.
6 Reserved.
7 Specifies the transition state. The value is 0 if the key is pressed and 1 if it is being released.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 06.10.2012 в 00:01.
Ответить с цитированием
  #15  
Старый 06.10.2012, 00:01
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Конечно, я же убрал другие проверки клавиш перед тем как выложить исходник. Пробывал всталял проверки шифта, или счетчик нажатий капса, что бы не только можно было переключит раскладку, но и включить капс. И мне показалось, что при включенном капсе скан коды как-будто изменяются.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter