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

即时提升 Windows 应用程序的价值

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2016 年 10 月 12 日

CPOL

5分钟阅读

viewsIcon

35890

随着用户从传统桌面迁移到移动设备,将您的 Windows 应用程序迁移到网络是增加曝光率的下一步。Thinfinity VirtualUI 将您的 Windows 应用程序交付给任何设备上的用户,无论身在何处。

引言

传统的桌面到网络迁移过程需要投入大量时间和金钱,并且需要进行大量的重新编码。但是您可能会错过无数潜在用户的机会——这些用户已经从 Windows 桌面转向 iPad 和其他此类设备。

随着用户从传统桌面迁移到移动设备,将您的 Windows 应用程序迁移到网络是增加曝光率的下一步。所需的软件修改量大,既耗时又昂贵。直到现在。Thinfinity VirtualUI 将您的 Windows 应用程序交付给任何设备上的用户,无论身在何处。所有这些只需一行代码。

在不影响功能或视觉效果的情况下,您可以使您的 Windows 应用程序可以通过任何 HTML5 兼容的 Web 浏览器在任何平台上访问。使用 Thinfinity VirtualUI 增强您现有的应用程序,实现在线数据功能,更新您的旧软件,并将您的应用程序交付到世界任何地方。

系统概述

Thinfinity VirtualUI 由一个 Http/Websockets 服务器、一个 HTML5 Javascript 客户端和一个 ActiveX 库组成。

  • VirtualUI 服务器
    VirtualUI 服务器是一个 http(s)/websockets 服务器,它通过 VirtualUI 应用程序 SDK 库与 Windows 应用程序通信,将 GDI/GDI+/DirectX 重定向命令发送到 Web 浏览器。
  • VirtualUI HTML5 客户端
    VirtualUI Javascript/HTML5 客户端负责在 Web 浏览器画布上进行实际绘图,并与最终用户的鼠标和键盘事件进行交互。

  • VirtualUI 应用程序 SDK
    VirtualUI 应用程序 SDK 是一组库,可插入开发人员的编程框架,将 Windows 调用和绘图命令重定向到远程 HTML5 画布。它还提供了一个对象远程处理框架 (jsRO),旨在简化 Windows 应用程序与 Web 之间的集成。

执行环境

从 Windows Shell 执行应用程序

当应用程序从 Windows Shell 执行时,它表现为标准 Windows 应用程序。

在 IDE 下执行应用程序

当应用程序在开发环境(例如 Microsoft Visual Studio 或 Embarcadero Delphi)下执行时,应用程序 GUI 仍然显示在桌面上,但也可以从 Web 浏览器访问。

在此模式下,VirtualUI 以开发模式运行服务器,允许单用户访问正在运行的应用程序以进行调试和测试。

在 VirtualUI 服务器下执行应用程序

如果应用程序在 VirtualUI 服务器上注册,则可以通过将 Web 浏览器指向应用程序分配的 URL 来启动它。应用程序的 GUI 将嵌入在网页中,用户将能够像往常一样与其交互。

对于每个访问应用程序 URL 的用户,VirtualUI 都会创建一个新的应用程序实例并处理同时发生的 GUI 输入和输出。

基本编程

任何可以访问 COM 接口的语言(例如 Visual Basic、FoxPro、Gupta 等)都可以实例化 VirtualUI。

提供了针对 C#、VB.NET、C++ 和 Delphi 的特殊源代码接口。以下是单行代码初始化代码的示例

C#

using System;
using System.Windows.Forms;

namespace MyApp
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            new Cybele.Thinfinity.VirtualUI().Start();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Delphi

program MyApp;

uses
  Windows,
  Forms,
  VirtualUI_AutoRun,
  MyApp.Main in MyApp.Main.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

应用程序的网络适配

Thinfinity VirtualUI 为您提供了多个对象、属性和方法,让您为应用程序准备最佳的最终用户体验。

例如,您的应用程序可以通过以下方式与本地资源交互:

  • 将打印作业发送到浏览器,
  • 允许通过本地文件打开/保存对话框以及下载/上传方法进行文件访问。

通过访问以下信息,还可以为您提供必要的信息,以使您的软件适应不同的外形、方向等:

  • 浏览器和屏幕尺寸,
  • 方向,
  • 用户代理。

它还允许您在浏览器 cookie 中检索或持久化信息,或提供您自己的身份验证方案。

可扩展性和 Web 集成

Javascript 远程对象 — jsRO

jsRO 允许您增强应用程序的功能,将其扩展到 Web 环境。通过发布从应用程序以编程方式定义的数据模型,这些数据模型公开属性、方法和事件,从而简化了 Web 与原始应用程序之间的对话,从而实现了这一点。

示例

C#

// Creates the remote object
ro = new JSObject("ro");
// Adds the method
ro.Methods.Add("multiply")                     // Returns a JSMethod
    .AddArgument("a", IJSDataType.JSDT_FLOAT)  // First number to multiply
    .AddArgument("b", IJSDataType.JSDT_FLOAT)  // Second number to multiply
    .OnCall(new JSCallback(                    // Adds the callback
        delegate(IJSObject parent, IJSMethod Method)
        {
            float a, b;
            a = Method.Arguments["a"].AsFloat;
            b = Method.Arguments["b"].AsFloat;
            Method.ReturnValue.AsFloat = a * b;
        })).ReturnValue.DataType = IJSDataType.JSDT_FLOAT;
ro.ApplyModel();

Javascript

$(document).ready(function () {
    var jsro = new Thinfinity.JsRO();
    var ro = null;
    jsro.on('model:ro', 'created', function () {
        ro = jsro.model.ro;
    });
    
    function multiplyRemote(x,y) {
        ro.multiply(x, y, function (result) {
            alert("Result is " + result);
        });
    };
});

Web 组件

Web Components 是一项令人兴奋的新技术,它将众所周知的“可重用软件组件”概念带到网络。通过此 HTML5 规范,您可以构建 HTML+Javascript 片段并将其用作自定义 HTML 元素。

在 Thinfinity VirtualUI 中,您可以轻松地将 Web Components 嵌入到您的 Windows 应用程序中。一些 Web Components 示例包括:原生视频流组件、原始打印组件、QR 组件、签名组件、Google 地图组件等等。

示例代码可在 http://github.com/virtualui 找到

文件系统和注册表虚拟化

文件系统虚拟化帮助开发人员仅发布相关的共享文件夹并提供基于身份验证的私有文件夹。此外,共享文件夹可以重定向到磁盘上更安全的位置和/或进行写保护。

文件系统虚拟化包括两个步骤。第一步是文件系统映射设计,开发人员在此步骤中创建真实路径与最终用户将看到和访问的重定向路径树之间的关系。第二步是将创建的映射定义包含到应用程序程序中。

注册表虚拟化允许开发人员以安全隔离的方式将最终用户信息存储在 Windows 注册表中,并提供基于身份验证的注册表项。

此外,共享注册表项可以重定向到 Windows 注册表中更安全的位置。

与文件系统虚拟化类似,注册表虚拟化也包括两个步骤。第一步是映射定义,开发人员在此步骤中创建原始注册表项与重定向注册表项之间的关系。第二步是将创建的映射定义包含到应用程序程序中。

文件系统虚拟化和注册表虚拟化都帮助开发人员为多用户使用做好准备,在这种情况下,最终用户可能需要拥有自己的私有文件和注册表项。

结论

Thinfinity VirtualUI 允许开发人员

  • 通过仅向其现有 .Net (WinForms)、Delphi、Visual C++ 和其他项目中添加一行代码,即可轻松创建双平台 Windows/HTML5 应用程序。
  • 使用 Javascript 远程对象 (jsRO) 框架和 Web 组件将他们的 Windows 应用程序完全集成到 Web 应用程序中。
  • 通过在 Windows 环境中正常交付应用程序,或者通过将其安装在 Thinfinity VirtualUI 服务器环境中,以便从任何符合 HTML5 的 Web 浏览器远程访问,从而扩展应用程序的可用性。
  • 即时升级和现代化基于 Windows 的应用程序。

参考文献

产品页面:http://www.cybelesoft.com/Thinfinity/VirtualUI/

白皮书:http://www.cybelesoft.com/docs/thinfinity_virtualui_whitepaper.pdf

下载:http://www.cybelesoft.com/download/

© . All rights reserved.