Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2007, 16:25   #1
snegok74
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 11
По умолчанию Заставить мигать Scroll Lock

Пытался заставить мигать светодиоды на клавиатуре.
Обычный метод включать/выключать CapsLock и ScrollLock не подходит т.к. он влияет на ввод с клавиатуры.
Нашел другой способ но не могу корректно использовать (вызывать )библиотечные функции.
Помогите пожалуйста правильно вызвать.
файлы:
- DLLка и DEMO EXEшник.rar - скомпилированая dll из которой надо вызвать функции и EXEшник показывающий как она работает.
- Исходники на СИ.rar - исходники dll и exe файлов из архива "DLLка и DEMO EXEшник"
- мой проект который при вызове функций из dll дает сбой.
Вложения
Тип файла: rar DLLка и DEMO EXEшник.rar (23.5 Кб, 42 просмотров)
Тип файла: rar Вызов это DLL из Delphi.rar (14.1 Кб, 38 просмотров)
Тип файла: rar Исходники на СИ.rar (5.8 Кб, 31 просмотров)
snegok74 вне форума Ответить с цитированием
Старый 26.11.2007, 16:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На Delphi World есть отличный пример с Keyb_event. Там на делфе но смысл остается
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2007, 21:32   #3
snegok74
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 11
По умолчанию

возможно я что то не понял но, по моему все эти примеры изменяют состояние клавиатуры(SetKeyboardState) - то есть если вспыхивает лампочка CapsLock то с клавиатуры начинают вводится буквы в верхнем регистре, а в Excell'е работать при регулярно включающемся ScrollLock'е совсем не удобно :-D Вложеная выше библиотека зажигая светодиод не меняет состояние клавиатуры.
snegok74 вне форума Ответить с цитированием
Старый 27.11.2007, 19:22   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вот я перевел кусок кода, с зажиганием лампочек проблем нет, ошибка возникает при выходе из процедуры, почему именно, я не знаю, если прервать выполнение программы перед выходом из процедуры, ошибки нет.
Кстати в его примере программа тоже прерывается.
Код:
const
  KEYBOARD_CAPS_LOCK_ON   =  4;
  KEYBOARD_NUM_LOCK_ON    =  2;
  KEYBOARD_SCROLL_LOCK_ON =  1;

procedure TForm1.Button1Click(Sender: TObject);
var
  hndKbdDev: THandle;
  i,e: integer;
begin
  hndKbdDev:=OpenKeyboardDevice(0);
  if (hndKbdDev = INVALID_HANDLE_VALUE)	then	// Was the device opened?
    begin
    e := GetLastError();
    ShowMessage('Unable to open the device. error '+IntToStr(e));
    end
  else
    for i:=0 to 2 do
      begin
      FlashKeyboardLight(hndKbdDev, KEYBOARD_NUM_LOCK_ON, 250);
      FlashKeyboardLight(hndKbdDev, KEYBOARD_CAPS_LOCK_ON, 250);
      FlashKeyboardLight(hndKbdDev, KEYBOARD_SCROLL_LOCK_ON, 250);
      end;
  CloseKeyboardDevice(hndKbdDev);
  Halt; //иначе будет ошибка
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.11.2007, 22:31   #5
snegok74
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 11
Хорошо Отлично! Пример заработал с первого раза.

Отлично! Пример заработал с первого раза.
Все таки Halt лучше, чем исключения отлавливать, наверно

Огромное спасибо уважаемый "mutabor"!!!

Последний раз редактировалось snegok74; 27.11.2007 в 22:33. Причина: пропустил слово
snegok74 вне форума Ответить с цитированием
Старый 05.06.2008, 00:42   #6
nzerg
 
Регистрация: 05.06.2008
Сообщений: 6
По умолчанию

кто то сделал утилиту эту? помогите, можете сделать утилиту, которая зажгет индикатор скролл лока без включения самой функции?
nzerg вне форума Ответить с цитированием
Старый 05.06.2008, 08:33   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
без включения самой функции?
Какой еще функции?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.06.2008, 16:28   #8
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Можно сделать так:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
keybd_event(VK_SCROLL, 0, 0, 0);
keybd_event(VK_SCROLL, 0, vk_up, 0);
end;

Это если надо для нум лока и капс лока:

keybd_event(VK_NUMLOCK, 0, 0, 0);
keybd_event(VK_NUMLOCK, 0, vk_up, 0);

keybd_event(VK_CAPITAL, 0, 0, 0);
keybd_event(VK_CAPITAL, 0, vk_up, 0);
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 06.06.2008, 02:10   #9
nzerg
 
Регистрация: 05.06.2008
Сообщений: 6
По умолчанию

простите. я в программировании ни в зуб ногой
можете в екзешник скомпилировать и выложить?
заранее кланяюсь в ноги)
nzerg вне форума Ответить с цитированием
Старый 06.06.2008, 08:30   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кланяйся, выкладываю:
Вложения
Тип файла: rar Madness_ScrollLock.rar (446 байт, 142 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Scroll в DBGrid и StringGrid Roof Компоненты Delphi 2 27.07.2008 17:46
Накой кнопка Scroll Lock??? Altera Компьютерное железо 4 05.06.2008 00:42
Как заставить работать php? yourself Помощь студентам 9 20.05.2008 08:08
Scroll bar - делаем скин BOBAH13 Компоненты Delphi 7 26.04.2008 14:51
scroll в webbrouser MaslCS Компоненты Delphi 4 23.01.2008 22:58