Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   {mdm}Zinc (http://www.flasher.ru/forum/showthread.php?t=81193)

udaaff 05.05.2007 05:23

спасибо за помощь!!!

alexcon314 06.05.2007 12:23

Отследить измененние раскладки
 
Предлагаю пример простого отлова события "изменилась раскладка".
Для работы нужна kbl.dll (см. вложения ранее в этой теме)
Код:

var dll = new mdm.DLL("kbl.dll");
function GetKBL():Number {
        dll.clear();// <- В ОТСУТСТВИЕ ЭТОЙ СТРОЧКИ ЦИНК МОЖЕТ УПАСТЬ
        var parameter = dll.addParameter("string", "");
        var res:Number = dll.call("string", "GetKBL") * 1;
        return res;
}
currentKBL = GetKBL();
function CheckKBL() {
        var gkbl = GetKBL();
        if (currentKBL != gkbl) {
                mdm.Dialogs.prompt("KeyBoard Layout changed to " + gkbl);
                currentKBL = gkbl;
        }
}
var interval = setInterval(CheckKBL, 10);

dll.clear() очищает список параметров dll, который в цинке имеет, кстати, "сквозной" характер. Например. добавленный ранее параметр попадает в аргументы при следующем вызове уже другой функции. Поэтому, если вызывается несколько функций из одной dll слдедует непосредственно перед вызовом делать dll.clear(). А так, конечно можно установить единственный параметр сразу по загрузке и вызывать одну и ту же функцию сколько хочешь, в этом случае dll.clear() просто ни к чему.
Такой способ отслеживания изменения раскладки заметно грузит процессор.
Недавно я выявил возможность ставить хуки (HOOK'S) из цинка прямо в систему. Это более рациональный подход, к тому же хуки позволяют отслеживать еще много чего. Будет рабочий пример - выложу.

udaaff 07.05.2007 23:15

После того как я пытаюсь открыть флэшку с этим кодом в цинке (pls select an input file), он виснет (v2.5.0.23).
Все равно вариант слишком жесткий, если учитывать, что раскладка в большенстве случаев вообще даже меняться не будет или будет меняться от силы несколько раз. Вариант с отловом shift+alt и shift+ctrl, тоже между прочим не всегда срабатывал бы, раскладку всетаки можно поменять и другими сочетаниями... Так что тупик плотный.

alexcon314 07.05.2007 23:44

По поводу коннекта к MySQL - серверу
 
Для __etc
На днях нашел время и просмотрел темы форума выданные поиском по ключу "zinc". Нашел несколько интересных (тема Hak'a вне конкуренции, дай бог ему здоровья).
Уважаемый __etc, поправь меня, если ошибаюсь. По-моему, в твоих нескольких постах я прочитал примерно следующее: Zinc коннектится к MySql, но только ЛОКАЛЬНО. Меня это несколько расстроило и я решил уточнить: это означает - коннект возможен только на 127.0.0.1 (что, gо-моему, неверно), или ты имел в виду локальную сеть. Проверялось ли кем-нибудь ли инетовское соединение цинка к MySql?
Сомнения обусловлены тем фактом, что я неоднократно использовал цинк в работе с MySql, в т.ч. и по локальной сети. Не обошлось без проблем, но они отнсятся к серверу, не к цинку. Хотелось бы проверить работу цинка с сервером в интернете.
Или мои сомнения напрасны и все будет работать?

alexcon314 08.05.2007 00:02

Для udaaff.
Согласен. Последний пример из разряда "последняя надежда рухнула". Хотя у меня с ним цинк не падает. Только процессор грузится на 50-60%.
С хуками есть подвижки. Ставить несложно. На ту же клавиатуру. Пробовал - работает, на уровне "нажал кнопку - раздался писк". Alt, да что там Alt - все клавиши цепляются железно. Но все это бесполезно, пока нет обратной связи. Т.е. нужно сообщать цинку о событии, которое системнй хук поймал. Как? Хотелось бы понять...Есть варианты, но громоздкие уж очень.. Будем думать. Понятное дело, клавиатурным хуком мысли не ограничиваются.
P.S. Вот, блин, а когда-то я мечтал стать флэшером :).

etc 08.05.2007 11:41

Цитата:

Сообщение от alexcon314
Для __etc
На днях нашел время и просмотрел темы форума выданные поиском по ключу "zinc". Нашел несколько интересных (тема Hak'a вне конкуренции, дай бог ему здоровья).
Уважаемый __etc, поправь меня, если ошибаюсь. По-моему, в твоих нескольких постах я прочитал примерно следующее: Zinc коннектится к MySql, но только ЛОКАЛЬНО. Меня это несколько расстроило и я решил уточнить: это означает - коннект возможен только на 127.0.0.1 (что, gо-моему, неверно), или ты имел в виду локальную сеть. Проверялось ли кем-нибудь ли инетовское соединение цинка к MySql?
Сомнения обусловлены тем фактом, что я неоднократно использовал цинк в работе с MySql, в т.ч. и по локальной сети. Не обошлось без проблем, но они отнсятся к серверу, не к цинку. Хотелось бы проверить работу цинка с сервером в интернете.
Или мои сомнения напрасны и все будет работать?

Скорее всего будет работать. Что-то я не помню, чтобы я это писал вообще :D

alexcon314 09.05.2007 01:27

Еще о переключении раскладки
 
Код:

createTextField("test", 1, 20, 20, 200, 200);
test.type = "input";
test.border = true;
test.multiline = true;
test.wordWrap = true;
go.label = "EN";
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][0] != "(some caption)") {
        i++;
}
var hwnd = wList[i][1];
//mdm.Dialogs.prompt(hwnd + " " + wList[i][0]);
var kblName = 0x04190419;
go.onRelease = function() {
        mdm.System.postMessage(hwnd, 0x0050, 1, kblName);
        switch (kblName) {
        case 0x04190419 :
                kblName = 0x04090409;
                go.label = "RU";
                break;
        case 0x04090409 :
                kblName = 0x04190419;
                go.label = "EN";
                break;
        }
};

Вот так можно обойтись без dll. В поле test можно проверять язык ввода.
(some caption) - Название формы приложения (form title). Окно самому себе шлет message - запрос на изменение раскладки WM_INPUTLANGCHANGEREQUEST(0x0050)

alexcon314 16.05.2007 09:24

Системные хуки в цинке
 
Здравствуйте.
Хочу привести рабочий пример с отловом событий "изменение раскладки" и "правый клик мыши" в цинке с помощью хука (hook):
Код:

mdm.Network.UDP.Socket.startServer(4000);
createTextField("out1", 1, 20, 20, 200, 20);
out1.type = "dynamic";
out1.border = true;
out1.text = "See result here.";
createTextField("out2", 2, 20, 50, 200, 200);
out2.type = "input";
out2.multiline = true;
out2.border = true;
out2.text = "Type your text here.";
createTextField("out3", 3, 250, 250, 250, 20);
change_kbl.onRelease = FollowKBL;
get_kbl.onRelease = GetKBL;
hook.onRelease = function() {
        Hook(true, "Enable hook result is ");
};
unhook.onRelease = function() {
        Hook(false, "Disable hook result is ");
};
function GetKBL():Number {
        dll.clear();
        var parameter = dll.addParameter("string", "");
        var res:Number = dll.call("string", "GetKBL") * 1;
        if (res != 0) {
                out1.text = "Keyboard layout name is " + res;
        } else {
                out1.text = "Error has occured.";
        }
        return res;
}
function FollowKBL() {
        dll.clear();
        var parameter = dll.addParameter("integer", "");
        var res = dll.call("integer", "FollowKBL") * 1;
        if (res != 0) {
                out1.text = "Keyboard layout has changed.";
        } else {
                out1.text = "Error has occured.";
        }
        Selection.setFocus(out2);
}
function Hook(bSet:Boolean, str:String) {
        dll.clear();
        var parameter = dll.addParameter("boolean", bSet);
        var res:Number = dll.call("integer", "SetHook") * 1;
        out3.text = str + res;
        // если res не 1, то хук не установился (не удалился)
}
mdm.Network.UDP.Socket.onData = function(myObject) {
        out2.text += newline + myObject.data;
};
var dll = new mdm.DLL("kblhook.dll");

dll-ка здесь: http://mdm-zinc.narod.ru/docs/kblhook.rar.(размер rar ~113кБ, здесь почему-то не выкладывается даже по-частям))
В ней зашиты ранее использовавшиеся функции "изменить раскладку", "получить имя текущей раскладки" (FollowKBL(), GetKBL()). Функция Hook ставит хук (при bSet=false соответственно убирает хук), отслеживающий сообщения WM_INPUTLANGCHANGEREQUEST и WM_RBUTTONUP в потоке приложения и передает в цинк результат через сокет. Для этого в коде присутствует "mdm.Network.UDP.Socket.startServer(4000);". Порт 4000 зашит в dll, поэтому его менять не следует. Так же выводятся абсолютные координаты курсора в момент прихода WM_RBUTTONUP: "mouse:rclick:x:y".
P.S. файл kblhook.dll надо положить рядом с .exe

alexcon314 04.06.2007 18:51

Кодировка xml выгруженного из цинка.
 
Здравствуйте.
При записи на диск файла .xml в цинке получается кодировка ANSI. Чтобы передать .xml в Excel требуется кодировка UTF-8.
Иначе файл не открывается. В остальном формат файла правильный.
Т.е. после пересохранения созданного файла в блокноте с опцией UTF-8 все работает.
Как можно обойти эту проблему?

MyXus 04.06.2007 22:10

Попробуй поковырять винапи.. Я сам щас посмотрел бегло - не нашел. Но мне кажется должно быть.
Ну и спроси на форуме цынка.
Я перешел на SWFKit - мне там ребята активно помогают.

alexcon314 05.06.2007 13:49

Кажется, проблема решена.
<?xml version=\"1.0\" encoding=\"windows-1251\"?>
добавил в выгружаемый файл (было <?xml version=\"1.0\"?>). Заработало.
P.S. Нужно было сделать данные доступными в таблицах OpenOffice.org
В MS Excel выгрузить и так можно скриптом vbs.

alexcon314 06.06.2007 08:52

Экспорт в Excel
 
Простенький пример выгрузки данных из цинк-.ехе в MS Excel
Код:

function Export() {
        var vbs:String = "";
        vbs += "Set objExcel = CreateObject(\"Excel.Application\")\r";
        vbs += "objExcel.Visible = True\r";
        vbs += "Set objDoc = objExcel.Workbooks.Add()\r";
        vbs += "objDoc.Sheets(1).Activate\r";
        mdm.FileSystem.saveFile(mdm.System.Paths.appData + "toExcel.vbs", vbs);
        vbs = "";
        var i = 0;
        while (ds[i][0]) {
                vbs = "";
                vbs += "objDoc.Sheets(1).Range(\"A" + (i + 1) + "\").Value=\"" + ds[i][0] + "\"\r";
                vbs += "objDoc.Sheets(1).Range(\"B" + (i + 1) + "\").Value=\"" + ds[i][1] + "\"\r";
                vbs += "objDoc.Sheets(1).Range(\"C" + (i + 1) + "\").Value=\"" + ds[i][2] + "\"\r";
                vbs += "objDoc.Sheets(1).Range(\"D" + (i + 1) + "\").Value=\"" + ds[i][3] + "\"\r";
                vbs += "objDoc.Sheets(1).Range(\"F" + (i + 1) + "\").Value=\"" + ds[i][4] + "\"\r";
                mdm.FileSystem.appendFile(mdm.System.Paths.appData + "toExcel.vbs", vbs);
                i++;
        }
        mdm.System.exec(mdm.System.Paths.appData + "toExcel.vbs");
}

ds - двухмерный массив с данными.

MaxD 06.06.2007 12:57

Для alexcon314
Я точно не помню, но когда-то эту же проблему пытался решить добавлением в xml первого тега <?xml version="1.0"?> или какого-то еще. Вот получилось или нет - вспомнить не могу :-)

Loomy 06.06.2007 17:23

вопрос по ZINC

он глотаетмои ссылки, которые я указываю во внешнем хтмл подгружаемом во флэш.
В хтмл файле содержатся ссылки на файлы, но когда я создаю ехе-прожект эти ссылки перестают работать. Что мне делать!!! ! Я в отчаянии прогу надо вечером сдать а у меня такой аврал!
Выручайте!

alexcon314 06.06.2007 18:03

Не очень понял.
попробуй так: в html'e
Код:

<a href='asfunction:Run,path_to_file><u>ссылка</u></a>
в коде ехе:
Код:

function Run(path:String){
    mdm.System.exec(path);
}

Только путь укажи так C:\\Folder\\<filename> - c двойным слэшем. И в html'e не заключай его в кавычки
Код:

<a href='asfunction:Run,с:\\Folder\\myfile.txt'><u>ссылка</u></a>

Loomy 06.06.2007 18:36

1. Я спрограмил (с горем пополам) флэшку.
2. Весь контент (текст) находится во внешнем хтмл файле - sample.html
3. В файле sample.html есть строки содержащие ссылки <a href blah blah blah>
4. Когда был SWF и даже ЕХЕ (стандартный флэшевый) ссылки работали
5. Как только я сделал ехе через ZINC ссылки работать перестали
6. Как мне заставить ссылки в файле sample.html работать? Надо менять HTML или что?
7. go to 1 while understand
8. if understand then go to 9
9. print "COOL"
10 stop

СПАСИБО!!!

ПС в коде ЕХЕ ничего не понимаю... может хтмл можно подработать?

alexcon314 06.06.2007 18:43

Ссылки куда ведут? Что за программа?

Loomy 06.06.2007 18:48

короче ))) ...

вот часть скрипта я гружу во флэш файл
story.load("txt/mp3h.html")

вот ссылки в mp3h.html
<a href="05 Idea_2006\Idea.m3u">Play all!</a>

SWF работает, а после обработки Цинком не работает...

Q: как это исправить?

alexcon314 06.06.2007 20:30

Все равно не понял структуру проекта твоего, но если по-простому объяснить сам принцип, то так.
Делай новый .fla, в первый кадр вствь этот код, опубликуй ролик (Shift+F12):
Код:

this.createTextField("out", 1, 220, 180, 100, 40);
out.html = true;
var a:XML = new XML();
a.load("ref.html");
a.onLoad = function() {
        out.htmlText = a;
};
function Run(path) {
        mdm.System.exec(path);
}

рядом с ним положи ref.html:
Код:

<a href='asfunction:Run,calc'><u>Calc</u></a>
скомпилируй в цинке. по нажатию на ссылку должен запуститься калькулятор.
Надо, чтобы запускались твои файлы? - замени ссылки в своих html'ax по образцу в этом и предыдущем посте. и добавь в код swf'a функцию Run. Иначе, это вопрос не по цинку.

Loomy 06.06.2007 22:29

Спасибо Alex! Ты настоящий друг!!!
Напряг моск поеб№;%я с заменой путей к файлам и все получилось!
Ещё бы zinc найти ломаный, чтоб мое искусство своими триальными глупостями!

Огромное спасибо! Ты лучший!!!

HUGS AND KISSES!!!

alexcon314 06.06.2007 22:59

Цитата:

Ещё бы zinc найти ломаный
Лучше заработать и купить. Что по нашим временам <$300? Инерция - привыкли к лому, а лом то и не в моде ныне...

etc 06.06.2007 23:17

Loomy получает плюс.

Loomy 07.06.2007 14:17

Снова проблема!!!

Проект пропущенный через ЦИНК безупречно работает, но как только я записал его на CD работать он перестал!
говорит:

ACCESS VIOLATION AT ADDRESS 40540000. READ OF ADDRESS 40540000
и далее:
ACCESS VIOLATION AT ADDRESS 0045A1D7 IN MODULE 'мояпрограмма.ехе'. READ OF ADDRESS 00000180

Компилировал ехе в MDM ZINC v.2.5.0.23 TRIAL EDITION
Писал на CD-RW при помощи NERO

Помогиет кто может! Моя жизнь на волоске!!!

Loomy 07.06.2007 14:22

Цитата:

Сообщение от __etc
Loomy получает плюс.

Не мне надо плюс а alexcon'у (хотя ему наверное их уже некуда вешать)
Но черт возьми все равно приятно!

alexcon314 07.06.2007 14:29

Цитата:

Сообщение от Loomy
Не мне надо плюс а alexcon'у (хотя ему наверное их уже некуда вешать)

Ну, спасибо! Удружил! :D :D :D

Loomy 07.06.2007 15:10

Повторюсь...
Проект пропущенный через ЦИНК безупречно работает, но как только я записал его на CD работать он перестал!
говорит:

ACCESS VIOLATION AT ADDRESS 40540000. READ OF ADDRESS 40540000
и далее:
ACCESS VIOLATION AT ADDRESS 0045A1D7 IN MODULE 'мояпрограмма.ехе'. READ OF ADDRESS 00000180

Пробовал запускать проект на CD, на флэшке, на другом компе... работать нивкакую не хочет... работает только на родном компе... что за лаг не могу никак понять!! есть способы его исправить?

помигите кто-нибудь!!!

alexcon314 07.06.2007 15:59

Это не простая проблема. Если хочешь ее решить - приготовься...( без шуток)
Для начала попробуй сделать как можно меньшей длины названия: Form Caption, Application Title в проекте цинка, уменьши имя .ехе, никаких русских букв, пробелов - только делай все последовательно, а не все сразу меняй и пиши, я пока на связи... Да, какая у тебя операционка? Впрочем, это для интереса..

etc 07.06.2007 16:33

Loomy, плюс — это не предупреждение, а не повышение репутации.

alexcon314 07.06.2007 16:35

Цитата:

Сообщение от __etc
Loomy, плюс — это не предупреждение, а не повышение репутации.

Ну все, запутали парня!

Loomy 07.06.2007 17:22

Цитата:

Сообщение от __etc
Loomy, плюс — это не предупреждение, а не повышение репутации.

Тогда... ВСЕ ВЫ АДМИНЫ ОДИНАКОВЫЕ!!! АААААА НЕНАВИЖУ НЕНАВИЖУ!!!... а за что плюс то? да как так то? фашисты! :mosking:

alexcon314:
сел по-удобнее я честно говоря на что-то подобное думал но не мог поверить в реальность... окей ща попробуем.

спасибо!

etc 07.06.2007 17:59

alexcon314, Loomy, первому из вас я могу поставить плюс за флейм в 109-ом посте, а Loomy может получить помимо плюса за флейм, ещё и +5 и отправится в бан. Loomy получил плюс за ломаный Zinc.
На этом посте флейм прекращается.

Loomy 07.06.2007 18:05

Цитата:

Сообщение от alexcon314
Это не простая проблема. Если хочешь ее решить - приготовься...( без шуток)
Для начала попробуй сделать как можно меньшей длины названия: Form Caption, Application Title в проекте цинка, уменьши имя .ехе, никаких русских букв, пробелов - только делай все последовательно, а не все сразу меняй и пиши, я пока на связи... Да, какая у тебя операционка? Впрочем, это для интереса..

Все поправил все работает!
Есть кое-какие косяки, но они из-за моей невнимательности :wacko:

Спасибо большое!

alexcon314 07.06.2007 23:43

Loomy, будет очень хорошим тоном, если ты опишеш здесь свой баг и то, как ты с ним справился. Помогли тебе - помоги другим.

alexcon314 06.07.2007 11:48

запуск скринсейвера
 
небольшая фича, которая позволяет запустить программно скринсэйвер, установленный в системе по умолчанию
Код:

go.label = "screensaver";
mdm.Application.doEvents();
formTitle = mdm.Forms.MainForm.title = "form";
appTitle = mdm.Application.title = "app";
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][1]) {
        if (wList[i][0] == formTitle || wList[i][0] == appTitle) {
                hwnd = wList[i][1];
        }
        i++;
}
go.onRelease = function() {
        mdm.System.postMessage(hwnd, 0x0112, 0xF140, 0);
        };

go - это кнопка, title у формы устанавливается программно, чтобы получить хэндл окна приложения через getWindowsList, но можно устанвить титле и вручную. Важно только чтоб фактический титле совпал со строкой сравнения в цикле while.
Далее окно само себе шлет системное сообщение на запуск скринсейвера.

MaxD 17.08.2007 13:14

Здравствуйте!
Такой вопрос: необходимо реализовать с помощью Zinc функцию импорта-экспорта файлов. Для этого необходимо загнать эти файлы в один архив (можно без сжатия). Я так понимаю, что сделать это можно только с помощью внешней dll. Так вот: можно ли для этого использовать какую-нибудь библиотеку windows? Какие есть еще варианты?

alexcon314 20.08.2007 09:19

Если речь идет об архивации/разархивации файлов из под цинка, то рекомендую воспользоваться каким-нибудь архиватором, поддерживающим работу с ним из командной строки.
Пример - бесплатный архиватор 7-Zip. Скачивай http://www.7-zip.org/, устанавливай и проверяй код. Само собой, пути к файлам должны быть реальными :).
Код:

var path7z = "c:\\Program Files\\7-Zip\\7z.exe";
var pathFile = "D:\\blabla\\somefile.txt";
var pathArch = "c:\\blabla\\somefile.zip";
var StdOut = mdm.System.execStdOut(path7z + " a -tzip " + pathArch + " " + pathFile);
out.text = StdOut;

В текстовое поле out получается вывод о работе команды. Создается архив .zip из соотв. файла.
Список доступных для использоваения команд 7-Zip смотри в мануале программы, который поставляется вместе с дистрибутивом. Команд разных там достаточно для организации полноценной работы.
Что касается dll, то их здесь использовать ни к чему.

MaxD 20.08.2007 11:50

Спасибо. А как насчет виндового zip-архиватора?

alexcon314 20.08.2007 14:00

Цитата:

Сообщение от MaxD
А как насчет виндового zip-архиватора?

Просвети, что это такое?
В поставку к винде (в дистрибутив в смысле) включен zip-архиватор?
Насколько я знаю, нет. Все за денежку покупается. Или 7-Zip юзай, он бесплатный.

MaxD 20.08.2007 15:25

Да есть вроде в винде стандартный ZIP-архиватор.

DarkLight 20.08.2007 15:37

есть, но только в XP и выше


Часовой пояс GMT +4, время: 19:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.