===================================================================== AJPapps - Global hotkeys 1.03 Линда Кайе 2008-2016. Посвящается Ариэль ===================================================================== Эта программа ассоциирует некие комбинации клавиш (например, Ctrl+Win+R) с некими программами (например, C:\Buka\GTR.EXE). Тоесть с ней из любой программы можно запустить какую-то программу не ковыряясь долго в меню в поисках ярлыка, а простым нажатием комбинации клавиш. Все назначенные комбинации клавиш выводятся в меню программы, поэтому Вы никогда не забудете что поназначали в прошлый раз ^_^ История создания ---------------- Эта программа была написана по мотивам HotKey Control XP, которая, в свою очередь, была написана на Visual Basic 6.00. HCX была довольно удобна, прекрасно работала и даже позволяла назначать на клавиши некоторые дополнительные действия вроде сворачивания активного окна. Но однажды так получилось, что эта программа стала недоступна, и возникла необходимость написать подобную программу. Тем более что меня не всё в ней устраивало. Например, можно было задать где-то десять клавиш, использовать можно было далеко не все клавиши, да и лишние функции утяжеляли программу. Надо писать свою! И вот появилась AJPapps - Global hotkeys. Она построена на двух API функциях: RegisterHotKey() и UnregisterHotKey(), которые и выполняют всю работу. Программа практически лишена интерфейса, а всё взаимодействие с ней идёт через иконку в системном трее. Каждая горячая клавиша дублируется пунктом в меню, так что при необходимости можно её вызвать не касаясь клавиатуры. Ввиду отсутствия интерфейса, настройка программы ведётся путём редактирования файла инициализации GlobalHotKeys.INI, который должен быть в каталоге Application Data. Это не так просто, особенно для товарищей, которые даже не знают, что это за файлы такие. Однако это открывает доступ практически ко всем возможностям функций RegisterHotKey() и ShellExecute(), больше, чем ярлыки Windows, больше чем другие программы. История изменений ----------------- • 1.02.0078 [-] Исправила ошибку вывода справки. • 1.03.0084 [+] В Windows NT программы запускаются на текущем рабочем столе. [+] Файл настроек хранится в Application Data. [+] Меню вызывается щелчком как правой, так и левой клавишей мыши. [+] Справка дополнена и переведена в ReadMe.TXT файл. [+] Официально поддерживаются текстовые значения KeyCode и ShowStyle. • 1.03.0085 [+] Ребилд с новыми библиотеками. [+] Иконка восстанавливается при вылете Проводника. • 1.03.0099 [+] Теперь программа всегда работает со средним приоритетом. [+] Немного подправила получение имени INI файла. [+] Обновила библиотеки и поправила вывод меню. [+] Поправила работу с INI файлами. [-] Исправила пример в ReadMe OO [-] В некоторых случаях неверные значения в INI файле приводили к ошибкам. [+] Программа загружается даже если не определено ни одной горячей клавиши. [+] Программа сообщает об ошибках, если не удаётся зарегистрировать клавишу. [+] Программа сообщает об ошибках активации клавиши. [+] Предыдущие сообщения можно подавить - добавила пункт в меню. • 1.03.0109 [-] В ряде случаев программа могла зависнуть при активизации клавиши. • 1.03.0112 [-] При запуске программы от лица другого пользователя, дочерние программы стартовали в оконной станции сервиса, а не пользователя. • 1.03.0116 [-] Поправлена утечка памяти в программе. [-] Программа больше не создаёт невидимые окна, на которые может переходить фокус. Зависимости ----------- Для работы этой программы нужны следующие компоненты: • AJPapps - AJPapps support library 1.00 Файл AJPappsSupport0100.DLL • AJPapps - Библиотека общих функций 3.02 Файл CommonFunctions0302.DLL • AJPapps - Subclasser 1.00 Файл Subclasser0100.DLL • AJPapps - System tray icon control 2.01 Файл SysTray0201.OCX • Microsoft Visual Basic Virtual Machine Файл MSVBVM60.DLL Эти компоненты обязательны. Они уже включены в программу установки ^_^ Информация о разработке ----------------------- Язык: Microsoft Visual Basic 6.0 SP6 Платформа: Windows XP Professional SP3 Установка --------- Просто запустите Setup.GlobalHotKeys.EXE, и программа установки сама создаст все необходимые ярлыки. Настройка --------- Для начала нужно создать файл настроек - об этом ниже ^^ После этого уже можно запускать программу и работать с ней. Интерфейса для настроек горячих клавиш пока нет, но если будут пожелания, пишите - напрягусь немного и напишу ^_^' Пока же я не вижу особой необходимости в нём. Начиная с версии 1.03, файл настроек хранится в Application Data. Так для пользователя Ариэль в Windows XP файл будет называться GlobalHotKeys.INI и будет располагаться здесь: "C:\Documents and Settings\Ариэль\Application Data\HalfMoon Studios\Global Hotkeys\" Если программа не найдёт файл в указанном каталоге, она попытается его скопировать из каталога программы. Это, разумеется, если Вы использовали более раннюю версию. Поэтому обновление должно пройти без проблем. GlobalHotKeys.INI ----------------- Этот файл является обычным инициализационным файлом Windows. В нём каждая секция отвечает за одну горячую клавишу. Всего секций может быть 51 (с нулевой по пятьдесят первую). Имя секции выглядит примерно так: "HotKey 0003". В данном случае это третья горячая клавиша. Обратите внимание, что номер секции должен состоять из четырёх цифр, поэтому там дописываются нули: 0001, 0016. Порядок секций значения не имеет. Также можно использовать любые номера и свободно пропускать любые из них. Для каждой секции обязательными считаются только ключи FileName и KeyCode. При отсутствии первого клавиша считается отсутствующей, а при отсутствии второго - определённой ошибочно. При нахождении такой ошибки чтение файла прекращается, и программа завершает работу. После того как программа прочитает очередную секцию, она пытается зарегистрировать горячую клавишу. Если функция возвращает ошибку, то клавиша считается определённой неправильно и пропускается. При этом чтение файла настройки не прекращается. Причины ошибки могут быть разными. Например, горячую клавишу с такими же параметрами могла зарегистрировать другая программа, или код клавиши задан неверно. После успешной регистрации, программа добавляет команду вызова программы, ассоциированной с заданной клавишей в своё меню. В качестве текста пункта меню используется значение ключа Title или, если такой отсутствует, имя секции. К имени дописывается комбинация клавиш, чтобы не забыть. Правда, если используется какая-то оригинальная комбинация, она может вывестись неправильно или вообще не вывестись. При запуске команды, ни каких сообщений об ошибках не выдаётся, но если они возникают, сообщения пишутся в журнал событий. Выполнение команды или ошибка выполнения сопровождается звуком, который можно настроить в панели управления. Для этого нужно выбрать "Звук" и в списке событий найти "AJPapps - Global hotkeys". Условно ключи можно разделить на две категории: отвечающие за создание горячей клавиши и отвечающие за запуск программы, назначенной на горячую клавишу. Ключи, отвечающие за создание горячей клавиши --------------------------------------------- KeyCode - код клавиши, которая сопоставляется с горячей клавишей. Можно использовать число в десятичной системе счисления и в шестнадцатеричной. В последнем случае нужно использовать формат записи языка C, то есть нечто вроде 0x36. Кроме этого, можно использовать имена констант вроде VK_Z. Список имён констант и их числовых кодов приведён ниже. Modifier Alt - задаёт необходимость удерживания клавиши Alt при нажатии горячей клавиши. Здесь используются значения True и False. Если указано True, то в комбинации используется Alt. По умолчанию - False. Modifier Control - задаёт необходимость удерживания клавиши Ctrl при нажатии горячей клавиши. Здесь используются значения True и False. Если указано True, то в комбинации используется Ctrl. По умолчанию - False. Modifier Win - задаёт необходимость удерживания клавиши Win (клавиша с флажком) при нажатии горячей клавиши. Здесь используются значения True и False. Если указано True, то в комбинации используется Win. По умолчанию - False. Этой клавишей рекомендуется пользоваться, чтобы комбинации не конфликтовали с комбинациями, определёнными программами. Допустим, Вы назначили на Alt+I программу, которая показывает сведения о температуре процессора. Допустим, есть текстовый редактор, который по Alt+I выводит сведения о количестве слов в документе. Если, набирая текст, Вы нажмёте Alt+I, то Global Hotkeys перехватит эту комбинацию и вместо количества слов покажет температуру процессора. Поэтому уместнее использовать в данном случае комбинацию Win+Alt+I, поскольку программы никогда не используют клавишу Win для своих команд. Modifier Shift - задаёт необходимость удерживания клавиши Shift при нажатии горячей клавиши. Здесь используются значения True и False. Если указано True, то в комбинации используется Shift. По умолчанию - False. Title - задаёт текст пункта меню для данной горячей клавиши. Здесь можно указать всё, что угодно, главное чтобы Вам потом было понятно ^^ Ключи, отвечающие за запуск программы ------------------------------------- FileName - задаёт имя исполняемого файла или документа. Для приложений применимы все правила поиска, определённые в Windows: переменная окружения PATH, значение AppPaths в реестре. Если указано имя файла документа, то для его открытия будет запущена ассоциированная программа. В этом ключе нельзя указывать параметры программы. Используйте для этого ключ Params. Params - параметры запуска программы, командная строка. Например, для Блокнота здесь может быть указано имя файла, который необходимо открыть. По умолчанию - пустая строка. Action - имя действия, которое необходимо выполнить с указанным файлом. По умолчанию - "open". Поддерживаемые имена действий для заданного типа файла содержатся в реестре, и каждому действию сопоставлены свои параметры запуска программы. Например, для файла TXT, который ассоциирован с Блокнотом, поддерживаются действия "Open", "Print" и "Printto", причём первые две применяются наиболее часто для многих типов документов: для открытия и печати соответственно. Directory - задаёт стартовый каталог для запущенной программы или файла. По умолчанию - текущий каталог. ShowStyle - задаёт вид окна запущенной программы. Например, свёрнутое или развёрнутое на весь экран. Может быть задан числом или именем константы. Список имён констант и их числовых значений приведён ниже. По умолчанию - SW_SHOWDEFAULT, то есть программа сама выбирает вид главного окна. Пример файла GlobalHotKeys.INI ------------------------------ Допустим мы хотим запускать FAR по нажатию клавиш Win+Shift+F. При этом мы запускаем файл "C:\Utils\FAR\FAR.EXE" с параметром "/i". Для этого создадим секцию вот такого вида: [HotKey 0013] KeyCode=VK_F Modifier Win=True Modifier Control=False Modifier Alt=False Modifier Shift=Frue FileName=C:\Utils\FAR\FAR.EXE Params=/i Title=Запустить FAR После запуска Global Hotkeys, в меню программы Вы увидите "Запустить FAR Win+Shift+F". А вот ещё один пример. Здесь мы хотим распечатать некий текст - обратите внимание на ключ Action. Также здесь мы используем числовое значение клавиши S. [HotKey 0014] Title=Напечатать SailorMoon FAQ FileName=O:\Documents\Anime\SailorMoon FAQ.TXT KeyCode=0x53 Modifier Win=True Modifier Control=True Modifier Alt=True Action=Print Значения KeyCode ---------------- Эти значения - коды клавиш, которые представляют физические клавиши на клавиатуре независимо от раскладок и языков. Например, при нажатии клавиши "Z" или "Я" код виртуальной клавиши всегда будет VK_R. Приведённые имена констант обрабатываются программой. Для не перечисленных здесь констант нужно использовать числовые значения. Какую клавишу обозначает каждая константа, думаю, ясно из имени. VK_LBUTTON 0x01 VK_RBUTTON 0x02 VK_CANCEL 0x03 VK_MBUTTON 0x04 VK_BACK 0x08 VK_TAB 0x09 VK_CLEAR 0x0C VK_RETURN 0x0D VK_SHIFT 0x10 VK_CONTROL 0x11 VK_MENU 0x12 VK_PAUSE 0x13 VK_CAPITAL 0x14 VK_KANA 0x15 VK_HANGEUL 0x15 VK_HANGUL 0x15 VK_JUNJA 0x17 VK_FINAL 0x18 VK_HANJA 0x19 VK_KANJI 0x19 VK_ESCAPE 0x1B VK_CONVERT 0x1C VK_NONCONVERT 0x1D VK_ACCEPT 0x1E VK_MODECHANGE 0x1F VK_SPACE 0x20 VK_PRIOR 0x21 VK_NEXT 0x22 VK_END 0x23 VK_HOME 0x24 VK_LEFT 0x25 VK_UP 0x26 VK_RIGHT 0x27 VK_DOWN 0x28 VK_SELECT 0x29 VK_PRINT 0x2A VK_EXECUTE 0x2B VK_SNAPSHOT 0x2C VK_INSERT 0x2D VK_DELETE 0x2E VK_HELP 0x2F Коды от VK_0 до VK_9 эквивалентны ASCII кодам от 0 до 9 (0x30 - 0x39). Также, коды от VK_A до VK_Z эквивалентны ASCII кодам от A до Z (0x41 - 0x5A). VK_0 0x30 VK_1 0x31 VK_2 0x32 VK_3 0x33 VK_4 0x34 VK_5 0x35 VK_6 0x36 VK_7 0x37 VK_8 0x38 VK_9 0x39 VK_A 0x41 VK_B 0x42 VK_C 0x43 VK_D 0x44 VK_E 0x45 VK_F 0x46 VK_G 0x47 VK_H 0x48 VK_I 0x49 VK_J 0x4A VK_K 0x4B VK_L 0x4C VK_M 0x4D VK_N 0x4E VK_O 0x4F VK_P 0x50 VK_Q 0x51 VK_R 0x52 VK_S 0x53 VK_T 0x54 VK_U 0x55 VK_V 0x56 VK_W 0x57 VK_X 0x58 VK_Y 0x59 VK_Z 0x5A VK_LWIN 0x5B VK_RWIN 0x5C VK_APPS 0x5D VK_NUMPAD0 0x60 VK_NUMPAD1 0x61 VK_NUMPAD2 0x62 VK_NUMPAD3 0x63 VK_NUMPAD4 0x64 VK_NUMPAD5 0x65 VK_NUMPAD6 0x66 VK_NUMPAD7 0x67 VK_NUMPAD8 0x68 VK_NUMPAD9 0x69 VK_MULTIPLY 0x6A VK_ADD 0x6B VK_SEPARATOR 0x6C VK_SUBTRACT 0x6D VK_DECIMAL 0x6E VK_DIVIDE 0x6F VK_F1 0x70 VK_F2 0x71 VK_F3 0x72 VK_F4 0x73 VK_F5 0x74 VK_F6 0x75 VK_F7 0x76 VK_F8 0x77 VK_F9 0x78 VK_F10 0x79 VK_F11 0x7A VK_F12 0x7B VK_F13 0x7C VK_F14 0x7D VK_F15 0x7E VK_F16 0x7F VK_F17 0x80 VK_F18 0x81 VK_F19 0x82 VK_F20 0x83 VK_F21 0x84 VK_F22 0x85 VK_F23 0x86 VK_F24 0x87 VK_NUMLOCK 0x90 VK_SCROLL 0x91 VK_LSHIFT 0xA0 VK_RSHIFT 0xA1 VK_LCONTROL 0xA2 VK_RCONTROL 0xA3 VK_LMENU 0xA4 VK_RMENU 0xA5 VK_PROCESSKEY 0xE5 VK_ATTN 0xF6 VK_CRSEL 0xF7 VK_EXSEL 0xF8 VK_EREOF 0xF9 VK_PLAY 0xFA VK_ZOOM 0xFB VK_NONAME 0xFC VK_PA1 0xFD VK_OEM_CLEAR 0xFE Значения ShowStyle ------------------ Эти константы определяют как программа покажет своё главное окно. Правда, не все программы обращают внимание на это. Скрыть окно: SW_HIDE 0 Показать не свёрнутым и не развёрнутым на весь экран: SW_SHOWNORMAL 1 Свернуть окно: SW_SHOWMINIMIZED 2 Развернуть на весь экран: SW_SHOWMAXIMIZED 3 Позволить программе самой выбирать вид окна: SW_SHOWDEFAULT 10 А вот эти константы я, пожалуй, не буду комментировать. Но они поддерживаются. SW_NORMAL 1 SW_MAXIMIZE 3 SW_SHOWNOACTIVATE 4 SW_SHOW 5 SW_MINIMIZE 6 SW_SHOWMINNOACTIVE 7 SW_SHOWNA 8 SW_RESTORE 9 SW_FORCEMINIMIZE 11 Следующие константы признаны устаревшими, но всё равно поддерживаются: HIDE_WINDOW 0 SHOW_OPENWINDOW 1 SHOW_ICONWINDOW 2 SHOW_FULLSCREEN 3 SHOW_OPENNOACTIVATE 4 Использование ------------- Теперь, когда мы настроили программу, можно поговорить и об остальном. После запуска программы, её иконка появляется в трее. При щелчке на ней появляется меню, в котором содержится список всех определённых горячих клавиш, а также дополнительные команды, не относящиеся к горячим клавишам. Горячие клавиши работают везде, в любой программе и на любом рабочем столе. Проблемы могут возникнуть только в консоли в Windows 98. Поэтому можно делать так: сначала Вы нажимаете Win, чтобы появилось меню "Пуск", а консоль потеряла фокус, а потом нажимаете комбинацию. Это не зависит от программы - это особенность системы и реализации консоли в ней. Если программа запущена на одном рабочем столе, а Вы переключились на другой и нажали горячую клавишу, команда будет выполнена на текущем рабочем столе. Это отличается от поведения клавиш Windows вроде Win+E, Win+R. В подменю "Скринсейвер" можно запустить скринсейвер или заблокировать его на некоторое время. При этом при выходе из программы скринсейвер снова будет восстановлен. На самом деле если во время блокировки Вы откроете свойства экрана, то увидите, что ни какого скринсейвера вообще нет - это просто маленький трюк. Вообще, блокировка может быть полезна, например, для проверки или дефрагментации диска в Windows 98, когда запуск скринсейвера заставлял всё начать сначала. Чтобы не сидеть и не дёргать мышь можно просто заблокировать его на часик и заниматься своими делами. Пункт "Help Author" включает встроенную в Windows отладку файлов справки. Если Вы не знаете, что это такое, то можно это не трогать и оставить отключенным. Подробности об отладке можно прочитать в справке Help Workshop. "Automatic Debugger". Эта опция заставляет отладчик запускаться каждый раз при сбое какой-либо программы. Если Вы не знаете, что это такое, то можно это не трогать. В Windows NT обычно эта опция включена - это связано с особенностями тамошнего Dr.Watson. В Windows 98, даже если Доктор Ватсон запущен, эта опция обычно отключена. Сам отладчик данной программой не настраивается ^^ Эта опция нужна если Вам нужно отловить какой-то глюк программы, но не хочется специально гонять её под отладчиком. Отладчик сам запустится в момент ошибки, если эта опция будет включена. В остальное время галочку можно снять - она и делалась для быстрого доступа ^^ "Блокировать ждущий режим". Эта опция блокирует автоматический переход компьютера в ждущий режим. Настройка не сохраняется. Причины её использования могут быть схожи с причинами блокировки скринсейвера. "Редактировать GlobalHotKeys.INI" открывает в редакторе файл настроек. "Перезагрузить горячие клавиши". Этот пункт позволяет перечитать файл настроек без выхода из программы. Например, это необходимо после редактирования файла настроек. "Не выдавать сообщений при активации". При активации горячей клавиши может произойти ошибка, и раньше программа просто выдавала выбранный звук. Теперь же он сообщает об ошибке и выдаёт подробности. Но если вы не хотите видеть этого, а по прежнему хотите слышать звук, включите эту опцию. После выхода из программы регистрация всех горячих клавиш будет отменена. Удаление -------- Удаление самой программы производится обычным способом - через Установку и удаление программ. Маленький копирайт ------------------ 1. Программа распространяется бесплатно. 2. Вы имеете право распространять её на тех же условиях. 3. При распространении вы не имеете права менять авторство программы, присваивать его себе или каким-либо иным способом искажать его. 4. Разрешено коммерческое использование программы (в офисе, на производстве) за исключением её платного распространения или сдачи в аренду. 5. Программа распространяется как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы. 6. Вы имеете право использовать ActiveX компоненты, поставляемые с программой, в собственных программах. При этом автор не гарантирует совместимость будущих версий компонентов. 7. Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы. 8. По любым вопросам, связанным с данной программой, обращайтесь по адресу lindaoneesama@gmail.com Загружено с http://purl.oclc.org/Linda_Kaioh/Homepage/