Zinc: рецепты применения.
Контроль над мышью
для реализации на цинке под WinXP пример выглядит примерно так Код:
// задействуем обработчик события onAppExit чтобы при выходе "восстановить" скорость мыши. модераторам: в это тему можно складывать удачные примеры использования цинка. |
Использование функций VBS и WSH
Для использования многих системных функций, не имеющих реализации в цинке или реализованных с какими-то косяками, можно задействовать встроенный mdm-класс mdm.System.VBScript (как вариант mdm.System.JScript). В документации сказано, что метод mdm.System.VBScript.execute() ничего не возвращает. Однако это не так. Внимание - каждую строку тела формируемого скрипта не забываем заканчивать символом переноса строки. Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; Польза в том, что можно использовать vb-скрипты с обратной связью, получая от них данные. Например, задействовать встроенные в vbs функции обработки строк при помощи регулярных выражений, шелльные команды, системные и сетевые функции и т.п. Возможностей тут немало, стоит посмотреть документацию по VBS и WHS. Скачать доки по скриптам http://download.microsoft.com/downlo...scrdoc56en.exe Пример 1 Получить имя компа, юзера, домена. Эти сведения будут отражать имя пользователя ЗАПУСТИВШЕГО ПРОГРАММУ. Т.е. при использовании команды "запуск от имени...", например, будут возвращены имя и домен пользователя, от чьего имени был произведен запуск. В скриптах используются COM-объекты, такие как Shell, WScript, FileSystemObject и т.д. Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; Замена символов в строке. (см. мануал по vb-функции Replace) Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; Импорт текста из документа Word. В примере файл "Test line.doc" содержит несколько строк текста. Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; Пример 4 Регулярные выражения. В примере в передаваемой строке ищется адрес e-mail и производится его разбор. Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; Построчное чтение текстового файла. Аргументы вызова - полное имя файла и номер строки, которую нужно прочитать. Код:
var vbCode = 'Function GetLineTextFile(a,b,c,d,e)\r'; В случае, если передан номер строки, больший их общего количества в файле, возвращается номер последней строки и она сама. |
А нельзя ли сделать что-нибудь наподобие динамической библиотеки различных функци vbs?
Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; оригинальный xml здесь http://flasher.ru/forum/newreply.php...reply&p=677298 Код HTML:
<?xml version="1.0"?> Происходит динамическая подгрузка этого компонента и вызывается его метод mkdir(path), который создает папку 'path'. Проверку на "already exists" в этом примере я не делал, поэтому имя папки (в примере - NewFolder) должно быть уникальным, иначе - ошибка. Т.е. происходит что-то наподобие вызова библиотечной функции. Еще один занятный пример. Пример 7 Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; |
Получить список логических дисков
Код:
this.createTextField("driveList", 1, 20, 20, 200, 300); по принципу 0000000000001101 ...................DCBA 1 - соответствует наличию диска с буквой, 0 - отсутствует диск с такой буквой. В примере видно, что есть диски A, C и D. |
Программно изменить раскладку клавиатуры
Код:
// подключаем системную DLL user32.dll Параметры берутся из справки WIN API Еще о переключении раскладки. Вот так можно обойтись без подключения системных DLL. Код:
createTextField("test", 1, 20, 20, 200, 200); form - Название формы приложения (form title). Окно самому себе шлет message - запрос на изменение раскладки WM_INPUTLANGCHANGEREQUEST( численное значение 0x0050) c параметром-значением раскладки. |
Работа с реестром
C именованием методов цинка наблюдается путаница. Внесем некоторую ясность. Папки в левой панели редактора реестра regedit - разделы (или ветки 'branches'). Методы mdm.System.Registry.createKey, .getKeyNames и .deleteKey воздействуют именно на разделы. Далее, в правой панели regedit'a отображаются ключи: название, тип, значение, которые в данном разделе присутствуют. на пример Код:
var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName"); То же относится и к .saveString(), который принимает аргументами ветку, имя ключа, значение. С удалением раздела (ветки) нет проблем. Но вот с удалением ключа или его значения - непонтно. Метод deleteValue() не работает. Да и принимает он, судя по мануалу просто ветку, имя ключа туда не вставляется. Видимо, это косяк. Здесь http://www.mdmforum.com/forum/index....hl=deletevalue изложена пара достойных идей как этот косяк спрямить. В частности, осбого внимания заслуживает использование утилиты редактирования реестра из командной строки REG DELETE. Код:
var cmdExe = "REG DELETE раздел /v ключ"; Да, еще. Методы .load() и .save() облегченный вариант всех прочих. В том смысле , что они воздействуют на определенную ветку в реестре, и ее не надо им указывать, ветка эта формируется при первом вызове .save(), точное ее местоположение огрворено в мануале: HKEY_CURRENT_USER\Software\<название формы приложения>\ . пример Код:
go.onRelease = function() { возможности vb-скрипта это позволяют. А вот так можно получить имя текущего пользователя и домена на WinXP Код:
var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName"); Для корректной работы лучше использовать WSH-скрипт. Код:
// "голый" WSH-скрипт для работы с реестром может выглядеть так |
Экспорт в Word
пример работы с VBScript. В системе должен быть установлен Word, чтобы все работало. Код:
//каждую строку тела формируемого скрипта не забываем заканчивать |
Экспорт в Excel
Простенький пример выгрузки данных из цинк в MS Excel суть та же что и с Word, только в скрипте используется другой VBA-объект - Excel.Application Код:
//каждую строку тела формируемого скрипта не забываем заканчивать |
Запуск скринсейвера
небольшая фича, которая позволяет запустить программно скринсэйвер, установленный в системе по умолчанию Код:
// go-стандартная кнопка Далее окно само себе шлет системное сообщение на запуск скринсейвера. |
Часовой пояс GMT +4, время: 03:41. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.