Форум 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 - мне там ребята активно помогают.


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

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