Существуют различные COM-объекты, доступные для JScript с использованием класса ActiveXObject
. Вы можете написать свою собственную сборку взаимодействия, используя .NET, но это создает несколько проблем:
- Каждый открытый класс в сборке должен быть зарегистрирован на хост-машине перед использованием. Существуют проблемы, возникающие при записи и создании ключей в x64, с которыми объект WScript.Shell борется за определенные части реестра. Однако WMI хорошо работает для регистрации.
- Из экземпляра dll сборки заблокирована и не может быть удалена, даже если гаджет закрыт. Это главным образом проблема, когда деинсталляция / обновления программного обеспечения вступают в игру. После завершения процесса sidebar.exe файл становится разблокированным.
- Отмена регистрации кажется проблематичной, даже с WMI. Сроки отмены регистрации часто являются проблемой (вы делаете это при выгрузке или после создания экземпляра? Что, если с его помощью открыто несколько гаджетов?). Кроме того, не отмена регистрации оставит ненужные ключи реестра на компьютере пользователя, если он / она решит не сохранять ваш гаджет.
- Если гаджет на 100% полагается на сборку и по какой-либо причине сборка не может быть зарегистрирована на компьютере пользователя, то весь доступ к гаджету для этого пользователя недоступен. Будьте готовы к некоторым низким оценкам в Windows Live Gallery.
Если вы решили, что вам действительно нужно написать сборку. Я бы посоветовал вам, если вы пишете свою собственную сборку для гаджета, это расширение базовой функциональности вашего гаджета и вы гарантируете, что гаджет имеет доступные функции, если пользователь не сможет использовать сборку.
У моей компании пока еще не выпущено решение вышеуказанных проблем, которое мы планируем сделать доступным для всех разработчиков гаджетов Windows для настольных ПК в ближайшем будущем (т. Е. После дополнительного тестирования).
Что касается указанных вами расширенных функций, то все они могут быть выполнены с использованием некоторых встроенных COM-объектов Windows, которые уже зарегистрированы и не распространяются вместе с вашим гаджетом, поэтому они не страдают от тех же проблем, что указаны выше. В качестве ответа на ваши конкретные требования, примеры этого:
FileSystemObject
Запись / чтение файлов может быть сделано с помощью FileSystemObject . Базовый пример FileSystemObject для чтения файлов:
var ForReading = 1, ForWriting = 2, ForAppending = 8;
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oFile = oFSO.OpenTextFile(System.Gadget.path+"\\test.txt", ForReading, true);
var sText = oFile.ReadAll();
window.prompt("", sText);
Инструментарий управления Windows (WMI)
WMI имеет огромный диапазон целей. Однако для некоторых его частей требуются права администратора (которые должны применяться к sidebar.exe). Одним из классов в WMI является Win32_Process , который можно использовать для итерации по запущенным процессам. Обратите внимание, что гораздо труднее использовать WMI в JScript, чем в VBScript, и большинство примеров, которые вы можете найти в Интернете, относятся к VBScript (что делает перенос кода болезненным).
Windows Script Host Shell
WshShell Object предоставляет еще одно замечательное расширение ограничений гаджетов рабочего стола Windows, включая метод SendKeys . Хотя этот метод нельзя использовать для конкретной отправки ключа в приложение, его можно активировать с помощью метода AppActivate , а затем использовать SendKeys для эмуляции нажатия клавиш в активированном приложении.
Надеюсь, это поможет: -)