Search
Write a publication
Pull to refresh

Виджет для Windows 7 c использованием ActiveX компонентов

Здравствуйте, уважаемые Хабравчане. Хочу поделиться опытом создания виджета для Windows 7 с использованием компонентов .Net.

Пользовательский интерфейсЗадача: необходимо создать виджет с простым интерфейсом, содержащим поле для ввода текстового значения (например размер изображения в пикселях) и поля для отправки файла-изображения. Интерфейс должен содержать кнопку «отправить», при нажатии на которую на сервер POST запросом виджет должен отправить значения параметров с формы. Такой виджет может использоваться например для загрузки файлов на хостинг изображений.



Решение: Аякс отправка информации с формы виджета средствами javascript не проходит, поскольку это допускается в пределах одного домена. Поэтому можно создать свой компонент для отправки информации на сервер и вызвать его из javascript кода виджета. Пример взаимодействия JavaScript и .Net можно посмотреть здесь .NET Interop for Gadgets – A C# GMail Inbox Reader Example.
Написанная в приведенном примере библиотека позволяет использовать свой ActiveX компонент, подключая его на лету, Далее можно обращаться к методам компонента в коде виджета.

По нажатию на кнопку «загрузить» выполняется следующее:
1. Cоздаем предоставленный в примере вспомогательный объект, позволяющий «подцепить» наш компонент
var builder = new GadgetBuilder();
builder.Initialize();

2. Собираем значения из полей формы
— Путь до файла
var path = document.getElementById('file1').value;

— Размер изображения
var size = parseInt(document.getElementById('thumb-size').value,10);

3. Подключаем наш компонент.
— Составляем путь к нашей библиотеке
var assemblyLocation = System.Gadget.path + "\\bin\\InteropTestProject.dll";

— Создаем экземпляр нашего компонента
var Test4Instance = builder.LoadTypeWithParams(assemblyLocation, "InteropTestProject.ImgLoader", false); 

— Обращаемся к нему, передавая нужные параметры. Тем самым отправляем на сервер данные из формы.
Test4Instance.Send('http://host/index.php',path,size);

Приведу класс InteropTestProject.ImgLoader для отправки POST запроса тут. Думаю, найдутся те, кому будет интересна реализация метода Post на C#.
На этом все. Успехов!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.