Keyboard Trick

Заметка для себя, ну и вдруг кому еще пригодится 🙂

Приобрел новую клавиатурку, воткнул, виста её определила, и все нужные мне кнопочки заработали. В частности колесико громкости, mute, и т.п. Но вот только захотелось мне странного — чтоб по нажатию на кнопку с калькулятором запускался не ненужный мне Calculator, а PowerShell 🙂 Но Logitech SetPoint мне при этом ставить страшно не хотелось, — а зачем — всё же работает на стандартных драйверах 😉 Чуть только поменять некоторый функционал 🙂

Недолгий поиск по реестру вывел на ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\18 где был параметр ShellExecute со значением calc.exe 🙂 Значение было исправлено на более соответствующее, и всё тут же заработало как надо 🙂 Под другими номерами рядом находятся и остальные кнопки. Например еще я создал строковый параметр ShellExecute со значением mailto: в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\15 а имевшийся там Association удалил. Так что теперь у меня при нажатии на клавиатуре кнопки с конвертом не запускается второй оутлук в добавок к уже запущенному, а просто быстро создается новое сообщение (или активизируется уже запущенный оутлук если он не активен).

Ах, да, ОС — Vista, клавиатура определилась как «Стандартная (101/102 клавиши) или клавиатура PS/2 Microsoft Natural»

Опубликовано в Tips, Vista. Комментарии к записи Keyboard Trick отключены

Декодер 2cp866

Больше года назад я написал функцию для перекодировки текста из одной кодировки в другую, с помощью функций .Net, однако недавно выяснилось (спасибо Евгению) что у .Net есть проблемы при конвертации в cp866. Так что я написал заглушку которая перекодирует текст в cp866, без использования .Net

ConvertTo-cp866.ps1

Begin { $ll = @'  ЎўЈ¤Ґ¦§Ё©Є«¬­®Їабвгдежзийклмноп '@ $ul = @' ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџ '@ } Process{ [string]::Join("", $( [int[]][char[]]$_ | foreach { if ($_ -ge 1072 -and $_ -le 1103) { $_ = [int]$ll[$_ - 1072] } elseif ($_ -ge 1040 -and $_ -le 1071) { $_ = [int]$ul[$_ - 1040] } [char]$_ } ) ) }

Чутье подсказывает что можно написать сильно проще, но сейчас в голову ничего не лезет 🙂

Использовать так:

[PS C:\Root] "abcdefABCDEFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" | >> ConvertTo-cp866.ps1 abcdefABCDEF ЎўЈ¤Ґ¦§Ё©Є«¬­®ЇабвгдежзийклмнопЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџ [PS C:\Root] "abcdefABCDEFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" | >> ConvertTo-cp866.ps1 | ConvertTo-Encoding cp866 windows-1251 abcdefABCDEFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ

На всякий случай выкладываю в виде файла (а то вордпресс опять какие-нибудь символы переврет).

Опубликовано в PowerShell, Practice, Scripting. Комментарии к записи Декодер 2cp866 отключены