Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лампочки, CapsLock, NumLock, ScrollLock. 
:(
    Опции темы
Сый
Дата 12.3.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: нет
Всего: 3



Нужно помигать лампочками на клавиатуре при помощи WinAPI. Как это лучше сделать?
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
MIX55
Дата 12.3.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


много работы
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 208
Регистрация: 23.10.2005
Где: Здесь

Репутация: нет
Всего: 4



надо юзать:
Код

GetKeyboardState;

SetKeyboardstate;


описание в MSDN
--------------------
Hарод, а как в дельфи писать паскалевские проги....?*********************************************Жизнь слишком коротка, чтобы писать на Assembler'e
PM MAIL ICQ   Вверх
Snowy
Дата 12.3.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Код

procedure SetLedState(Key: Integer; State: Boolean);
var Buffer: TKeyboardState;
begin
  case Win32Platform of
    VER_PLATFORM_WIN32_WINDOWS:
      begin
        GetKeyboardState(Buffer);
        Buffer[Key] := Ord(State);
        SetKeyboardState(Buffer)
      end;
    VER_PLATFORM_WIN32_NT:
      begin
        if (Lo(GetKeyState(Key))>0) <> State then
        begin
          keybd_event(Key, $45, KEYEVENTF_EXTENDEDKEY, 0);
          keybd_event(Key, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
        end;
      end
  end;
end;

Пример:
Код

var b: byte;
begin
  repeat
    SetLedState(VK_CAPITAL, b and 3 = 3);
    SetLedState(VK_NUMLOCK, b and 4 = 4);
    SetLedState(VK_SCROLL,  b and 5 = 5);
    inc(b); Sleep(200);
  until GetKeyState(VK_ESCAPE)>1;

PM MAIL   Вверх
Сый
Дата 12.3.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: нет
Всего: 3



> описание в MSDN
Ну надо было хоть ссылку дать.

Хотелось бы узнать также значения постоянных KEYEVENTF_EXTENDEDKEY, KEYEVENTF_KEYUP, VK_CAPITAL и т.д., а также значение числа $45 в десятеричном виде.
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Snowy
Дата 12.3.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Сый @ 12.3.2006, 12:12 Найти цитируемый пост)
Ну надо было хоть ссылку дать.
Delphi -> Help -> Windows SDK


Цитата(Сый @ 12.3.2006, 12:12 Найти цитируемый пост)
Хотелось бы узнать также значения постоянных KEYEVENTF_EXTENDEDKEY, KEYEVENTF_KEYUP, VK_CAPITAL
Модули Windows.pas и Messages.pas
Добавлено @ 17:47
Цитата(Сый @ 12.3.2006, 12:12 Найти цитируемый пост)
а также значение числа $45 в десятеричном виде.
69. Только что это меняет?
PM MAIL   Вверх
maxim1000
Дата 12.3.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



Цитата(Сый @ 12.3.2006, 11:12 Найти цитируемый пост)
Ну надо было хоть ссылку дать

ну и http://msdn.microsoft.com


--------------------
qqq
PM WWW   Вверх
Сый
Дата 12.3.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: нет
Всего: 3



Просто пишу не в Делфи, модулей этих не имею.
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Сый
Дата 12.3.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: нет
Всего: 3



> http://msdn.microsoft.com
А тут ни слова по-русски.
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
MIX55
Дата 12.3.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


много работы
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 208
Регистрация: 23.10.2005
Где: Здесь

Репутация: нет
Всего: 4



Цитата

А тут ни слова по-русски.

естественно. microsoft пока Абрамович не купил. Прошу прощения за оффтоп.
Цитата

Ну надо было хоть ссылку дать.

А вверху этого топика если посмотреть то можно увидеть следующее
Цитата

99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

--------------------
Hарод, а как в дельфи писать паскалевские проги....?*********************************************Жизнь слишком коротка, чтобы писать на Assembler'e
PM MAIL ICQ   Вверх
Snowy
Дата 13.3.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Сый @ 12.3.2006, 18:09 Найти цитируемый пост)
Просто пишу не в Делфи, модулей этих не имею.
А зачем тогда вопрос в разделе Delphi?
В любом языке эти модули есть.
Ну разве что называться могут по другому.
В C++ называются также, в паскале аналогично.
В ASM - kernel.lib и user32.lib
PM MAIL   Вверх
urix
Дата 17.3.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 26.12.2005

Репутация: 1
Всего: 1



а кто-нибудь знает, зачем в keybd_event в примере в MSDN передаётся $45 ? Ведь написано, что этот параметр не используется?
PM MAIL   Вверх
Snowy
Дата 17.3.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Это сканкод клавиши.
Да. Не используется. Но что мешает его передать?
PM MAIL   Вверх
Girder
Дата 17.3.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Цитата(urix @ 17.3.2006, 14:39 Найти цитируемый пост)
Ведь написано, что этот параметр не используется?
Конечно не используется.



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Alexeis
Дата 17.3.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Кстати вот так использовать процедуру Snowy, куда
удобней, а то все настройки лампочек сбивались и выход у меня не работаел.
Код

var
 stop : boolean = false;

procedure TForm1.Button1Click(Sender: TObject);
var
  b : integer;
  b1, b2, b3  : boolean;
begin
   stop := false;
   byte(b1) := GetKeyState(VK_CAPITAL) and 1;
   byte(b2) := GetKeyState(VK_NUMLOCK) and 1;
   byte(b3) := GetKeyState(VK_SCROLL) and 1;
   SetLedState(VK_CAPITAL, false);
   SetLedState(VK_NUMLOCK, false);
   SetLedState(VK_SCROLL,  false);
   b := 0;
   repeat
    SetLedState(VK_CAPITAL, b mod 3 = 0);
    SetLedState(VK_NUMLOCK, b mod 3 = 1);
    SetLedState(VK_SCROLL,  b mod 3 = 2);
    inc(b);
    application.ProcessMessages;
    Sleep(200);
    application.ProcessMessages;
  until stop{GetKeyState(VK_ESCAPE) > 1};

  SetLedState(VK_CAPITAL, b1);
  SetLedState(VK_NUMLOCK, b2);
  SetLedState(VK_SCROLL, b3);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  stop := true;
end;





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Girder
Дата 17.3.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Используй SendInput
Цитата
Windows NT/2000/XP:This function has been superseded. Use SendInput instead.
...
Minimum operating systems Windows 98, Windows NT 4.0 Service Pack 3


Код

procedure TForm1.Button3Click(Sender: TObject);
var i:tagInput;
begin
 FillChar(i,SizeOf(i),#0);
 i.Itype:=INPUT_KEYBOARD;
 i.ki.wVk:=VK_SCROLL;
 i.ki.dwFlags:=KEYEVENTF_EXTENDEDKEY;
 i.ki.dwExtraInfo:=GetMessageExtraInfo(); //0
 SendInput(1,i,SizeOf(i));
 i.ki.dwFlags:=KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP;
 SendInput(1,i,SizeOf(i));
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.