![]() |
Ну да. Здесь понятно. Просто не хочется мусорить в реестре оставляя левые ключи..
Самое ценное открытие/изобретение (для меня) в этой ветке - возможность испольования kernel32.dll. Супр просто. А не знаешь еще системных либов такого рода? |
Если ты спрашиваешь о системных либах widows, то это неконкретный вопрос. Библитоек немало и все содержат массу (тысячи!) очень полезных функций. kernel32, user32, advapi32, gdi32 - все это интересно.
Вообще я пользуюсь справочником Win32 Programmer Reference, где многое изложено о функциях этих библиотек. (есть еще msdn - ресурсы) Правда, зачастую напрямки их подпихивать в цинк не удается в силу специфики формата вызова, но я приладился вроде обертывать их в dll-обертки и уже в таком виде подсовывать в цинк. Пример рядом - пост про то как определить текущую раскладку. На счет того что свупер просто - уточнил бы: супермощно :) |
2 alexcon314
спасибо за помощь! не мог ты подсказать, где можно найти инфо про эти библиотеки в понятной для человека форме :) |
Ну... уфф.. ты спросил :)
Полгода назад я боялся слова dll, поверишь? Теперь сам их пишу :). Всю инфу я качал из инета и искал в инете. Какие проблемы? Ссылок кучи. search. Будут конкретные вопросы - пожалуйста, обращайся. |
:umnik2:
посоветуй с чего начать... в сети дурдом какой-то :) на каком языке это все пишется? |
Вложений: 1
К цинку можно подцепить dll, написанные на C++ или на Delphi. Поэтому, для начала нужно обзавестись соответствующими инструментами программирования: MS Visual C++, MS VisualStudio, Borland Delphi или Borland C++ - это наиболее распространенные IDE. Я больше использую С++. Неплохо бы приобрести начальные знания по этим языкам. Как - это на любителя. По мне лучше приобрести книгу в магазине. Правда, с этим у меня проблемы - в моем городе просто нет таких магазинов :). Поэтоиу путь лежит на программерские форумы опять же, где добрые люди выкладывают ссылки на электронные мануалы десятками. Придется волей-неволей повариться в этом соку прилично времени, если новичок. Следует обратить внимание на WinAPI - собственно к нему и надо стремиться, вобщем-то. Это "собрание функций сидящих в винде и в ее библиотеках". Если не хочешь сам их программировать (а это долго) лучше использовать готовые.
Забиваешь для начала "программирование С++" в поиск - и понеслась. Когда созреешь, забивай в поиск "dll" - и снова понеслась. ЧЕСТНО(!), я не помню таких ссылок, где было бы все и сразу. Инфу нужную таскаешь в основном по крупицам - так уж повелось. В конце концов упираешься в пример работающего исходника какой-нибудь dll-ки. Вот тут я тебе помогу сразу, см. вложение. Тестить dll можно прямо в окне цинка. Там есть Tools->Extension Creator. Цепляешь в этом креаторе dll-ку, он тебе высветит доступные функции, в ней заложенные. На следующей закладке задаешь тестовые аргументы выбранной функции и тип возвращаемого значения, если нужно. Для этого нужно хорошо представлять себе что за функцию ты тестишь. На следующей закладке грузишь dll и жмешь "выполнить". Если все хорошо, получишь от dll достойный ответ. Ну а как из скрипта цеплять dll я уже показывал. Но лучше начать с готовых виндовых dll-ек типа kernel32 и т.д. Посмотри на них в креаторе. на их функции. Где-то ранее в этой же теме я выкладывал скрипт, вызывающий системный "писк" и скрипт, перемещающий файл - это как раз через kernel32 работает. Главное - найти хороший справочник по этим функциям то есть справочник по ...- да-да... по Win API. См. мой пост 62 выше. Выложить его здесь не могу - он весит прилично. Постараюсь выложить на http://mdm-zinc.narod.ru если будет время ... или опять же - search. И еще посоветую (во второй раз уже!) - обрати внимание на mdm.System.VBScript, массу примочек можно сделать не прибегая к dll напрямую, а через VB(JS)-скрипты, там все покажется проще. Вот так примерно. Ты уж извини за пространный ответ.:( P.S. исходник dll - это проект сделанный в MS VisualStudio 2003. При желании можно его приспособить и под другие IDE |
Два в одном
Вложений: 1
Подумал, почему бы не слить функции "изменить раскладку" и "узнать текущую раскладку" в одну dll?
Код:
var dll = new mdm.DLL("kbl.dll");Сама dll-ка во вложении. (Положить ее надо рядом с экзешником.) P.S. Просьба отписаться, если не работает. Интересно все-таки.. |
Все работает! Прошлое тоже работало после небольшой корректировки.
Выкачал справочник точно такой как там в хэлпе, буду разбираться, очень интересно. А функцию нельзя никак заставить результат без нолей возвращать? (просто интересно) Extensions are a fantastic new feature -- это точно. dll -- это просто напросто сборник процедур и функций -- я правильно понял? А что к примеру полезного можно сделать при помощи метода System.JScript.execute()? |
Функция GetKeyBoardLayoutName возвращает именно с нулями, но при "обертывании" в свою dll пишется функция из которой уже она вызывается и возвращаемое значение можно привести к любому виду в самой этой оберточной dll-ке. Это не проблема. Можно заставить ее возвращать вообще "RU" Или "EN".
По поводу VBScript, JSScript я давал ссылку на справочник по скриптам в посте сразу за самым первым примером с раскладкойь (не помню номер, наверно 46-47). Почитай этот мануал, там много интересного. ПРавда, обратную связь с функцией в VB(JS) скрипте не так просто организовать. Но в принципе это преодолимо, а при определенных условиях и вовсе не имеет значения. Для примера: в цинке есть косячок (один из первых, с которым мне пришлось столкнуться), состоящия в томБ что RemoveFolder - метод удаляет только (и только) пустую папку, что не приемлемо. Приходилось писать рекурсию. Само по-себе не обременительно, но не приятно. Через соответствующий VBScript этот косячок убирается на раз. Без ковыряний в API-шных функциях. Но что мне особо понравилось (извините, модераторы, за невольное повторение) - это динамическая выгрузка данных в разные форматы - в Word, Excel, HTML (последнее, конечно без всяких скриптов, просто упомянул до кучи:)). Никто не мешает и обработку указанных форматов сделать, хотя это посложнее. И без всяких ActiveX в цинке (они чего-то не очень мне понравились). Кстати, System.JS(VB)cript.execute() тоже косяка кидает. Проблема решается выгрузкой скрипта на диск и последующим запуском. При выгрузке больших по размеру скриптов, рекомендуется делать построчную выгрузку с помощью .appendFile - метода. Еще мне понравился запуск command line - утилит. Их много всяких разных и помогают порой серьезно. Например см. мой пост в этой теме "Zinc->Shh->Linux->Bash" (48 пост вроде). Ну нет у винды shh dll-ки, а поди ж ты - работает shh :)! Но dll, конечно, остается на первом месте. |
Выгрузка в Word
Если я Вам еще не надоел :), позволю себе привести пример работы с VBScript. В системе должен быть установлен Word, чтобы все работало.
Код:
// имитация динамического массива данных; например, массив - результат выборки из БД MySql |
| Часовой пояс GMT +4, время: 19:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.