![]() |
Здравствуйте!
Никак не могу найти в Zinc, как получить список локальных дисков моего компьютера? |
Ссылка
Код:
this.createTextField("driveList", 1, 20, 20, 200, 300);или http://www.multidmedia.com/support/d...ion=show&id=26 |
Цитата:
|
Вопрос: как можно получить параметры языковой панели (текущий язык ввода) и менять их?
|
Раскладка
Код:
var user32 = new mdm.DLL(mdm.System.Paths.windows + "\\system32\\user32.dll");Жми на кнопку, вводи текст в поле ввода out2 и смотри что будет...:eek: С параметрами можно поэкспериментировать. Раскладка меняется только для окна проигрывателя. За подробностями и расширением функционала кода обращайся к WIN API. Да.. XP требуется.. вроде как. |
Спасибо, сейчас попробую.
|
Вдогонку
Наряду с mdm.DLL (самым на мой взгляд полезным инструментом цинка) есть еще очень хороший инструмент заставить цинк-приложение выполнять разного рода функции. mdm.FileSystem.saveFile позволяет скидывать динамически сгенерированный скрипт (VBS, JS, HTML) на диск и затем mdm.System.exec его запускать. (Если скрипт маленький, то mdm.SystemVBScript.execute без сохранения на диск). Я использовал это для генерации отчетов в форматах HTML, WORD - очень понравилось:o
Мощная справка по скриптам http://www.blindprogramming.com/ftp/...scrdoc56en.exe и куча ссылок http://www.blindprogramming.com. И еще одно. Может быть не очень серьезно. Цитата:
|
Zinc->Shh->Linux->Bash
Здравствуйте.
Продолжая эксперименты с цинком, я столкнулся с такой проблемой. Есть клиентская программа (цинк+windows). Ее задача - работа с файлами и папками на сетевом ресурсе, который расположен на сервере (Linux+Samba). Есть сложности с взаимодействием win-приложений с шарами на Linux в плане назначения атрибутов файлам/папкам. Для их преодоления я решил использовать утилиту Plink.exe (Putty command line tool), с помощью которой производится коннект с Linux-машиной по Shh и передается ( и выполняется, конечно) динамически формируемая команда оболочки bash. На пример, chmod 0755 path_to_somefile или chown user:group path_to_somefile. Все прекрасно работает до тех пор, пока в path_to_somefile отсутствуют ... да-да, именно - символы кирилицы. Сами по себе русские имена на линуксе нормально воспринимаются. Видимо, в момент передачи параметра Plink-у эта программа не может их как надо передать. В этом меня убеждет echo path_to_somefile >> my.log с каждой командой, а потом просмотр лога в линуксе - буквы попрежнему русские, но не те.. С папками/файлами на Samba обычные операции - delete,make,copy...- из цинка проходят нормально, и с русскими именами в т. ч. Но мне нужно именно менять атрибуты. В поиске (кл.слово-кодировка) в основном обсуждаются проблемы взаимодействия флэша с php-скриптами. Можно ли как-то перекодировать строку команды средствами только флэша? Код:
var StdOut = mdm.System.execStdOut("plink -ssh hostname -l user - pw passwd command"); |
Проблема решилась. Просто. Ремапом символов. Настроить Plink нужным образом не удалось. Правда, пока копался в исходника Plink-а, смог попутно настроить его на автоматическое сохранение ключа сессии без запроса (y/n).
|
Делал недавно авторан с видеопроигрывателем на Цинке. Понял, что косяков возникает немеренно по причине того, что используются всякие виндовс-медиа, квиктаймы... В зависимости от версии установленного плеера на разных машинах цинковский видеоплеер ведет себя по-разному... Сначала меня привлекла легкость расширения функционала флэша, однако думаю, что придется вернуться все-таки к Директору и MPEG Advance Xtre... Кто как выкручивается?
|
Вопрос таков: к Цинку была подключена дополнительная библиотека lib1 со своими внутренними командами (напр. save). Обращался к ней через fscommand("lib1.save","parametr1,parametr2").
Как теперь правильно обратиться к командам, используя синтаксис mdm. ... Просто mdm.lib1.save(parametr1,parametr2) не работает... |
Сам нашел: mdm.Extensions.lib1.save(...)
|
Вопрос: mdm.Dialogs.BrowseFile.ButtonText меняет текст кнопки "открыть/сохранить". А можно ли как-то поменять текст кнопки "отмена"?
|
У меня вот тоже вопрос..
Код:
mdm.System.Registry.load(3, "\\SOFTWARE"); |
Код:
var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName");Другими функциями не пользовался - не было надобности |
Цитата:
Могу предложить изготовить собственное окно "Открыть файл" средствами цинка и делать с ним все что угодно :). Исходник я выкладывал на http://www.multidmedia.com/support/d...on=show&id=115 . 114 - то же только для "Открыть папку" |
Цитата:
|
2 alexcon314
хочу уточнить по поводу 45 поста. В dll я не соображаю, подскажи пожалуйста все таки как узнать какая включена раскладка в данный момент. может есть идея, как создать броадкастер, который бы рассылал это событие?? (иметтся ввиду переключение раскладки) |
Вложений: 1
Ну я же подсказывал - WinAPI :)
Ну хорошо. Я изготоаил dll-ку gkbl.dll. Ее нужно положить рядом с экзешником, иначе в скрипте нужно прописать полный путь к ней (желательно без русских символов, во избежание...) Код:
createTextField("out", 1, 20, 20, 200, 20);Это есть имена раскладок в винде. На счет бродкастера нет пока идей, кроме тупого опроса по интервалу текущей раскладки с помощью этой функции (var res = dll.call("string", "GetKBL")) но это не есть красиво.. Файл с dll-кой во вложении. PS. C вложением проблема - не хочет никак вкладываться. :bb: Давай на e-mail сброшу а ... заработало вроде |
Для MuXys
Возможно имеет значение версия цинка. У меня 2.5.0.27 Но это не главное. Действительно, с именованием методов цинка наблюдается некоторая путаница. Папочки в левой панели regedit'a - разделы (или ветки '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() не работает. Да и принимает он, судя по мануалу просто ветку, имя ключа туда не вставляется... Косяк по ходу. Увы. Впрочем, это на мой взгляд не существенно. Удаляй ветку или изменяй значения ключей на непотребные. Ну, а про мощь dll я уже высказывался :) - можно и тут копнуть если ооочень надо. Советую заглянуть сюда 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() { |
Ну да. Здесь понятно. Просто не хочется мусорить в реестре оставляя левые ключи..
Самое ценное открытие/изобретение (для меня) в этой ветке - возможность испольования 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 |
неа, не надоел :)
Мануал отличный! Я, кстати, много интересного для себя нахожу на сайте http://www.intuit.ru/courses.html -- всем советую. |
В ActionScript classes > Key > getAscii (Key.getAscii method) есть один недостаток -- The ASCII values returned are English keyboard values (т.е. какая бы раскладка не была включена, вернется все равно английский аски). Бился над этой проблемой кучу времени. Единсвенный, относительно нормальный, способ, который я придумал -- это английский аски код пропускать через массив.
Код:
this.createTextField("my_txt", 0, 100, 100, 100, 100);У меня есть подозрения, что это как то можно обойти при помощи цинка. Есть какие-нибудь мысли по этому поводу? |
Вложений: 1
Уточни: ты автоматическую транслитерацию задумал сделать? Или тебе нужно просто, чтобы принудительно всегда печаталось по русски? Или нужно печатать по русски при реально включенной английской раскладке? Не догоняю..
Цитата:
А не работает до конца потому, что при смене раскладки Key.getAscii() может для некотрых кнопок возвращать разные значения в отличие от Key.getCode(), кстати, который возвращает код клавиши один и тот же не зависимо от раскладки. В подмогу вложение. |
ты своей флэшкой сам ответил на свой вопрос!! :)
и при русской и при аглийской раскладке возвращаются английский аски!!! Т.е. в любом случае вернется нерусский код :) Попрубуй после того как ты считал код нажатой клавиши, вывести русский символ -- ничего не получится!! Как узнать код русской нажатой клавиши? -- вот это я имел ввиду. |
Код клавиши (не символа) не зависит от раскладки. Просто потому что кнопки на клавиатуре одни и те же.
|
Вложений: 1
Неужели это продолжение темы http://flasher.ru/forum/showthread.php?t=92449 ? Значит ли это, что тебе нужно ТОЛЬКО узнать КОД символа на нажатой кнопке в русской раскладке и напечатать его? Тогда попробуй вот это - см. вложение.
Если без цинка. И если это то, что тебе надо. С цинком должно быть проще - принудительно переключать раскладку на русскую по какому нибудь событию и какие проблемы после этого - я не понимаю. |
Вдогонку
Вложений: 1
Забыл "залипание" SHIFT'а сделать. Исправился.
|
2 alexcon314 выложи свой код поджалуйста!
флэшки мне мало о чем говорят... |
Код
Вложений: 1
код во .fla:
Код:
#include "remap.as"Привязка происходит именно к кодам клавиш, а не к Ascii. В remap.as просто вручную расписаны по кнопкам символы. Все это можно заточить получше. Это всего лишь рабочий вариант. Косяк: если вручную нарисовать TextField и дать ему тип input - работать будет гораздо хуже. Поможет my_txt.restrict = "^a-z\\A-Z" |
Попытался построить broadcaster-listener события "изменилась раскладка". Вариант с вызовом dll-функции по интервалу из цинка через setInterval или onEnterFrame отпадает, т.к. при коротких интервалах вызова цинк падает. Почему - не выяснял.
Пробовал вариант .onKeyDown (.isDown) c клавишами Ctrl+Shift или Alt+Shift. Установленный в системе способ переключения раскладки клавишами можно о узнать в реестре. С Ctrl куда ни шло. А вот Alt засечь не получается. Тупик. |
| Часовой пояс GMT +4, время: 19:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.