2

哪种是 Windows 7 小工具的首选开发语言?

我知道小工具使用 Xml、Html、CSS 和脚本(Java/VB),但我需要一些高级功能,例如:

  1. 写入/读取文件
  2. 获取正在运行的进程列表
  3. 将密钥发送到活动应用程序

对于上述任务,我将需要使用 Windows API,或者如果可能的话,使用 .NET。是否可以在小工具中具有上述功能?

4

1 回答 1

4

使用ActiveXObject该类的 JScript 可以使用各种 COM 对象。您可以使用 .NET 编写自己的互操作程序集,但这会带来几个问题:

  • 程序集中的每个公共类在使用前都需要在主机上注册。在 x64 中写入和创建键时会出现问题,WScript.Shell 对象在注册表的某些部分难以解决这些问题。然而,WMI 很适合注册。
  • 从实例化开始,程序集 dll 被锁定,即使小工具已关闭也无法删除。当卸载/软件更新发挥作用时,这主要是一个问题。一旦 sidebar.exe 进程结束,文件就会解锁。
  • 即使使用 WMI,注销似乎也有问题。取消注册的时间通常是一个问题(您是在卸载时还是在实例化后进行?如果有多个使用它打开的小工具怎么办?)。此外,如果他/她决定不保留您的小工具,则不取消注册会在用户的计算机上留下不需要的注册表项。
  • 如果小工具 100% 依赖于程序集,并且无论出于何种原因,该程序集无法在用户的机器上注册,则该用户无法获得该小工具的整个体验。为 Windows Live 库上的一些低评价评论做好准备。

如果你决定你真的需要编写一个程序集。我建议,如果您正在为小工具编写自己的程序集,那么它是对小工具基本功能的扩展,并且您确保该小工具具有在用户无法使用该程序集时可用的功能。

我的公司对上述问题有一个尚未发布的解决方案,我们计划在不久的将来(即经过更多测试)向所有 Windows 桌面小工具开发人员提供该解决方案。

至于您指定的高级功能,这些都可以使用一些内置的 Windows COM 对象来完成,这些对象已经注册并且不随您的小工具一起分发,因此它们不会遇到上述相同的问题。作为对您的特定要求的回答,这些示例包括:

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 Management Instrumentation (WMI)
WMI有很多用途。但是,它的某些部分需要管理权限(必须应用于 sidebar.exe)。WMI 中的类之一是Win32_Process,可用于遍历正在运行的进程。请注意,在 JScript 中使用 WMI 比在 VBScript 中要困难得多,并且您在 Internet 上找到的大多数示例都是针对 VBScript 的(这使得移植代码很痛苦)。

Windows 脚本宿主 Shell WshShell 对象为 Windows 桌面小工具的限制提供了另一个很好的扩展,包括 SendKeys方法。尽管该方法不能专门用于向应用程序发送密钥,但可以使用AppActivate方法激活应用程序,然后使用 SendKeys 模拟已激活应用程序中的击键。

我希望这会有所帮助:-)

于 2009-12-01T18:44:16.700 回答