65.9K
CodeProject 正在变化。 阅读更多。
Home

一种非传统的 Visual Studio 小工具模板

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.65/5 (11投票s)

2009年3月7日

CPOL

8分钟阅读

viewsIcon

60351

downloadIcon

1154

创建 Visual Studio VISTA 小工具模板的一种不同方法

引言

当我开始开发 Vista 的侧边栏小工具时,和其他开发者一样,我惊讶地发现 Visual Studio 2008 并不支持开发这种小型程序。

我在网上和几本书中查找,以了解当前解决方案的状态,并找到了不同的方法来解决这个问题。我发现的功能性方法如下:

  • 直接在 Gadget 目录($LocalApplicationData\Microsoft\Windows Sidebar\Gadgets)中工作 [1]

    图 1:点击 + 查看您安装的小工具

    这是最基本的方法,但也是使用 Visual Studio Gadget 开始开发最有效和最快捷的方法。您无需做任何事,只需将您的项目放在 `gadget` 目录下的一个名为“yourproject.gadget”的子目录中,然后您就可以通过运行安装程序实用程序(点击图 1 中所示的侧边栏菜单中的 * 按钮)来编辑您的文件并测试您的小工具。

    此方法非常适合学习(参考一本优秀的学习书籍中的 [ [1] ])。对于可能开发大量小工具的标准开发者来说,这会很麻烦。另一个问题是组织问题:您无法集中在一个存储库中处理 VS 项目。自然,您无法获得有关 Gadget 项目结构的帮助,您应该使用普通的 WEB 项目模板来创建您的 Gadget。

  • 在 VS Studio 中创建 Gadget 安装程序加载项,以获取您的项目文件和目录并创建安装程序。然后运行安装程序并查看结果。有一个非常好的加载项可以做到这一点,由 Alexey Prosyankin 在 The Code Project [2] 上开发。Prosyankin 还开发了一个 VS Gadget 模板来帮助开发者构建小工具结构。

这种方法的优点是您可以在普通的 VS 项目目录中拥有您的小工具项目,并且通过加载项,您可以在侧边栏中运行您的小工具。Prosyankin 系统的另一个重要优势是小工具可以自动签名。不幸的是,该系统在使用 Microsoft Cabinet Tool 时存在问题,并且在某些情况下不起作用。

有了这些背景,我考虑开发一个合适的工具。我想要一个能够做到以下几点的模板:

使用 Visual Studio 2008

  • 我可以在我喜欢的项目目录中使用它来开发应用程序。
  • 我可以在不使用外部工具或外部实用程序的情况下,在侧边栏中测试 Gadget。
  • 我对 Gadget API 和 JavaScript 具有 Intellisense 支持。
  • 我可以按项目扩展;签名 Gadget 或执行基于单一项目需求的其他操作的可能性。
  • 我目前只需要支持经典的 JS & CSS & HTML 侧边栏 Gadget。

不可能,完全不可能,我们只需要稍微改变一下对“模板”概念的理解,以及 VISTA Gadget 的工作原理。

背景

Gadget 不是一个“普通”的 Windows 程序,因为它没有“代码”。它也不是一个 ASP.NET 程序或需要 Web 服务器才能运行的程序。当您安装它时,您不会生成任何 `*.exe` 或 `*.dll`。基本上,Gadget 是网页的客户端部分,然后您只需要 Internet Explorer 引擎来运行它。(您只在 Internet Explorer 中进行测试,因为它在 VISTA 桌面中运行)。

我看到的模板是作为 WEB 模板开发的,然后定制了开发 Gadget 所需的必要文件。如果只使用 CSS、JavaScript 和 HTML,此模板中的 Build 操作将不起作用。

为什么我需要使用 WEB 模板?为什么我不能使用运行操作?

在这里,我们使用一个普通的控制台应用程序模板,创建 Gadget 文件,安装支持 Gadget API 和 JavaScript Intellisense 的附加文件,并创建一个小型 C# 应用程序来安装和运行 Gadget。

$LocalApplicationData\Microsoft\Windows Sidebar\Gadgets

当我们运行项目时,驻留的 C# 应用程序会获取必要的文件并将它们复制到 `Gadget` 目录,调用小工具安装程序实用程序并打开它来安装小工具。简单干净!

此外,如果您想要一个补充操作,您可以根据您的需求更改控制台应用程序。

以下模板是一个简单的模板,用于处理仅用一种语言开发的 Gadget(CSS HTML JS)。您可以修改此模板以适应您的需求。

现在我们描述如何实现一个具有此原理的简单模板。如果您是唯一使用此模板的人,则可以跳过以下主题。

模板结构

该模板基于 Windows 控制台应用程序模板。

您可以在下图看到结构

Fig2.jpg

  • 模板运行和安装支持

    您可以在 `launcher` 目录中看到一个简单的 `Launcher.cs` 文件,其中包含在 VSS 菜单中选择“运行”时运行的实用程序:代码很简单,它只获取应用程序文件并将它们复制到 Gadget 系统目录。不适合小工具的文件和目录将被过滤掉,不被复制。(例如:`.bin`、`.obj`、`.launcher` 目录)。有关更多详细信息,请参见代码 1。

  • “Hello World” Gadget 模板

    如您所见,该模板拥有创建简单 Gadget 所需的所有文件和逻辑,包括设置窗体和两个弹出窗体。用户只需为他们特定的 Gadget 创建逻辑。

  • 模板和 Intellisense 支持

    我没有找到 Microsoft 对 Gadget API 的 Intellisense 支持,但我在这方面找到了一个出色的个人倡议。Jonas Follesoe [3] 开发了出色的 `System.Gadget` API Intellisense 支持。感谢 Jonas!

    要获得此支持,我们只需在模板中包含两个 `*.js` 文件

    • MicrosoftAjax.debug.js
    • Sidebar.IntelliSense.js

    然后,我们只需要在我们 `*.js` 文件中注册 Intellisense,如代码 2 段所示。

    当您部署项目时,这两个 `*.js` 文件都不是必需的,安装实用程序也不会复制它们。它们仅在设计时使用,当我们只需要 Intellisense 支持时。

代码 1:Launcher.cs(片段)

[STAThread]
static void Main()
{
//Get the GadgetName
XmlDocument doc = new XmlDocument();
doc.Load("gadget.xml");
var trime = new[]{' ','\n','\r'};
string gadgetName = doc.SelectSingleNode("gadget/name").InnerText.Trim(trime);
string userGadgetDir = Environment.GetFolderPath
			(Environment.SpecialFolder.LocalApplicationData) +
@"\Microsoft\Windows Sidebar\Gadgets\";
string testGadGetDir = userGadgetDir + gadgetName + ".gadget";

//See if in gadget directory the same directory name exists 
if (Directory.Exists(testGadGetDir))

{ //delete if exists
   Directory.Delete(testGadGetDir, true);
}

//create new
Directory.CreateDirectory(testGadGetDir);

//Get the application develop directory
string dirApp = Environment.CurrentDirectory;
int index = dirApp.ToLower().IndexOf(@"\bin\debug");
dirApp = dirApp.Remove(index);

//copy all application file recursively
copyDirectory(dirApp, testGadGetDir);

//Open the installation of gadget sidebar
string sidebar = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) +
@"\Windows SideBar\sidebar.exe";
var process = System.Diagnostics.Process.Start(sidebar, " /showgadgets");
process.WaitForExit(1000);

您可以在配套代码中看到更多详细信息。

代码 2:在 Intellisense 中注册 System.Gadget API

//-------------------------------------------------------------

// Intellisense Support for Gadget Development
// MicrosoftAjax.debug.js is property of Microsoft Corporation
// Sidebar.Intellisense.js was developed for Jonas Folles
// http://jonas.follesoe.no/JavaScriptIntelliSenseForTheVistaSidebarObjectModel.aspx
//-------------------------------------------------------------
///<reference path="MicrosoftAjax.debug.js" />
///<reference path="Sidebar.IntelliSense.js" />
//-------------------------------------------------------------

就是这样。在下一节中,我们将讨论如何使用此模板。

Using the Code

步骤 1

请下载模板并将 zip 文件放在您的 `My Documents\Visual Studio 2008\Templates\ProjectTemplates` 目录中。如果您为模板使用其他目录,请相应更改路径。打开您的 VS 并创建一个新项目,然后选择 `JSGadGetApplication` 模板。

Fig3.jpg

第二步

构建并运行它。Gadget 安装程序将打开,您将在您的 Gadget 集合中看到 Test 模板(参见图)。双击 Gadget 图标将其安装。

Fig4.jpg

Gadget 已安装。

Fig5.jpg

步骤 3

探索 Hello World Gadget。

将鼠标移到 Gadget 边框的右上角。配置栏将可见。点击工具图标。设置屏幕将打开。关闭它。

Fig6.jpg

右键单击 Gadget。在菜单中选择“undocking”(取消停靠)。您将看到取消停靠屏幕。在取消停靠的屏幕上重复此操作,然后选择“docking”(停靠)。Gadget 将返回侧边栏。(抱歉,消息是德语的,但我的 VISTA 只说德语。

Fig7.jpg

单击“?”按钮,将打开一个弹出窗口。关闭它,然后单击“.”按钮。将打开一个“About”(关于)弹出窗口。

Fig8.jpg

Fig9.jpg

正如您所见,该模板为您提供了一个完整的 Gadget 原型,并且为您开始自己的开发打下了良好的基础。

设计考虑因素

  • 建议使用浏览器(Internet Explorer,因为 Gadget 在侧边栏中只能通过 Internet Explorer 引擎工作)来开发 HTML 和测试窗体的 JS。
  • 当您想查看 Gadget 在侧边栏中的外观时,请使用 VS 的运行命令。
  • 如果您想逐步调试 JavaScript 代码,可以使用“Attach to process”(附加到进程)。
  • 如果您想进行调试,请不要忘记在 Internet Explorer 中激活脚本调试器。

部署

我曾经考虑为模板添加部署功能,但创建 `template.gadget` 部署文件的过程非常简单,而且不是非常重复。要创建安装程序,只需按照以下简单步骤操作:

  • 使用 Windows Explorer,导航到 `$LocalApplicationData\Microsoft\Windows Sidebar\Gadgets\Yourgadget.gadget`。
  • 使用 7ZIP、WinZip 或原生的 Windows ZIP 或其他实用程序,创建包含该目录及其子目录内容的 zip 文件。
  • 将创建的 `yourgadget.zip` 文件重命名为 `yourgadget.gadget`。

然后,如果您不想保留创建的小工具,可以删除该目录(当然,原始文件在您的 `Project` 目录中)。在下图,您可以看到使用 7 ZIP 创建 Gadget zip 文件的示例。

Fig10.jpg

就是这样!

关注点

创建 Gadget 并能够直接在侧边栏中运行,为开发我们的项目提供了极大的便利和速度。使用调试和运行命令来安装 Gadget 的这个小小的非主流想法,让您有机会在一个模板中获得开发 Gadget 所需的所有工具。

这是一个简单的模板。可以对其进行增强以添加更多功能。

  • 支持不同语言
  • 支持 WPF/e
  • 支持强签名

历史

  • 第一版 2009 年 3 月 7 日

参考文献

[1] Professional Windows Vista® Gadgets Programming. Wei-Meng Lee. Pag 19-56, Wrok. Wiley Publishing, Inc. 2007.

[2] Create a Vista Gadget Using Visual Studio IDE (updated). Alexey Prosyankin. The Code Project. 2008 年 12 月 2 日。

[3] JavaScript IntelliSense for the Vista Sidebar Object Model. Jonas Follosoe.

© . All rights reserved.