AppEmit是应用程序(尤其是浏览器)与本地程序间互相通信的易扩展的轻量级中间件

 

 

AppEmit 中间件 说明书

 

 

 

程序名称

AppEmit.exe

 

程序版本

v1.0.0

 

说明书版本

v1.0.0

 

网址

http://www.appemit.com

 

Email

[email protected]

 

修改时间

2020年8月29日

 

修订

v1.0.3

 

 

 

 

  1. 概述

AppEmit是应用程序(尤其是浏览器)与本地程序间互相通信的易扩展的轻量级中间件。

AppEmit is an extensible lightweight middleware for communication between applications (especially browsers) and local programs.

主要采用了HTML5国际标准的Web Socket进行通话,默认为异步, JSON格式传递参数。

  • 主要功能:
  1. 在几乎所有浏览器播放含有flash的网页或Flash文件,包括swf交互动画、flv影视等
  2. 在浏览器打开、操作本地文件,比如阅读PDF;创建、阅读、编辑Office文件,且支持JavaScript代码操作
  3. 在浏览器中调用第三方DLL、OCX等ActiveX组件以及系统winApi函数,tcc、python、lua等
  4. 开发本地硬件DLL的插件,实现在网页中操作控制本地的读卡器、打印机、扫描仪、高拍仪、U盾等各种硬件设备
  5. 各个应用程序之间通信,比如聊天
  6. 在Chrome里嵌入IE内核网页,保护源码,可以不修改原有的ActiveX读取html,同时支持开源内核wke和blink
  • 解决问题
  1. 国际市场份额68%以上的chrome浏览器(数据来源Netmarketshare;国内25%以上)在2020年12月后不再支持flash,而微软的edge也不支持ActiveX。
  2. 客户习惯使用浏览器来处理各种业务。
  3. 游戏商、银行、医院、电力、硬件等企业客户在各种浏览器中开发调用dll、ocx、ActiveX、com组件、flash等文件的场景需要。
  • 相关链接

程序名称   AppEmit.exe

网址   http://www.appemit.com

Github  https://github.com/appemit/appemit

Email联系 appemit(at)appemit.com  

 内容分发下载地址    github下载地址

 

 

    1. 具体功能

支持同步、异步(默认)处理消息或者消息组

支持一个页面打开多个APP

支持本地文件和网络文件访问

支持获取硬件信息,包括系统、CPU、主板、显卡、内存、硬盘、网络等

支持USB监控

支持pcomm串口异步多线程调用

支持用户间通信、发送接收消息

支持使用IE、webkit、blink内核打开,互动网页

支持打开、互动flash,包括ActiveX flash和NPflash

支持多媒体播放

支持打开、编辑、代码互动microsoft office、金山office的world、excel、ppt,支持本地文档和网络文档处理

支持打开PDF

支持调用第三方dll、com等链接库

支持开发dll等

 

    1. 使用条件
      1. 系统

Windows系统,支持XP以上。

 

软件/插件

功能/方式

依赖条件

说明

AppEmit

 

Windows系统XP以上

32位, 可以运行在x64、 x86上

flash

调用本地flash AcitveX控件,打开swf文件

本地安装flash AcitveX控件

 

打开网络中含有swf的网页

打开网络中的文件swf

自动安装插件

或者下载完全插件版本可局域网使用。后续同。

IE

打开网络中含有swf的网页

采用不同内核IE\webkit打开网络或者本地网页

-

 

PDF

阅读网络或者本地PDF文件

-

 

Office

打开、编辑Office文档

本地安装Office

 

媒体文件

打开网络中的文件

视频格式:mp4、flv、m3u8、rtmp

视频编码:H.264

音频编码:AAC、MP3

音频格式:MP3等文件

-

 

 

      1. 用法

在windows系统中,下载免安装程序AppEmit(不含插件小于6M),运行AppEmit.exe即可。设置了开机自启动,应避免被杀毒软件关闭。

 

同时只能开启一个AppEmit.exe进程。

    1. 技术实现
      1. 技术依赖

采用开源或公共控件,安全可靠。

  • Web Socket采用开源控件HPSocket(https://github.com/ldcsaa/HP-Socket),支持ssl。

Dll文件开放了C接口,可以在此基础二次开发控件,主要调用

  1. HPSocket4C_U.dll
  2. HPSocket4C-SSL_U.dll
  • IE内核调用flash Active控件
  • 非IE内核调用flash NPAPI控件
  • webkit内核采用开源软件wke控件
  • blink内核采用开源软件miniblink控件
      1. 步骤
  1. 网页注册后获得设置cid,clientKey,获得连接授权。或者使用临时账户cid=00000-1测试。

               

一个账户cid目前最多15个,设置cid后不要任意修改,更新数据有1-2小时延迟。

  1. 连接Appemit服务

AE_initAppWs("ws://localhost:80/appemit?cid=00000-1&sid=1&flag=1")

  1. 设置clientKey授权,(clientKey为私有,发布后需要保密混淆加密js)初始化数据以及授权等

            var AE_initSet = {

              "emit":"init",

                "clientKey": "temp-0000000000",   //

              "clientInfo":clientInfo,

                "wsUrl": wsUrl,

                // "flag":0,

                //  "sid":"123456",         // 用户session 或者用户名ID,唯一可以准确通话 

                "gid": "[1,2]",  //用户群ID,一个用户可以加入多个群

              // "utf_escape":false,            //默认false, 反馈的data编码转义

           

            };

  AE_EmitReq_PIP(AE_initSet);

  1. 发送命令

AE_OpenApp('{"emit":"hardWare","Obj":"pc","par0":{"dev":["os","base"]}}')

      1. demo

在demo下主要是html的举例,

  • 包括获取pc信息,实现通话的index.html
  • 以及播放flash的AppEmbed.html
    1. 联系

邮件: [email protected]

  1. 插件场景用法
    1. 获取客户端信息

使用浏览器打开demo下的index.html。授权连接后,发送获取PC信息命令。

AE_initAppWs("ws://localhost:80/appemit?cid=00000-1&sid=1&flag=1")

AE_OpenApp('{"emit":"hardWare","Obj":"pc","par0":{"dev":["os","base"]}}')

 

    1. 不同客户端通信

打开demo下的index.html,模拟不同sid打开浏览器。

连接Appemit授权后,在sid=1下发送命令。

{"emit":"msg", "Obj":"sid","toSids":["2"],"toGids":[1,2],"data":"hi, I am Tom."}

在客户cid全集下,通过唯一的sid对话,可以一对一,或者一对多通话。

 

图为1对2和3通话。

另外还可以设置不同群gid,一个sid可以加入不同的gid。

发送消息时,在cid全集下,所有的toSids和toGids取对应的sid交集剔重,并排除自身。

    1. 打开文件

已系统默认的程序,打开文件。

为了安全,不支持直接打开的类型包括

{"exe";"msi";"cmd";"js";"jar";"inf";"com";"scr";"reg";"bat";"vbs";"py"}

发送命令打开文件,以独立的方式打开,和浏览器没有关系。

{"emit":"open", "Obj":"file","AppShow":false,"src":["/demo/htmlDemo/file/d1.docx",null,null,1]}

 

src:EXE文件路径, 启动参数="",操作类型 = "open",显示属性 _SW_,工作目录=""

    1. Flash

两种方法,主要四种形式实现场景

  1. 使用客户端本地安装的Flash Player ActiveX控件,要是客户端没有,需要自行下载。下载地址:http://www.adobe.com/go/getflashplayer
  2. 使用Appemit程序自带的插件plugins/NPSWF32.dll

 

      1. NPAPI-嵌入web

能打开常用网页,目前的插件不支持html5的媒体特性。如有需要,可以使用node或者electron插件。

使用webkit内核使用Appemit程序自带的插件NPSWF32.dll,能打开嵌有flash的网页,不默认具有右键菜单。

连接授权后,发送命令"AppType":1的形式。

{"emit":"open","Obj":"flash","AppType":1,"src":"http://sxiao.4399.com/4399swf/upload_swf/ftp14/yzg/20140328/bombit7/zx_game7.htm","pos":1}

 

      1. NPAPI-网络flash文件

使用Appemit程序自带的插件NPSWF32.dll, 打开网络flash文件。

连接授权后,发送命令"AppType":2的形式。

{"emit":"open","Obj":"flash","AppType":2,"src":"http://sxiao.4399.com/4399swf/upload_swf/ftp18/liuxy/20160130/17801/game.swf","pos":1,"par0":{"autoPlay":true,"loop":true,"quality":"high","wmode":"Transparent"}}

 

 

      1. NPAPI-网络媒体文件

使用Appemit程序自带的插件NPSWF32.dll, 打开网络媒体文件,包括flv,mp4等。

连接授权后,发送命令"AppType":3的形式。

{"emit":"open","Obj":"flash","AppType":3,"src":"https://media.html5media.info/video.mp4","pos":1,"par0":{"autoPlay":1,"loop":1}}

 

 

 

      1. ActiveX形式
        1. 打开网络flash文件

打开demo下的AppEmbed.html,连接授权后,发送使用ActiveX("AppType":4)打开网络flash文件命令,参数如下。

{"emit":"open","Obj":"flash","AppType":4,"src":"http://img1.yo4399.com/swf/00/0ff035e0e96584c07df65ab3636f72.swf","pos":1,"par0":{"autoPlay":1,"toolbar":0,"rightMenu":0,"hitCaption":0,"hideStop":0,"loop":1,"volumeMute":0,"flashVars":"a=0&b=0&c=SetInSrc"}}

注意事项:

在客户端需要下载安装flash player ActiveX。

路径是 / 或许 \\

flashVars可以设置在src中

AppType正数为嵌入APP,负数为浮动窗口,后同。

 

 

刷新即可关闭flash

        1. 打开本地flash文件

可以是绝对或者相对路径,相对于AppEmit.exe的路径:"demo/htmlDemo/test1.swf"。

{"emit":"open","Obj":"flash","AppType":4,"src":"demo/htmlDemo/test1.swf","pos":1,"par0":{"autoPlay":1,"toolbar":0,"rightMenu":0,"hitCaption":0,"hideStop":0,"loop":1,"volumeMute":0,"flashVars":"a=0&b=0&c=SetInSrc"}}

 

      1. 关闭
  1. 刷新即可关闭flash
  2. {"emit":"close","AppId":1}  //空时默认追加AppId 1
  3. {"emit":"closeAll"}
    1. Web

具有右键菜单。

      1. IE 内核

"AppType":1使用IE内核打开网页

{"emit":"open","Obj":"web","AppType":1,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.appemit.com"},"par0":{"header":null,"noScriptErr":true, "UIFLAG":null,"DLCTL":null,"userAgent":null,"crossDomain":true}}

 

设置htmlStr可以直接打开html源码。

设置HttpServer_startUrl,可以打开本地的html文件。

设置URL打开网页。 三者优先级依次下降。

      1. Webkit内核

"AppType":2使用webkit开源内核打开网页

{"emit":"open","Obj":"web","AppType":2,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.appemit.com"},"par0":{"header":null, "userAgent":null,"crossDomain":true,"downLoad":1}}

 

设置htmlStr可以直接打开html源码。

设置HttpServer_startUrl,可以打开本地的html文件。

设置URL打开网页。 三者优先级依次下降。

      1. blink内核

"AppType":3使用开源blink内核(webkit加强版)打开网页,可以浏览网页,支持前进 后退 刷新 复制 粘贴,支持下载。

 

{"emit":"open","Obj":"web","AppType":3,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.appemit.com"},"par0":{"header":null, "userAgent":null,"crossDomain":true,"downLoad":1}}

 

设置htmlStr可以直接打开html源码。

设置HttpServer_startUrl,可以打开本地的html文件。

设置URL打开网页。 三者优先级依次下降。

    1. office
      1. PDF

"AppType":4使用开源blink内核打开阅读PDF文件,支持本地和网络PDF。

{"emit":"open","Obj":"web","AppType":4,"pos":1,"par":{"URL":"/demo/AppEmit_help.pdf","par0":{"rightMenu":1}}}

设置URL打开PDF文件。

      1. Office

 

使用微软com技术创建、打开阅读、编辑Office,包括word\excel\PPT文件,支持本地和网络文件。

    支持在javaScript中添加类似VBA代码动态控制,同时可以在浏览器网页里执行命令。

      1. Wps

 

使用 com技术创建、打开阅读、编辑金山wps ,包括wps\et\wpp文件,支持本地和网络文件。

    支持在javaScript中添加类似VBA代码动态控制,同时可以在浏览器网页里执行命令。

 

      1. Office DsoFramer (不稳定)

 

使用微软开源控件DsoFramer创建、打开阅读、编辑Office,包括word\excel\PPT文件,支持本地和网络文件。

{"emit":"open",

"Obj":"office",

"AppType":1,

"src":"/demo/htmlDemo/file/x1.xls",

"pos":1,

"par0":{"Caption":true,

       "ProtectDoc":0,

       "Toolbars":true,

       "btnFile":true,

       "MNU_NEWBLANK":0,

       "MNU_NEW":0,

       "MNU_OPEN":0,

       "MNU_CLOSE":0,

       "MNU_SAVE":0,

       "MNU_SAVEAS":0,

       "MNU_PGSETUP":0,

       "MNU_PRINT":0,

       "MNU_PROPS":0,

       "show_UpdateTool":true}

}

设置src打开office文件。 

    1. DLL等组件调用

主要有三种方法来实现。

  1. 通过打开IE内核,来createObject调用ActiveX ,一般调用ActiveX需要已经注册
  2. JS控制AppEmit调用DLL接口,互动信息,有些ActiveX可以免注册。

 

可以调用标准的COM组件、ActiveX以及DLL,支持可视化ocx,同时可以开发互动的dll,能在浏览器中控制调用的组件或者程序。

 

 

 

 

APP

嵌入网页JS

浏览器网页

AppEmit

 

      1. 使用IE内核打开ActiveX

使用IE内核打开网页,在非IE浏览器中调用activeX控件,及使用原有的html的代码即可。

{"emit":"open","Obj":"web","AppType":1,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.baidu.com"},"par0":{"header":null,"noScriptErr":true, "UIFLAG":null,"DLCTL":null,"userAgent":null,"crossDomain":true}}

 

设置htmlStr可以直接打开html源码。

设置HttpServer_startUrl,可以打开本地的html文件。

设置URL打开网页。 三者优先级依次下降。

 

同时也能通过浏览器网页发布命令。

 

      1. JS控制AppEmit调用可视化com组件
  1. Flash ocx 调用,能在网页中执行命令,控制flash,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":1,"src":[],"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1}

调用C:/Windows/SysWOW64/Macromed/Flash/Flash32_32_0_0_403.ocx 控件,需要自行安装flash.

可以在dllJs.html进一步设置参数AppType==1情况,和过程调用代码。

同时也能通过浏览器网页发布命令。

 

  1. 第三方控件ReportX.ocx,联系AppEmit检查安全性后配置在/plugins/thirdparty目录中,直接调用

报表控件reportX调用。

能在网页中执行命令,控制reportX,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":2,"src":[],"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1},"par0":{"AppMethod":"msg Synchronization component need set: POST" }}

调用"/plugins/thirdparty/report/ReportX.ocx" 控件 

可以在dllJs.html进一步设置参数AppType==2情况,和过程调用代码。

同时也能通过浏览器网页发布命令。

      1. JS控制AppEmit调用第三方Dll
  1. dll 调用,第三方控件,联系AppEmit检查安全性后配置在/plugins/thirdparty目录中,直接调用,能在网页中执行命令,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":4,"src":[],"AppShow":false,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1 },"par0":{"AppMethod":"msg Synchronization component need set: POST" }}

可以在dllJs.html进一步设置参数AppType==4情况,和过程调用代码,演示调用add方法。

同时也能通过浏览器网页发布命令。

 

 

    1. Dll开发

可以通过2种方法来实现

  1. 开发的DLL可以和AppEmit保持接口一致,完成通信调用。
  2. 注册开发的DLL,在非IE浏览器打开IE内核来调用,见web IE内核章节。

下面介绍第一种方法,自有开发的私人DLL或者组件,需要申请Pid后开发dll,安装在/plugins/private/目录下,需要双方验证成功后才能调用

参考demo/htmlDemo/dll/dll_demo1.c,提供了接口规范。 使用最新版本TCC开发的dll。

调用dll_demo1.dll,能在嵌入网页中执行命令,控制dll_demo1,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":3,"src":[],"AppShow":false,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1 },"par0":{"AppMethod":"msg Synchronization component need set: POST" }}

调用/plugins/private/50FCF891-1B93-4AE5-8A66-AB26A3C03378/dll_demo1.dll

可以在dllJs.html进一步设置参数AppType==3情况,和过程调用代码。

同时也能通过浏览器网页发布命令runCmd。

    1. 插件部署

在发布时,也可以把此AppEmit插件目录文件和AppEmit.exe一起打包后发布,不用单独分发。

名称

路径

作用

blink

/plugins/lib/web/blink/.dll/node.dll

浏览器内核

/plugins/lib/web/blink/.dll/wkex.dll

flash_NP

/plugins/NPSWF32.dll"

NP版本flash

/plugins/plugin.vch

aliplayer

/plugins/common/aliplayer

Aliplayer播放器支持

视频格式:mp4、flv、m3u8、rtmp

视频编码:H.264

音频编码:AAC、MP3

音频格式:MP3

PDF

/plugins/common/pdfjs

浏览PDF文件

 

  1. Dll开发
      1. 开发

自有开发的私人DLL或者组件,需要申请Pid (pid>=guid=clsId)可使用GUID工具自行生成后开发dll,安装在/plugins/private/目录下,需要双方验证成功后才能调用

参考demo/htmlDemo/dll/dll_demo1.c,提供了接口规范。 使用最新版本TCC开发的dll。

 

主要是5个函数接口,App开头的函数和变量名称不要改变

AppDll_init    dll初始化,用户输入参数 认证

AppDll_loaded  dll启动后执行

AppDll_destroy   dll 退出前执行

AppDll_RevMsg    互动时 接收   消息

AppDll_SendMsg    互动时  反馈 消息

 

 

模板如下,使用了cJSON开源库。

        #include

   // #include

    #include "cJSON.h"   需要下载开源库cJSON

    #include "cJSON.c"

   

    // 开发可以互动信息的动态链接库 Dll

    // http://www.appemit.com

    生成DLL 必须使用最新版tcc扩展库才能支持UTF8,UTF16字符串

    /*

    入口函数,该函数可以有也可以没有。

   

    入口函数会自动加锁以保证线性调用,要避免在DllMain内调用下列函数:

    1、调用LoadLibrary或其他可能加载DLL的API函数( CreateProcess等 )

    2、可能再次触发DllMain的函数,例如 CreateThread,ExitThread

    3、GetModuleFileName, GetModuleHandle 等其他可能触发系统锁的API函数

    总之在DllMain最好不要调用API函数.

    */

   

    /*

     主要是5个函数接口,App开头的函数和变量名称不要改变

     AppDll_init    dll初始化,用户输入参数 认证

     AppDll_loaded  dll启动后执行

     AppDll_destroy   dll 退出前执行

     AppDll_RevMsg    互动时 接收   消息

     AppDll_SendMsg    互动时  反馈 消息

    */

    char *mycid ="00000-1";  //申请的公司产品cid ,需要修改

    char *clsId="50FCF891-1B93-4AE5-8A66-AB26A3C03378";  // pid>=guid=clsId 可使用GUID工具自行生成

    int dllThid;        //本进程ID

    // sid;            //websocket里面设置的,一般为用户ID或者sessionID,唯一

    //  rid ;        //第rid次调用

    int AppAuth=0;      //  

     

   

    //测试

    char* joinStr(char *s1, char *s2, char *s3)

    {

       char *result = malloc(strlen(s1)+strlen(s2)+strlen(s3)+1);//+1 for the zero-terminator

       if (result == NULL) exit (1);

       strcpy(result, s1);

       strcat(result, s2);

       strcat(result, s3);

       return result;

    }

  

    int __stdcall DllMain(void * hinstDLL, unsigned long fdwReason, void * lpvReserved) {

   

       if (fdwReason == 1/*DLL_PROCESS_ATTACH*/ ){

          

       }

       return 1;

    }

    //__declspec(dllexport) 声明导出函数

    __declspec(dllexport) int AppDll_RevMsg(HWND hwnd, char *ids,char *msg)

    {    

 

     AppDll_SendMsg(hwnd,ids,msg);

       return 0;

 

    }

    __declspec(dllexport) int AppDll_SendMsg(HWND hwnd, char *ids,char *msg)

    {    

       //检查是否有  clsId 

       cJSON * ids_json= cJSON_Parse(ids);

        if (!ids_json) {ids_json=cJSON_CreateObject();}

        if (!cJSON_GetObjectItem(ids_json,"clsId")) {

            cJSON_AddStringToObject(ids_json, "clsId",  clsId);   //必需字段

         }

       ids=cJSON_PrintUnformatted(ids_json);

       cJSON_Delete(ids_json);

      

       struct {char * ids;char * msg; } callBackMsg = {

           .ids=ids,            

           .msg =msg,                   //  只会反馈msg里面data字段到websocket

           

       };

 

      SendMessage(

           hwnd,0xACCE ,

           "AppOnMsg({string ids;string msg;})", //要调用的窗体函数名( 结构体原型声明 ); 结构体原型声明应使用API语法

           &callBackMsg //将前面定义的结构体作为调用参数

       );

 

       return 0;

   

        /*

       0xACCE=_WM_THREAD_CALLBACK 使所有回调安全的转发到UI线程。

       _WM_THREAD_CALLBACK 可以跨线程跨语言并且不需要创建回调线程,适用任何普通winform对象。

      

 

       */

    }

    __declspec(dllexport) int AppDll_init(HWND hwnd, char *ids,char *msg)

    {    

      //判断获得AppEmit提供ids(格式json)里面cid sid pid AuthKey等数据

      //和websocket的自行web提供的Json里面的data,判断验证来源是否正确

       // ids  ="{\"cid\":\"00000-1\",\"sid\":\"f1s\",\"rid\":2333,\"AuthKey\":\"000\",\"clsId\":\"50FCF891-1B93-4AE5-8A66-AB26A3C03378\"}";

 

       //具体数据和判断需要修改

        cJSON * ids_json= cJSON_Parse(ids);

       // char * ids3= cJSON_PrintUnformatted(ids_json);   //如果解析报错尝试使用cJSON

        // cJSON *  ids_json2= cJSON_Parse(ids3);

 

         if (!cJSON_GetObjectItem(ids_json,"clsId") || !cJSON_GetObjectItem(ids_json,"cid") || !cJSON_GetObjectItem(ids_json,"AuthKey")) { cJSON_Delete(ids_json);return -1;}

 

        dllThid = GetCurrentThreadId();

        cJSON_AddNumberToObject(ids_json, "dllThid",  dllThid);  //必需

        cJSON_AddStringToObject(ids_json, "more",  NULL);   //备用字段

       //必须反馈验证

          if (strcmp(cJSON_GetObjectItem(ids_json,"cid")->valuestring,mycid)==0 && strcmp(cJSON_GetObjectItem(ids_json,"AuthKey")->valuestring,"000")==0 && strcmp(cJSON_GetObjectItem(ids_json,"clsId")->valuestring,clsId)==0) {

 

           //msg若反馈必须有  \"clsId\" \"AppAuth\"。AppAuth为1 clsId一致 才继续 // 支持\" 或者 '

            

            msg =  joinStr("{\"data\":{\"code\":200,\"cid\":\"00000-1\",\"sid\":\"123\",\"rid\":-1,\"rec\":",msg,",\"AppStep\":\"init\"}}");

          cJSON_AddNumberToObject(ids_json, "AppAuth",  1);

           

          char *ids2=cJSON_PrintUnformatted(ids_json);

           //必须反馈验证

 

           AppDll_SendMsg(hwnd,ids2,msg);

             

        }else{

            cJSON_AddNumberToObject(ids_json, "AppAuth",  0);

          char *ids2=cJSON_PrintUnformatted(ids_json);

           // 反馈验证

           AppDll_SendMsg(hwnd,ids2,NULL);

       }

 

 

        cJSON_Delete(ids_json);

 

       return 0;

    }

    __declspec(dllexport) int AppDll_loaded(HWND hwnd, char *ids,char *msg)

    {    

      //处理业务 //msg若反馈必须有data  

       //  msg =  joinStr("{\"data\":{\"code\":200,\"cid\":\"00000-1\",\"sid\":\"123\",\"rid\":-1,\"rec\":",msg,",\"AppStep\":\"loaded\"}}");

       

        //若反馈则

         AppDll_SendMsg(hwnd,ids,msg);  //如果msg中没有data,则不反馈到浏览器中

 

       return 0;

    }

    __declspec(dllexport) int AppDll_destroy(HWND hwnd, char *ids,char *msg)

    {    

      //处理业务msg若反馈必须有  data

         //msg =  joinStr("{\"data\":{\"code\":200,\"cid\":\"00000-1\",\"sid\":\"123\",\"rid\":-1,\"rec\":",msg,",\"AppStep\":\"destroy\"}}");

     

       //若反馈则

        AppDll_SendMsg(hwnd,ids,msg);

 

       return 0;

    }

    //测试

    __declspec(dllexport) int Add(int a, int b )

    {    

       return a+b;

    }    

    __declspec(dllexport) int AppDll_init(HWND hwnd, char *ids,char *Json)

    {    

      //判断获得AppEmit提供ids(格式json)里面cid sid pid Auth等数据

      //和websocket的自行web提供的Json里面的data,判断验证来源是否正确

      

        //msg若反馈必须有 \"AppStep\", \"clsId\" \"AppAuth\"。AppAuth为true  clsId一致 才继续

        // 支持\" 或者 '  如果有data,只发送data字段到浏览器websock接收

        char *msg = joinStr(joinStr("{\"data\":{\"code\":200,\"cid\":\"00000-1\",\"sid\":\"123\",\"rid\":-1,\"rec\":",Json,",\"AppStep\":\"init\"},\"AppStep\":\"init\",\"AppAuth\":true,\"clsId\":\""),clsId,"\"}");

        dllThid = GetCurrentThreadId();

       //必须反馈验证

        AppDll_OnMsg(hwnd,ids,msg);

 

       return 0;

    }

    __declspec(dllexport) int AppDll_loaded(HWND hwnd, char *ids,char *Json)

    {    

      //处理业务 //msg若反馈必须有  \"clsId\".如果有data,只发送data到浏览器websock接收

        char *msg = joinStr(joinStr("{\"data\":{\"code\":200,\"cid\":\"00000-1\",\"sid\":\"123\",\"rid\":-1,\"rec\":",Json,",\"AppStep\":\"loaded\"},\"AppStep\":\"loaded\",\"clsId\":\""),clsId,"\"}");

       

        //若反馈则OnMsg

         AppDll_OnMsg(hwnd,ids,msg);

 

       return 0;

    }

    __declspec(dllexport) int AppDll_destroy(HWND hwnd, char *ids,char *Json)

    {    

      //处理业务msg若反馈必须有 \"clsId\" .如果有data,只发送data到浏览器websock接收

         char *msg = joinStr(joinStr("{\"data\":{\"code\":200,\"cid\":\"00000-1\",\"sid\":\"123\",\"rid\":-1,\"rec\":",Json,",\"AppStep\":\"destroy\"},\"AppStep\":\"destroy\",\"clsId\":\""),clsId,"\"}");

      

       //若反馈则OnMsg

        AppDll_OnMsg(hwnd,ids,msg);

 

       return 0;

    }

    //测试

    __declspec(dllexport) int Add(int a, int b )

    {    

       return a+b;

    }  

      1. 调用

主要有两种方法来实现。

  1. 通过AppEmit来调用DLL互动信息,有些ActiveX可以免注册。
  2. 通过打开IE内核,来createObject调用ActiveX ,需要注册ActiveX

 

下面使用AppEmit来调用DLL互动信息

  1. 生成dll_demodll后,安装在/plugins/private/Pid/下面

/plugins/private/50FCF891-1B93-4AE5-8A66-AB26A3C03378/dll_demo1.dll" 

就能在能在网页中执行命令,调用互动dll_demo1,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":3,"src":[],"AppShow":false,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1 },"par0":{"AppMethod":"msg Synchronization component need set: POST" }}

 

可以在dllJs.html进一步设置参数AppType==3情况,在dllJs.html中也可以设置src参数和过程,调用代码。

同时也能通过浏览器网页发布命令runCmd,执行AppDll_RevMsg方法。

       codeStr= txt2code(function(){/*

 AppJsObject.dll_demo1.AppDll_RevMsg(AppDll_hwnd,'','{"data":"send from JS","info":3}');

 * /});

        var Req={"emit":"runCmd","Obj":"dll","codeStr":codeStr }   

        EmitReq(Req);

 

 

        1. 嵌入网页JS控制

  

  • AppJs_init=function(AppType)

如果在浏览器网页中没有设置src,可以在这里设置。

src:[  {

                              // webJs0:0,                           //只能设置为0   关闭本js的控制 ;   或者注释 为默认打开控制

                                createType:"createDll"               //  dll调用

                                ,objName:"dll_demo1"

                               ,dllFile:"/plugins/private/50FCF891-1B93-4AE5-8A66-AB26A3C03378/dll_demo1.dll"     //  必须 \\   / 放在/plugins/private/clsId/文件夹下面

                               ,clsId :"50FCF891-1B93-4AE5-8A66-AB26A3C03378"  //guid   发送给dll  信息

                               ,iid:null

                               ,data:'{"msg":"init from JS","info":1}'               //发送给dll  数据

                              

                               }   //暂时支持一个控件

                         ]

                      ,AppShow:false                  //整体不可见 必须设置,默认可见

  • AppJs_loaded=function(AppType){      

 //系统启动APP ,产生AppJsObject. shockwave对象后执行

  • AppJsObject.dll_demo1.AppDll_loaded(AppDll_hwnd, "",{"msg":"loaded from JS","info":2}');

 

  • AppJs_destroy=function(){    //AppJsObject.shockwave销毁前执行

AppJsObject.dll_demo1.AppDll_destroy(AppDll_hwnd, "",{"msg":"destroy from JS","info":3}');

  • AppJs_closed=function(status){  //AppJsObject.shockwave关闭后执行。已经没有AppJsObject.shockwave对象了

 

        1. 浏览器网页执行代码命令控制

 AppJsObject.dll_demo1

Var Req={"emit":"runCmd","Obj":"dll","codeStr": codeStr}

EmitReq(Req);

通过前面dllJs.html定义的AppJsObject.dll_demo1,可以直接控制dll_demo1。当然也可以不需要dllJs.html定义,能在浏览器网页中websocket发送使用"emit":"runCmd"命令发送AppJs_init、AppJs_loaded,代码也可以。

 

 

  1. 参数
    1. 连接

ws://localhost:80/appemit?cid=00000-1&sid=1&flag=1

名称

设置

含义

说明

协议

ws

SSL为wss

 

网址

Localhost

127.0.0.1

 

 

port

[80,8617,8618,8619,9780]

数值或者数组,默认80。

 

依次尝试打开端口。若所有端口被占用 尝试关闭最后一个port的进程,打开最后一个端口

都可以在config.in修改

 

[443,5124,5125,5126,43100]

ssl默认443。

同上。

path

appemit

必需

 

para

cid

必需。00000-1为免费账号。

全集。

sid

字符串,通常情况可选。唯一session或者用户名ID

测试后最好在js中实现隐藏。如果需要调用私有APP,则必须有,否则无法互相通话。

flag

可选。默认0,非调试。

1调试

 

    1. 初始化数据

{"emit":"init",…}

 

            var AE_initSet = {

              "emit":"init",

                "clientKey": "temp-0000000000",   //

              "clientInfo":clientInfo,

                "wsUrl": wsUrl,

                // "flag":0,

                //  "sid":"123456",         // 用户session 或者用户名ID,唯一可以准确通话 

                "gid": "[1,2]",  //用户群ID,一个用户可以加入多个群

              // "utf_escape":false,            //默认false, 反馈的data编码转义

            

            };

名称

设置

含义

说明

emit

init

必需。初始化请求。

 

clientKey

temp-0000000000

必需, 客户端,与cid对应。

保密,js应该混淆加密。

clientInfo

对象

必需。使用浏览器。 默认

 

wsUrl

wsUrl

必需。默认

可以在config.in修改

sid

字母数字下划线短线

必需。用户或者session,唯一才可以正常通话。

生产环境,同一设置于此。

gid

数组

非必需。 群

一个sid可有不同gid

utf_escape

false

默认false

反馈的data编码转义

    1. 命令

说明,参数分组为{a,par:{b},par0:{c}}

abc里面的字段名称都要不同。

 

参数形式如下

名称

设置

含义

说明

 

emit

 

init  初始化

open  打开App

runCmd 互动调用App运行命令

close|closeAll 关闭App

msg 发送消息

hardware 获取硬件信息

 

 

Obj

 

pc

 

 

 

AppId

1

1,2,3

一个页面一个APP,默认为1。

 

AppType

1,-1

1,2,3,4…

-1,-2,-3,-4

正数嵌入

负数浮动

 

pos

1,-1

[left,top,width,height]

位置

1 更新位置

-1 删除位置数据

[left,top,width,height] 保留

 

 

data

 

 

 

 

src

 

 

 

 

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

 

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

 

AppStatus

1/0

系统自动反馈
1打开

0关闭

接收的数据

par

 

必填参数

 

 

objName

 

 

 

 

 

 

 

 

par0

 

可填参数

 

 

header

 

 

 

 

userAgent

 

 

 

 

crossDomain

 

 

 

 

 

 

 

 

 

 

      1. 硬件
        1. 硬件信息

{"emit":"hardWare","Obj":"pc","par0":{"dev":["device","os","display","cpu","net","memory","storage","base"]}}

名称

设置

含义

说明

emit

hardWare

必需。通信请求。

 

Obj

pc

必需。目标对象。

 

par0

 

 

 

dev

字符串

"base"

或者数组["device"]

非必需

["device","os","display","cpu","net","memory","storage","base"],取某个值都即可。

为空时默认设置为"base"

"base"可获取多个设备,但是对于windows精简版本可能无法获取信息。

其它字段获取为第一个设备。

免费版本仅支持"base"

rid

整数

必需。表示本次具体请求标号。

 

如果没有设置,则每次发送命令自动加1。

后续省略描述。

 

        1.  串口
          1. 串口控件Pcomm

在网页中调用Pcomm.dll的串口控件,支持多窗口同时异步跨线程调用串口。

 

{"emit":"open","Obj":"comm","AppType":1,"AppShow":true,"pos":1,"par":{"objName":"Pcomm1","Port":"com1","BaudRate":"9600","ByteSize":"8","Parity":"none","StopBits":"1"},"par0":{"AppMethod":"POST","Send_AsciiHex":"Ascii","Resv_AsciiHex":"Ascii","BaudRate_list":["50","75","110","134","150","300","600","1200","1800","2400","4800","7200","9600","19200","38400","57600","115200","230400","460800","921600"],"ByteSize_list":["5","6","7","8"],"Parity_list":["none","even","odd","spc","mrk"],"StopBits_list":["1","1.5","2"]}}  

   

名称

设置

含义

说明

emit

open

必需。打开串口事件请求。

 

Obj

comm

必需。

 

AppId

键值

必需。未定义时默认为AppId

一个页面打开多个应用,应用的AppId必须不同。

AppType

1

 

必需。

1 Pcomm

2 comm

有默认的右键菜单。

若为负数-1,则是浮动窗口

pos

1

0无界面不需要

1 有界面,位置自动识别

 

data

 

非必需。

启动后发送给串口的数据

AppShow

false

必需。空时默认窗口不可见。

有界面必需设置true。

 

 

AppStatus

1/0

系统自动反馈
1打开

0关闭

接收的数据

par

 

 

 

objName

字符串

字符串变量, 字母开头、数字、下划线、

用来在js调用变量

Port

com1/1

 

 

par0

 

 

 

BaudRate

9600

 

 

ByteSize

8

 

 

Parity

none

 

 

StopBits

1

 

 

codePage

65001

65001 utf8

1200 UCS-2LE

1201 UCS-2BE

0  不处理

反馈的数据编码,默认65001

backNoJson

true/false

默认false,反馈为json

true,调用的dll或者ocx反馈的数据直接发送,不处理编码或者json转换

反馈的数据处理

 

          1. 串口控件mscommm32

commm32功能低,暂时未测试。

在网页中调用commm32.ocx的串口控件

{"emit":"open","Obj":"comm","pos":1,"par":{},"data":"1111","par0":{"codePage":65001,"multiThread":1,"backNoJson":0}}   

 

   

名称

设置

含义

说明

emit

open

必需。打开串口事件请求。

 

Obj

comm

必需。

 

AppType

2

 

必需。

1 Pcomm

2 comm

有默认的右键菜单。

若为负数-1,则是浮动窗口

pos

0

无界面不需要

 

data

 

非必需。

启动后发送给串口的数据

AppShow

true/false

默认窗口不可见。

有界面必需设置true。

 

 

par

 

 

 

par0

 

 

 

attach

1

附着APP方式

 

wps最好采用此方式.

如果程序出现未知错误,可采用此方式

 

codePage

65001

65001 utf8

1200 UCS-2LE

1201 UCS-2BE

0  不处理

反馈的数据编码,默认65001

backNoJson

true/false

默认false,反馈为json

true,调用的dll或者ocx反馈的数据直接发送,不处理编码或者json转换

反馈的数据处理

           

 

发送数据

名称

设置

含义

说明

emit

send

必需。打开串口事件请求。

 

Obj

comm

必需。

 

AppType

1

 

必需。

comm

有默认的右键菜单。

若为负数-1,则是浮动窗口

data

 

必需。

发送给串口的数据

 

 

        1. USB Hid通信接口信息

{"emit":"hid"}

名称

设置

含义

说明

emit

hid

必需。获得hid通信接口信息。

 

 

 

 

 

        1. 热拔事件

 {"emit":"deviceNotification","driveType":2}

 

名称

设置

含义

说明

emit

deviceNotification

必需。监控热拔请求。

 

driveType

数值或者数组2 ,

 [1,2],

 -1

-1 关闭监控

1 DRIVE_NO_ROOT_DIR 说明无效的

2 DRIVE_REMOVABLE可移动磁盘

3 DRIVE_FIXED 固定磁盘

4 DRIVE_REMOTE 网络磁盘

5 DRIVE_CDROM 光驱

6 DRIVE_RAMDISK 为RAM磁盘

 

 

 

      1. 通话

{"emit":"msg", "Obj":"sid","toSids":["2"],"toGids":[1,2],"data":"hi, I am Tom."}

名称

设置

含义

说明

emit

msg

必需。通信事件请求。

 

Obj

sid

用户自行设定的sid

 

 

toSids

必需要有一个

非必需。可以是数组。

All sids=cid, self_sid emit msg  to(distinct (toSids ∪ toSids)-self_sid) 发送的全集是:发送的用户和发送所在的群(频道、小组)的用户的全集剔重后,排除自身

toGids

非必需。可以是数组。

data

 

必需。

 

      1. APP事件

 

参数格式如下

名称

设置

含义

说明

emit

open

必需。打开控件APP通信事件请求。

 

Obj

 

必需。

flash默认

word 后续支持

excel后续支持

CAD后续支持

 

AppType

±1±2±3±4

正数 表示嵌入

负数 浮动窗口

在Obj不同时,AppType的含义不一样。

当AppType负数浮动窗口时,默认APP为置顶。

取消置顶

{"emit":"setPar","Obj":"flash","topMost":false}

 

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par0

 

 

注意不同APP可能不同

attach

1

附着APP方式

 

wps最好采用此方式.

如果程序出现未知错误,可采用此方式

header

 

头部

 

 

 

 

 

userAgent

 

代理

只写属性,不可读。

crossDomain

bool

默认true

Ture

false

是否跨域

rightMenu

右键菜单

-1 不处理,控件原有状态

0/null禁用菜单

1自定义简单菜单

 

show_UpdateTool

显示下载插件等待窗口

默认true

false 不显示

需要下载更新包显示。可以直接在

https://github.com/appemit/appemit/plugins下载全集的插件

 

 

 

 

 

 

        1. 打开文件

以系统默认的程序,打开文件。

为了安全,不支持直接打开的文件类型包括

"exe";"msi";"cmd";"js";"jar";"inf";"com";"scr";"reg";"bat";"vbs";"py"

发送命令打开文件,以独立的方式打开,和浏览器进程独立,没有联系。

{"emit":"open", "Obj":"file","AppShow":false,"src":["/demo/htmlDemo/file/d1.docx",null]}

 

src:EXE文件路径, 启动参数="",操作类型 = "open",显示属性 _SW_,工作目录=""

名称

设置

含义

说明

emit

open

必需。打开控件APP通信事件请求。

 

Obj

file

必需。

 

AppId

1

必需。

 

src

 

必需。

 

[file,参数,startInfo]

pos

-1

 

 

AppShow

false

必需。

 

不发送pos位置等数据

par0

 

 

 

UWP

1、0、null

null 默认。以传统方式打开可执行文件,若失败尝试UWP文件打开
0只以传统方式打开可执行文件
1 只打开UWP文件

 

 

        1. "AppType":1打开flash网页webkit内核

{"emit":"open","Obj":"flash","AppType":1,"src":"http://sxiao.4399.com/4399swf/upload_swf/ftp14/yzg/20140328/bombit7/zx_game7.htm","pos":1,"par0":{"header":null,"userAgent":null,"crossDomain":true}}

名称

设置

含义

说明

emit

open

必需。打开控件APP通信事件请求。

 

Obj

flash

必需。

 

AppType

1

必需。

0 ActiveX

1 web

2 web flash文件

3 web媒体文件

若为负数-1,则是浮动窗口

src

 

必需。

 

AppType为0时支持本地文件,可以是相对或者绝对路径。

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

Par0

 

可选。

 

header

 

头部

 

userAgent

 

代理

只写属性,不可读。

crossDomain

bool

默认true

Ture

false

是否跨域

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

 

 

 

        1. "AppType":2打开网络flash

{"emit":"open","Obj":"flash","AppType":2,"src":"http://sxiao.4399.com/4399swf/upload_swf/ftp18/liuxy/20160130/17801/game.swf","pos":1,"par0":{"autoPlay":true,"loop":true,"quality":"high","wmode":"Transparent","header":null,"userAgent":null,"crossDomain":true}}

名称

设置

含义

说明

emit

open

必需。打开控件APP通信事件请求。

 

Obj

flash

必需。

 

AppType

2

必需。

0 ActiveX

1 web

2 web flash文件

3 web媒体文件

使用webkit内核打开,没有默认的右键菜单。

若为负数-2,则是浮动窗口

src

 

必需。

 

AppType为0时支持本地文件,可以是相对或者绝对路径。

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par0

autoPlay

可选。默认true

参考flash官方默认参数。

 

loop

可选。默认true

参考flash官方默认参数。

 

quality

可选。默认high

参考flash官方默认参数。

 

wmode

可选。默认Transparent

参考flash官方默认参数。

header

 

头部

 

userAgent

 

代理

只写属性,不可读。

crossDomain

bool

默认true

Ture

false

是否跨域

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

 

 

 

 

        1. "AppType":3打开flash等媒体文件

{"emit":"open","Obj":"flash","AppType":3,"src":"https://cdn.jsdelivr.net/gh/appemit/appemit/docs/vedio/x1.flv","pos":1,"par0":{"autoPlay":1,"loop":1,"header":null,"userAgent":null,"crossDomain":true}}

名称

设置

含义

说明

emit

open

必需。打开控件APP通信事件请求。

 

Obj

flash

必需。

 

AppType

3

必需。

0 ActiveX

1 web

2 web flash文件

3 web媒体文件

若为负数-3,则是浮动窗口

src

 

必需。

 

AppType为0时支持本地文件,可以是相对或者绝对路径。

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

Par0

autoPlay

可选。默认1

参考

https://player.alicdn.com/aliplayer/setting/setting.html

 

loop

可选。默认1

 

header

 

头部

 

userAgent

 

代理

只写属性,不可读。

crossDomain

bool

默认true

Ture

false

是否跨域

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

 

 

 

 

        1. "AppType":4打开flash文件

{"emit":"open","Obj":"flash","AppType":4,"src":"http://img1.yo4399.com/swf/00/0ff035e0e96584c07df65ab3636f72.swf","pos":1,"par0":{"autoPlay":1,"toolbar":0,"rightMenu":0,"hitCaption":0,"hideStop":0,"loop":1,"volumeMute":0,"flashVars":"a=0&b=0&c=SetInSrc"}}

名称

设置

含义

说明

emit

open

必需。打开控件APP通信事件请求。

 

Obj

flash

必需。

flash默认

word 后续支持

excel后续支持

CAD后续支持

 

AppType

4

必需。

4 ActiveX

1 web

2 web flash文件

3 web媒体文件

设为4时,如何本地没有安装ActiveX则默认使用方式2打开

若为负数-4,则是浮动窗口

src

 

必需。

 

AppType为0时支持本地文件,可以是相对或者绝对路径。

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par0

autoPlay

可选。

0 不自动播放

1自动播放,默认

 

 

toolbar

可选。

0 没有控制条,默认

1 有控制条

 

 

rightMenu

可选。

0

1

 

 

hitCaption

可选。

0 左按鼠标不能拖动,默认

1 左按鼠标能拖动

 

 

hideStop

可选。

0 隐藏不见时不停止播放,默认

1隐藏不见时停止播放

 

 

loop

可选。

0 不自动循环播放,

1 循环播放,默认

 

 

volumeMute

可选。

0 不静音,默认

1 静音

 

 

flashVars

可选。

可以设置在src里面

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

 

 

 

 

        1.  IE内核打开网页

{"emit":"open","Obj":"web","AppType":1,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.appemit.com"},"par0":{"header":null,"noScriptErr":true,"UIFLAG":null,"DLCTL":null,"userAgent":null,"crossDomain":true,"rightMenu":null}}

 

名称

设置

含义

说明

emit

open

必需。打开网页事件请求。

 

Obj

web

必需。

 

AppType

1

必需。

1 IE内核

2 webkit内核

3 blink 内核

有默认的右键菜单。

若为负数-1,则是浮动窗口

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par

 

必需。优先级别依次下降

三个参数必须有一个不是空。

htmlStr

 

Html代码

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

URL

http://www.appemit.com 或者

/demo/htmlDemo/html.html

支持网页地址或者本地html文件路径。

Par0

 

可选。

 

emulation

若不指定,默认最新的IE兼容版本

11001   页面始终以 IE11 模式显示,而不考虑 指令

11000   包含基于标准的 指令的页面将以 IE11 模式显示

10001   页面始终以 IE10 模式显示,而不考虑 指令

10000   包含基于标准的 指令的页面将以 IE10 模式显示

9999    页面始终以 IE9 模式显示,而不考虑 指令

9000    包含基于标准的 指令的页面将以 IE9 模式显示

8888    页面始终以 IE8 模式显示,而不考虑 指令

8000    包含基于标准的 指令的页面将以 IE8 模式显示

7000    包含基于标准的 指令的页面将以 IE7 模式显示

参考

https://www.csdn.net/article/2012-10-22/2811049

noScriptErr

bool

默认true

Ture

false

 

UIFLAG

 

_UIFLAG_DIALOG=@0x1/*_UIFLAG_DIALOG*/

_UIFLAG_DISABLE_HELP_MENU=@0x2/*_UIFLAG_DISABLE_HELP_MENU*/

_UIFLAG_NO3DBORDER=@0x4/*_UIFLAG_NO3DBORDER*/

_UIFLAG_SCROLL_NO=@0x8/*_UIFLAG_SCROLL_NO*/

_UIFLAG_DISABLE_SCRIPT_INACTIVE=@0x10/*_UIFLAG_DISABLE_SCRIPT_INACTIVE*/

_UIFLAG_OPENNEWWIN=@0x20/*_UIFLAG_OPENNEWWIN*/

_UIFLAG_DISABLE_OFFSCREEN=@0x40/*_UIFLAG_DISABLE_OFFSCREEN*/

_UIFLAG_FLAT_SCROLLBAR=@0x80/*_UIFLAG_FLAT_SCROLLBAR*/

_UIFLAG_DIV_BLOCKDEFAULT=@0x100/*_UIFLAG_DIV_BLOCKDEFAULT*/

_UIFLAG_ACTIVATE_CLIENTHIT_ONLY=@0x200/*_UIFLAG_ACTIVATE_CLIENTHIT_ONLY*/

_UIFLAG_OVERRIDEBEHAVIORFACTORY=@0x400/*_UIFLAG_OVERRIDEBEHAVIORFACTORY*/

_UIFLAG_CODEPAGELINKEDFONTS=@0x800/*_UIFLAG_CODEPAGELINKEDFONTS*/

_UIFLAG_URL_ENCODING_DISABLE_UTF8=@0x1000/*_UIFLAG_URL_ENCODING_DISABLE_UTF8*/

_UIFLAG_URL_ENCODING_ENABLE_UTF8=@0x2000/*_UIFLAG_URL_ENCODING_ENABLE_UTF8*/

_UIFLAG_ENABLE_FORMS_AUTOCOMPLETE=@0x4000/*_UIFLAG_ENABLE_FORMS_AUTOCOMPLETE*/

_UIFLAG_ENABLE_INPLACE_NAVIGATION=@0x10000/*_UIFLAG_ENABLE_INPLACE_NAVIGATION*/

_UIFLAG_IME_ENABLE_RECONVERSION=@0x20000/*_UIFLAG_IME_ENABLE_RECONVERSION*/

_UIFLAG_THEME=@0x40000/*_UIFLAG_THEME*/

_UIFLAG_NOTHEME=@0x80000/*_UIFLAG_NOTHEME*/

_UIFLAG_NOPICS=@0x100000/*_UIFLAG_NOPICS*/

_UIFLAG_NO3DOUTERBORDER=@0x200000/*_UIFLAG_NO3DOUTERBORDER*/

_UIFLAG_DISABLE_EDIT_NS_FIXUP=@0x400000/*_UIFLAG_DISABLE_EDIT_NS_FIXUP*/

_UIFLAG_LOCAL_MACHINE_ACCESS_CHECK=@0x800000/*_UIFLAG_LOCAL_MACHINE_ACCESS_CHECK*/

_UIFLAG_DISABLE_UNTRUSTEDPROTOCOL=@0x1000000/*_UIFLAG_DISABLE_UNTRUSTEDPROTOCOL*/

_UIFLAG_HOST_NAVIGATES=@0x2000000/*_UIFLAG_HOST_NAVIGATES*/

_UIFLAG_ENABLE_REDIRECT_NOTIFICATION=@0x4000000/*_UIFLAG_ENABLE_REDIRECT_NOTIFICATION*/

_UIFLAG_USE_WINDOWLESS_SELECTCONTROL=@0x8000000/*_UIFLAG_USE_WINDOWLESS_SELECTCONTROL*/

_UIFLAG_USE_WINDOWED_SELECTCONTROL=@0x10000000/*_UIFLAG_USE_WINDOWED_SELECTCONTROL*/

_UIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE=@0x20000000/*_UIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE*/

_UIFLAG_DPI_AWARE=@0x40000000/*_UIFLAG_DPI_AWARE*/

可以使用一个或多个_UIFLAG_ 前缀的常量自定义外观,多个常量之间用位或操作符( | ) 连接。

LOG 禁止选中文本( 用于 web ui )

_UIFLAG_SCROLL_NO   禁用滚动条

_UIFLAG_NO3DBORDER  禁用所有窗口3D边框

_FLAG_NO3DOUTERBORDER   禁用顶层窗口3D边框

_UIFLAG_DISABLE_HELP_MENU   在菜单中移除帮助菜单

_UIFLAG_DISABLE_SCRIPT_INACTIVE 窗口激活以前不运行网页脚本

_UIFLAG_OPENNEWWIN  在新窗口打开链接

_UIFLAG_FLAT_SCROLLBAR  显示平面滚动条

_UIFLAG_ACTIVATE_CLIENTHIT_ONLY 仅在用户点击客户区时激活(非客户区指滚动条等位置)

_UIFLAG_URL_ENCODING_DISABLE_UTF8   禁用UTF8发送URL

_UIFLAG_URL_ENCODING_ENABLE_UTF8    使用UTF8发送URL

_UIFLAG_ENABLE_FORMS_AUTOCOMPLETE   允许表单自动完成

_UIFLAG_ENABLE_INPLACE_NAVIGATION   在点击邮件等链接时,打开相关应用程序,而不是新开窗口

_UIFLAG_NOTHEME 使用主题

_UIFLAG_THEME   禁用主题

_UIFLAG_NOPICS  禁用内容分级

_UIFLAG_DIV_BLOCKDEFAULT    编辑模式回车输入div

_UIFLAG_DISABLE_EDIT_NS_FIXUP   编辑模式禁用名字空间修正

_UIFLAG_LOCAL_MACHINE_ACCESS_CHECK  防止远程网页导航到本地计算机

_UIFLAG_DISABLE_UNTRUSTEDPROTOCOL   禁止非信任协议,包含 ms-its, ms-itss, its,mk:@msitstore

DLCTL

 

_DLCTL_DLIMAGES=@0x10/*_DLCTL_DLIMAGES*/

_DLCTL_VIDEOS=@0x20/*_DLCTL_VIDEOS*/

_DLCTL_BGSOUNDS=@0x40/*_DLCTL_BGSOUNDS*/

_DLCTL_NO_SCRIPTS=@0x80/*_DLCTL_NO_SCRIPTS*/

_DLCTL_NO_JAVA=@0x100/*_DLCTL_NO_JAVA*/

_DLCTL_NO_RUNACTIVEXCTLS=@0x200/*_DLCTL_NO_RUNACTIVEXCTLS*/

_DLCTL_NO_DLACTIVEXCTLS=@0x400/*_DLCTL_NO_DLACTIVEXCTLS*/

_DLCTL_DOWNLOADONLY=@0x800/*_DLCTL_DOWNLOADONLY*/

_DLCTL_NO_FRAMEDOWNLOAD=@0x1000/*_DLCTL_NO_FRAMEDOWNLOAD*/

_DLCTL_RESYNCHRONIZE=@0x2000/*_DLCTL_RESYNCHRONIZE*/

_DLCTL_PRAGMA_NO_CACHE=@0x4000/*_DLCTL_PRAGMA_NO_CACHE*/

_DLCTL_NO_BEHAVIORS=@0x8000/*_DLCTL_NO_BEHAVIORS*/

_DLCTL_NO_METACHARSET=@0x10000/*_DLCTL_NO_METACHARSET*/

_DLCTL_URL_ENCODING_DISABLE_UTF8=@0x20000/*_DLCTL_URL_ENCODING_DISABLE_UTF8*/

_DLCTL_URL_ENCODING_ENABLE_UTF8=@0x40000/*_DLCTL_URL_ENCODING_ENABLE_UTF8*/

_DLCTL_NOFRAMES=@0x80000/*_DLCTL_NOFRAMES*/

_DLCTL_FORCEOFFLINE=@0x10000000/*_DLCTL_FORCEOFFLINE*/

_DLCTL_NO_CLIENTPULL=@0x20000000/*_DLCTL_NO_CLIENTPULL*/

_DLCTL_SILENT=@0x40000000/*_DLCTL_SILENT*/

_DLCTL_OFFLINEIFNOTCONNECTED=@0x80000000/*_DLCTL_OFFLINEIFNOTCONNECTED*/

_DLCTL_OFFLINE=@0x80000000/*_DLCTL_OFFLINE*/

DLCTL_前缀的常量以控制下载行为,多个常量之间用位或操作符( | ) 连接。

_DLCTL_DLIMAGES 允许从服务器下载图片,如果指定了第三个参数,未指定此标志,则网页不下载任何图片.

_DLCTL_VIDEOS   允许从服务器下载视频片断,如果指定了第三个参数,未指定此标志,则网页不下载任何视频片断.

_DLCTL_BGSOUNDS 允许播放文档指定的背景声音

_DLCTL_NO_SCRIPTS   web窗体不执行任何页面脚本(指javascript等)

_DLCTL_NO_JAVA  web窗体不执行任何 Java applet

_DLCTL_NO_RUNACTIVEXCTLS    web窗体不执行文档中的任何 ActiveX 控件;

_DLCTL_NO_DLACTIVEXCTLS web窗体不下载文档中的任何 ActiveX 控件;

_DLCTL_DOWNLOADONLY web窗体下载网页,但不显示

_DLCTL_NO_FRAMEDOWNLOAD web窗体对包含框架的页面进行语法分析但不下载任何帧, 同时忽略框架,

_DLCTL_RESYNCHRONIZE    web窗体忽略缓存中的数据并向服务器请求更新

_DLCTL_PRAGMA_NO_CACHE  迫使请求发送给服务器并忽略代理(这里一般指服务端缓存),即使代理指明数据是最新的也是如此.

_DLCTL_NO_METACHARSET   隐藏文档中的 META 元素指示的字符集;

_DLCTL_URL_ENCODING_DISABLE_UTF8    禁止 UTF-8 编码

_DLCTL_URL_ENCODING_ENABLE_UTF8 允许 UTF-8 编码

_DLCTL_NOFRAMES 禁止框架

_DLCTL_FORCEOFFLINE web窗体工作在脱机方式

_DLCTL_NO_CLIENTPULL    web窗体不执行任何客户端的 pull 操作

_DLCTL_SILENT   组件对话框、脚本错误对话框静默模式

_DLCTL_OFFLINEIFNOTCONNECTED    如果未连接互联网,浏览器组件将以脱机方式工作

header

 

头部

 

userAgent

 

代理

默认null

crossDomain

bool

默认true

Ture

false

 

rightMenu

右键菜单

-1 不处理,控件原有状态

0/null禁用菜单

1自定义简单菜单

各个含义不同,请注意。-1 不处理。默认有详细菜单。通常需要使用flash右键使用此值。

对于flash右键功能请测试。

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

 

 

 

        1.  webkit内核打开网页

{"emit":"open","Obj":"web","AppType":2,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.appemit.com"},"par0":{"header":null, "userAgent":null,"crossDomain":true,"rightMenu":1,"downLoad":1}}

 

名称

设置

含义

说明

emit

open

必需。打开网页事件请求。

 

Obj

web

必需。

 

AppType

2

必需。

1 IE内核

2 webkit内核

3 blink 内核

有默认的右键菜单。

若为负数-2,则是浮动窗口

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par

 

必需。优先级别依次下降

三个参数必须有一个不是空。

htmlStr

 

Html代码

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

URL

http://www.appemit.com 或者

/demo/htmlDemo/html.html

支持网页地址或者本地html文件路径。

Par0

 

可选。

 

header

 

头部

 

userAgent

 

代理

只写属性,不可读。

crossDomain

bool

默认true

Ture

false

是否跨域

rightMenu

右键菜单

-1 不处理,控件原有状态

0/null禁用菜单

1自定义简单菜单

各个含义不同,请注意。-1 不处理。默认没有菜单。通常需要使用flash右键使用此值。

对于flash右键功能请测试。

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

downLoad

1

默认true

true

false

支持连接下载功能

 

 

 

 

        1.  blink内核打开网页

{"emit":"open","Obj":"web","AppType":3,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.appemit.com"},"par0":{"header":null, "userAgent":null,"crossDomain":true,"rightMenu":1,"downLoad":1}}

 

名称

设置

含义

说明

emit

open

必需。打开网页事件请求。

 

Obj

web

必需。

 

AppType

3

必需。

1 IE内核

2 webkit内核

3 blink 内核

有默认的右键菜单。

若为负数-3,则是浮动窗口

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par

 

必需。优先级别依次下降

三个参数必须有一个不是空。

htmlStr

 

Html代码

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

URL

http://www.appemit.com 或者

/demo/htmlDemo/html.html

支持网页地址或者本地html文件路径。

Par0

 

可选。

 

header

 

头部

 

userAgent

 

代理

可读写。默认

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)

 Chrome/60.0.3729.169 Safari/537.36

crossDomain

bool

默认true

true

false

 

rightMenu

右键菜单

-1 不处理,控件原有状态

0/null禁用菜单

1自定义简单菜单

各个含义不同,请注意。-1 不处理。默认有菜单。通常需要使用flash右键使用此值。

对于flash右键功能请测试。

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

downLoad

1

默认true

true

false

支持连接下载功能

 

        1.  打开PDF文件

打开阅读PDF文件,支持本地和网络PDF

{"emit":"open","Obj":"web","AppType":4,"pos":1,"par":{"URL":" https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/AppEmit_help.pdf "},"par0":{"rightMenu":1}}

 

名称

设置

含义

说明

emit

open

必需。打开PDF事件请求。

 

Obj

web

必需。

 

AppType

4

必需。

1 IE内核

2 webkit内核

3 blink 内核

4 PDF 文件

有默认的右键菜单。

若为负数-4,则是浮动窗口

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

par

 

必需。

 

URL

https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/AppEmit_help.pdf 或者

/demo/AppEmit_help.pdf

支持网页pdf地址,或本地文件绝对或相对路径。

Par0

 

可选。

 

rightMenu

右键菜单

-1 不处理,控件原有状态

0/null禁用菜单

1自定义简单菜单

各个含义不同,请注意。

 

rightMenu

右键菜单

-1 不处理,控件原有状态

0/null禁用菜单

1自定义简单菜单

各个含义不同,请注意。-1 不处理。默认有菜单。通常需要使用flash右键使用此值。

对于flash右键功能请测试。

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

 

 

 

        1.  Office

创建、打开阅读、编辑Office文件,支持本地和网络文件, 包括word\excel\PPT文件

更多VBA官方参考https://docs.microsoft.com/zh-cn/office/vba/api/overview/word

或者录制宏,编辑参考代码。

          1. msOffice

{"emit":"open","Obj":"office","AppType":1,"src":"/demo/htmlDemo/file/d1.docx","pos":1,"par0":{"Titlebar":0,"ProtectDoc":0,"Menubar":0,"Toolbars":0,"btnFile":0,"HttpPost":{"URL":"http://eu.httpbin.org/post","valid":0,"fileName":"s1.docx"},"MNU_NEWBLANK":0,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

名称

设置

含义

说明

emit

open

必需。打开office事件请求。

 

Obj

office

必需。

 

AppType

1

 

必需。

  1. word
  2. excel
  3. powerpoint

 

有默认的右键菜单。

若为负数-1,则是浮动窗口

对于特殊wps,通常采用attach方式打开。

src

字符串;

path为

 [path, openPar]

path为必需, 字符串网址或者本地相对或者绝对路径

,或者数组(防止网页src里面没有文件名称或者后缀名称需要修改,则使用fileType

)。

openPar: 具体不同。

"/demo/htmlDemo/file/x1.xls"

["/demo/htmlDemo/file/x1.xls" ,openPar]

[[http://.../demo/htmlDemo/file/x1.xls,"x2.xlsx"],openPar]

Word系列文件

Excel系列文件

PPT系列文件

不同应用的openPar不同,详细见后

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

Par0

 

可选。

 

progId

[]

默认为MS office

["Word.Application","Kwps.Application","WPS.Application"]

["Excel.Application","Ket.Application","ET.Application"]

["PowerPoint.Application","WPP.Application"]

采用不同自动化服务器打开文档、表格、幻灯片,按顺序依次尝试。

默认打开微软office\金山wps

attach

1

附着APP方式

 

wps最好采用此方式.

如果程序出现未知错误,可采用此方式

noMinMax

1

1 禁用关闭 最小 最大化按钮

0/null 可最大小化 关闭

遮盖关闭 最小 最大化按钮

openPar

 

 

不同应用不一样,详细见后

Titlebar

0

默认 0不显示标题栏

1 显示标题栏

0 不显示

 

Menubar

1

默认 1显示菜单栏

1 显示标题栏

0 不显示

 

Statusbar

1

默认 1显示状态栏

1 显示状态栏

0 不显示

 

Protect

1

 

不同应用不一样,详细见后

Toolbars                       

1

默认 1 ,显示工具栏

1 显示

0 不显示

需要手动点击

btnFile

1

工具栏的文件File按钮

1 /true 默认显示

0

Toolbars为真时有效                     

ViewType

1

 

不同应用不一样,详细见后

HttpPost

{"URL":"url",

"valid":1, "method":"POST"

"username":"name"

"username":"*"

"cookie":null}

 URL上传的地址,必需

method 上传的方法POST\GET,默认POST

cookie

如果上传,URL必需,valid=1设为有效。

 

header

 

头部

以下参数用于下载上传使用

userAgent

 

代理

默认null

cookies

 

 

 

proxy

 

 

 

proxyBypass

 

 

 

flags

 

 

 

crossDomain

bool

默认true

Ture

false

 

MNU_UPLOAD

0

默认 0 ,工具栏上传命令菜单

1 显示上传提交

0 不显示

Toolbars、btnFile、HttpPost["URL"] 同时为真时有效

MNU_NEWBLANK  

0

默认 0 ,工具栏FILE命令菜单

1 显示新建空白

0 不显示

Toolbars、btnFile 同时为真时有效                       

MNU_NEW                

0

默认 0 ,工具栏FILE命令菜单

1 显示新建

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_OPEN              

0

默认 0 ,工具栏FILE命令菜单

1 显示打开

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_CLOSE            

0

默认 0 ,工具栏FILE命令菜单

1 显示关闭

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_SAVE               

0

默认 0 ,工具栏FILE命令菜单

1 显示保存

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_SAVEAS          

0

默认 0 ,工具栏FILE命令菜单

1 显示另存

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_PGSETUP        

0

默认 0 ,工具栏FILE命令菜单

1 显示页面设置

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_PRINT              

0

默认 0 ,工具栏FILE命令菜单

1 显示打印

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_PROPS             

0

默认 0 ,工具栏FILE命令菜单

1 显示属性

0 不显示

Toolbars、btnFile 同时为真时有效

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

          1. Word 其它参数

更多https://docs.microsoft.com/zh-cn/office/vba/api/overview/word

名称

设置

含义

说明

Par0

 

可选。

 

src

[path,0,1,0]

ConfirmConversions=false, _

        ReadOnly=false, AddToRecentFiles=false, PasswordDocument="", _

        PasswordTemplate="", Revert=false, WritePasswordDocument="", _

        WritePasswordTemplate="", Format=wdOpenFormatAuto, XMLTransform=""

按顺序

ViewType

1

wdMasterView  5   主控视图。

wdNormalView  1   普通视图。

wdOutlineView 2   大纲视图。

wdPrintPreview    4   打印预览视图。

wdPrintView   3   页面视图。

wdReadingView 7   阅读视图。

wdWebView  6   Web 视图。

 

Protect

[Type,NoReset,Password,UseIRMEnforceStyleLock]

Type必需

wdAllowOnlyComments=1只允许将批注添加到文档中。

wdAllowOnlyFormFields=2只允许通过窗体域将内容添加到文档中。

wdAllowOnlyReading=3 允许对文档进行只读访问。

wdAllowOnlyRevisions=0只允许对现有内容进行修订。

wdNoProtection=-1 不对文档应用保护。

 

更改为自行在officeJs中控制。后面同

 

对非保护的文档保护。

网络文件,不设置则默认为保护文档,

[3,null,"random"],产生随机密码,密码不可获取,请慎重处理。

不保护设置为[-1]

对本地文件不默认处理

Unprotect

pwd

文档解锁密码

对保护的文档(type!=-1)输入解锁密码Unprotect不保护。

 

 

 

 

 

 

 

 

          1. Excel 其它参数

更多https://docs.microsoft.com/zh-cn/office/vba/api/overview/excel

名称

设置

含义

说明

Par0

 

可选。

 

src

[path, openPar]

UpdateLinks ReadOnly Format Password WriteResPassword IgnoreReadOnlyRecommended原产地定界符可编辑通知转换器 AddToMru Local CorruptLoad)

["/demo/htmlDemo/file/x1.xlsx",null,1]

[[https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/file/x1.tmp,"x11.xlsx"]]

 

https://docs.microsoft.com/zh-cn/office/vba/api/excel.workbooks.open

ViewType

1

xlNormalView  1   正常。

xlPageBreakPreview   双面   分页预览。

xlPageLayoutView  第三章 页面视图

 

Protect

数组[]

Password DrawingObjects内容场景 UserInterfaceOnly AllowFormattingCells AllowFormattingColumns AllowFormattingRows AllowInsertingColumns AllowInsertingRows AllowInsertingHyperlinks AllowDeletingColumns AllowDeletingRows AllowSorting AllowFiltering AllowUsingPivotTables)

对所有已经已存工作表保护

注意AllowFiltering参数

https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.protect

Unprotect

pwd

文档解锁密码

输入解锁密码Unprotect不保护。

 

Activate_ID

1,数值或者字符串

工作表的序号(左边第一为1),或者名称.默认打开的第几个工作表,或者为该名称的工作表

暂未启用

 

          1. PowerPoint 其它参数

更多https://docs.microsoft.com/zh-cn/office/vba/api/overview/powerpoint

名称

设置

含义

说明

Par0

 

可选。

 

src

[path, openPar]

ReadOnly、Untitled无标题、 WithWindow

https://docs.microsoft.com/zh-cn/office/vba/api/powerpoint.presentations.open

ViewType

1

ppViewHandoutMaster '讲义母版4

ppViewMasterThumbnails '缩略图母版12

ppViewNormal '普通视图9

ppViewNotesMaster '备注母版5

ppViewNotesPage '备注页3

ppViewOutline '大纲视图6

ppViewPrintPreview '打印预览10

ppViewSlide '幻灯片视图1

ppViewSlideMaster '幻灯片母版2

ppViewSlideSorter '幻灯片浏览7

ppViewThumbnails '缩略图视图11

ppViewTitleMaster '标题母版8

 

ppt ppViewType 类型

 

 

 

 

 

 

          1. 更多示例
  1. 打开本地txt,只读,不显示标题栏,显示工具栏,不上传

{"emit":"open","Obj":"office","AppType":1,"src":"/demo/htmlDemo/file/t1.txt" ,"pos":1,"par0":{"openPar":[null,true],"Titlebar":0,"ProtectDoc":0,"Menubar":0,"Toolbars":0,"btnFile":0,"HttpPost":{"URL":"http://eu.httpbin.org/post","valid":0,"fileName":"s1.docx"},"MNU_NEWBLANK":0,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

 

  1. 打开网络excel, 重命名,不显示标题栏,显示工具栏,不上传

{"emit":"open","Obj":"office","AppType":2,"src":["https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/file/x1.tmp","a1.xlsx"],"pos":1,"par0":{"Titlebar":0,"Menubar":1,"Toolbars":1,"btnFile":0,"HttpPost":{"URL":"http://eu.httpbin.org/post","valid":0},"MNU_NEWBLANK":0,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

  1. 打开网络ppt, 重命名,幻灯片视图,不显示标题栏,显示工具栏,不上传

{"emit":"open","Obj":"office","AppType":3,"src":["https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/file/p1.tmp","p1.pptx"],"pos":1,"par0":{"ViewType":1,"Titlebar":0,"Menubar":1,"Toolbars":1,"btnFile":0,"HttpPost":{"URL":"http://eu.httpbin.org/post","valid":0},"MNU_NEWBLANK":0,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

 

          1. 疑难
  1. 要确保单独使用word打开,文件格式不报错,否则打不开。
  2. 比如文档格式不对,需要重新另存打开,否则会出现等未知报错。
  3. 选择保存时如果时间过长,会出现服务器正在运行中,需要在任务管理器关闭对应的word\execel\ppt的进程,重新启动。
  4. Office自动化初始化

Office 服务器 CLSID 项

Access.Application   {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}

Excel.Application    {00024500-0000-0000-C000-000000000046}

FrontPage.Application   {04DF1015-7007-11D1-83BC-006097ABE675}

Outlook.Application  {0006F03A-0000-0000-C000-000000000046}

Application.Application {91493441-5A91-11CF-8700-00AA0060263B}

Word.Application {000209FF-0000-0000-C000-000000000046}

在运行中

D:\PROGRA~1\MICROS~1\Office15\WINWORD.EXE /RegServer

检查HKEY_CLASSES_ROOT\CLSID CLSID项的 LocalServer32

D:\PROGRA~1\MICROS~1\Office15\EXCEL.EXE /automation

D:\PROGRA~1\MICROS~1\Office15\WINWORD.EXE /Automation

D:\PROGRA~1\MICROS~1\Office15\POWERPNT.EXE /AUTOMATION

        1. WPS

创建、打开阅读、编辑金山Office文件,支持本地和网络文件, 包括wps\et\wpp文件

更多VBA官方参考 https://open.wps.cn/docs/office wps客户端开发

和office基本一致,主要设置progId 参数和增加了attach 参数

或者录制宏,编辑参考代码。

{"emit":"open","Obj":"office","AppType":1,"src":"/demo/htmlDemo/file/d1.docx","pos":1,"par0":{"attach":1,"progId": "KWPS.Application","noMinMax":1,"ViewType":1,"Titlebar":0,"Menubar":1,"Toolbars":1,"btnFile":0}}

名称

设置

含义

说明

emit

open

必需。打开office事件请求。

 

Obj

office

必需。

 

AppType

1

 

必需。

  1. word
  2. excel
  3. powerpoint

 

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串;

path为

 [path, openPar]

path为必需, 字符串网址或者本地相对或者绝对路径

,或者数组(防止网页src里面没有文件名称或者后缀名称需要修改,则使用fileType

)。

openPar: 具体不同。

"/demo/htmlDemo/file/x1.xls"

["/demo/htmlDemo/file/x1.xls" ,openPar]

[[http://.../demo/htmlDemo/file/x1.xls,"x2.xlsx"],openPar]

Word系列文件

Excel系列文件

PPT系列文件

不同应用的openPar不同,详细见后

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

AppShow

 

必需。

true App可见

false App不可见

通常空时默认为true

调用comm为false

AppFollow

 

必需。空时默认为true

1 跟随变化

0 不变化

AppShow为true时,App随浏览器移动变形隐藏显示等事件

Par0

 

可选。

 

progId

"KWPS.Application" 或者[]

默认为MS office

["KWPS.Application","WPS.Application"]

["KET.Application","ET.Application"]

["WPP.Application","WPP.Application"]

采用不同自动化服务器打开文档、表格、幻灯片,按顺序依次尝试。

 

attach

1

附着APP方式

 

wps最好采用此方式

noMinMax

1

1 禁用关闭 最小 最大化按钮

0/null 可最大小化 关闭

遮盖

 

其它参数见Office章节,注意金山wps的VBA代码和微软的不一定相同。

 

        1. Office javaScript
          1. 嵌入网页JS控制

在前章节的基础上,增加一个javaScipt文件或者html文件,在officeJs中添加代码控制office,支持word excel ppt。更多参考VBA和宏录制。

更多https://docs.microsoft.com/zh-cn/office/vba/api/overview/word

{"emit":"open","Obj":"office","AppType":1,"src":"/demo/htmlDemo/file/d1.docx","pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/officeJs.html","webJs":1},"par0":{"Titlebar":0,"Menubar":0,"Toolbars":0,"btnFile":0,"Statusbar":0 }}

在websocket中打开d1.docx,实际在par的文件/demo/htmlDemo/ officeJs.html中的js修改打开d2.doc,并且增加输入文字功能。

名称

设置

含义

说明

emit

open

必需。打开office事件请求。

 

Obj

office

必需。

 

AppType

1

 

必需。

  1. word
  2. excel
  3. powerpoint

 

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串;

path为

 [path, openPar]

path为必需, 字符串网址或者本地相对或者绝对路径

,或者数组(防止网页src里面没有文件名称或者后缀名称需要修改,则使用fileType

)。

openPar: 具体不同。

"/demo/htmlDemo/file/x1.xls"

["/demo/htmlDemo/file/x1.xls" ,openPar]

[[http://.../demo/htmlDemo/file/x1.xls,"x2.xlsx"],openPar]

Word系列文件

Excel系列文件

PPT系列文件

不同应用的openPar不同,详细见后

par

 

 

下面三个参数必须有一个。

htmlStr

 

Html代码

 

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

 

URL

http://www.appemit.com.../ officeJs.html 或者

/demo/htmlDemo/js/officeJs.html

支持网页地址或者本地html文件路径。

 

webJs

1

启用par的设置的嵌入网页JS

1 IE

2 webkit

3 blink

0 关闭

或者设置为0,把officeJs的src参数设置在src里面。

使用runCmd执行输入命令。

在officeJs.html中也可以设置src参数。

webJs0

0

0 关闭本js的控制 ,即使webJs大于0

注释后启用。

 

系统默认执行了4个过程接口

AppJs_init

AppJs_loaded

AppJs_destroy

AppJs_closed

 

 

 

  • AppJs_init=function(AppType)

如果在浏览器网页中没有设置src,可以在这里设置。

webJs0,0 关闭本js的控制  

 objName:"word"   为程序对象名称,可不设置,自动根据AppType判断。如果修改了为word1,则后面的AppJsObject.word.Selection,应该修改为AppJsObject.word1.Selection

 

 

  • AppJs_loaded=function(AppType){      

 //系统启动APP ,产生AppJsObject.objName对象后执行

       定义了全局变量AppJsObject.word

Selection=AppJsObject.word.Selection;Application=AppJsObject.word.Application;'    //注意 结尾一定要有;  或者\r\n

 

  •  AppJs_destroy=function(){    //AppJsObject.objName销毁前执行

 

  • AppJs_closed=function(status){  //AppJsObject.objName关闭后执行。已经没有AppJsObject.objName对象了

 

          1. 浏览器网页执行代码命令控制

Var Req={"emit":"runCmd","Obj":"office","codeStr": "Selection.TypeParagraph();Selection.TypeText("控制插入一句话-runCmd"); } "

EmitReq(Req);

通过前面officeJs.html定义的AppJsObject.objName,可以直接控制office。当然也可以不需要officeJs.html定义,能在浏览器网页中websocket发送使用"emit":"runCmd"命令发送AppJs_init、AppJs_loaded,代码也可以。

可以添加js文件或者html,在html还能动态控制office,更多功能请联系我们。

 

        1. Office DsoFramer

创建、打开阅读、编辑Office文件,支持本地和网络文件, 包括word\excel\PPT文件

{"emit":"open",

"Obj":"office",

"AppType":8,

"src":"/demo/htmlDemo/file/x1.xls",

"pos":1,

"par0":{"Caption":true,

       "ProtectDoc":0,

       "Toolbars":true,

       "btnFile":true,

       "MNU_NEWBLANK":0,

       "MNU_NEW":0,

       "MNU_OPEN":0,

       "MNU_CLOSE":0,

       "MNU_SAVE":0,

       "MNU_SAVEAS":0,

       "MNU_PGSETUP":0,

       "MNU_PRINT":0,

       "MNU_PROPS":0,

       "show_UpdateTool":true}

}

名称

设置

含义

说明

emit

open

必需。打开office事件请求。

 

Obj

office

必需。

 

AppType

8

必需。

8 DsoFramer

 

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串src

网址或者本地相对或者绝对路径

或者数组

[src,flag, ProgId ,username,pwd,fileType]

src为必需。

 

flag:true/false

ProgId:

Word.Document

Excel.Sheet

PowerPoint.Show

Visio.Drawing

filename:temp.doc等防止src里面没有文件名称或者后缀名称不对,则使用fileType;

 

{"/demo/htmlDemo/file/x1.xls",true, "Excel.Sheet","name","PWD"}

Word系列文件

Excel系列文件

PPT系列文件

fileType

pos

{"left":372,"top":203,"width":606,"height":406}

必需。

1 默认使用代码自动识别的位置。

 

对不同的浏览器,自动识别的位置需要优化

Par0

 

可选。

 

Caption                        

0

默认 false

True 显示路径

string显示具体string

0/false/null

AppType为负数时候显示标题栏

ProtectDoc                   

0

默认 0 ,保护文档

1 肯定,解锁密码为 随机字符串,不可获得。

String, 解锁密码为具体String

0 可编辑文档

 

Toolbars                       

1

默认 1 ,显示工具栏

1 显示

0 不显示

 

btnFile

1

工具栏的文件File按钮

1 /true 默认显示

0

Toolbars为真时有效                     

ShowView

1

    wdNormalView = 1,

    wdOutlineView = 2,

    wdPrintView = 3,

    wdPrintPreview = 4,

    wdMasterView = 5, //这个是大纲

    wdWebView = 6

 

HttpPost

{"URL":"url", "method":"POST"

"username":"name"

"username":"*"

"cookie":null}

 URL上传的地址,必需

method 上传的方法POST\GET,默认POST

cookie

如果上传,URL必需。

 

MNU_UPLOAD

0

默认 0 ,工具栏上传命令菜单

1 显示上传提交

0 不显示

Toolbars、btnFile、HttpPost["URL"] 同时为真时有效

MNU_NEWBLANK  

0

默认 0 ,工具栏FILE命令菜单

1 显示新建空白

0 不显示

Toolbars、btnFile 同时为真时有效                       

MNU_NEW                

0

默认 0 ,工具栏FILE命令菜单

1 显示新建

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_OPEN              

0

默认 0 ,工具栏FILE命令菜单

1 显示打开

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_CLOSE            

0

默认 0 ,工具栏FILE命令菜单

1 显示关闭

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_SAVE               

0

默认 0 ,工具栏FILE命令菜单

1 显示保存

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_SAVEAS          

0

默认 0 ,工具栏FILE命令菜单

1 显示另存

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_PGSETUP        

0

默认 0 ,工具栏FILE命令菜单

1 显示页面设置

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_PRINT              

0

默认 0 ,工具栏FILE命令菜单

1 显示打印

0 不显示

Toolbars、btnFile 同时为真时有效

MNU_PROPS             

0

默认 0 ,工具栏FILE命令菜单

1 显示属性

0 不显示

Toolbars、btnFile 同时为真时有效

show_UpdateTool        

0

在配置文件设置默认值 0

1显示更新文件下载窗口

0不显示

 

 

          1. 更多示例
  1. 打开网络docx, 不显示工具栏,保护文档

{"emit":"open","Obj":"office","AppType":8,"src":["https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/file/d1.tmp",false, "Word.Document","userName","PWD","tmp.docx"] ,"pos":1,"par0":{"Caption":true,"ProtectDoc":0,"Toolbars":0,"btnFile":true,"MNU_NEWBLANK":0,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

  1. 打开网络xlsx, 显示工具栏,显示文件按钮,上传文件(提交地址需要修改)

{"emit":"open","Obj":"office","AppType":8,"src":["https://cdn.jsdelivr.net/gh/appemit/AppEmitWeb@master/docs/demo/file/x1.tmp",false,"Excel.Sheet","userName","PWD","a1.xlsx"],"pos":1,"par0":{"Caption":true,"ProtectDoc":0,"Toolbars":1,"btnFile":true,"HttpPost":{"URL":"http://eu.httpbin.org/post","fileName":"s1.xlsx"},"MNU_UPLOAD":1,"MNU_NEWBLANK":1,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

 

  1. 打开本地pptx,显示工具栏,不显示文件按钮

{"emit":"open","Obj":"office","AppType":8,"src":["/demo/htmlDemo/file/p1.pptx",false,"PowerPoint.Show","name","PWD"] ,"pos":1,"par0":{"Caption":0,"ProtectDoc":1,"Toolbars":1,"btnFile":0,"MNU_NEWBLANK":0,"MNU_NEW":0,"MNU_OPEN":0,"MNU_CLOSE":0,"MNU_SAVE":0,"MNU_SAVEAS":0,"MNU_PGSETUP":0,"MNU_PRINT":0,"MNU_PROPS":0,"show_UpdateTool":true}}

          1. 其它参数

文档另存为

HRESULT SaveAs([in] VARIANT strFileName, [in] VARIANT dwFileFormat, [out,retval] long* pbool);       

参数:

        strFileName:文件本地路径,如c:\\11.doc

        dwFileFormat: 文件格式

Excel: Type
enum XlFileFormat

Word: Type
enum WdSaveFormat

PPT:
enum PpSaveAsFileType

xlAddIn = 18

xlCSV = 6

xlCSVMac = 22

xlCSVMSDOS = 24

xlCSVWindows = 23

xlDBF2 = 7

xlDBF3 = 8

xlDBF4 = 11

xlDIF = 9

xlExcel2 = 16

xlExcel2FarEast = 27

xlExcel3 = 29

xlExcel4 = 33

xlExcel5 = 39

xlExcel7 = 39

xlExcel9795 = 43

xlExcel4Workbook = 35

xlIntlAddIn = 26

xlIntlMacro = 25

xlWorkbookNormal = -4143

xlSYLK = 2

xlTemplate = 17

xlCurrentPlatformText = -4158

xlTextMac = 19

xlTextMSDOS = 21

xlTextPrinter = 36

xlTextWindows = 20

xlWJ2WD1 = 14

xlWK1 = 5

xlWK1ALL = 31

xlWK1FMT = 30

xlWK3 = 15

xlWK4 = 38

xlWK3FM3 = 32

xlWKS = 4

xlWorks2FarEast = 28

xlWQ1 = 34

xlWJ3 = 40

xlWJ3FJ3 = 41

xlUnicodeText = 42

xlHtml = 44

wdFormatDocument = 0

wdFormatTemplate = 1

wdFormatText = 2

wdFormatTextLineBreaks = 3

wdFormatDOSText = 4

wdFormatDOSTextLineBreaks = 5

wdFormatRTF = 6

wdFormatUnicodeText = 7

wdFormatEncodedText = 7

wdFormatHTML = 8

ppSaveAsPresentation = 1

ppSaveAsPowerPoint7 = 2

ppSaveAsPowerPoint4 = 3

ppSaveAsPowerPoint3 = 4

ppSaveAsTemplate = 5

ppSaveAsRTF = 6

ppSaveAsShow = 7

ppSaveAsAddIn = 8

ppSaveAsPowerPoint4FarEast = 10

ppSaveAsDefault = 11

ppSaveAsHTML = 12

ppSaveAsHTMLv3 = 13

ppSaveAsHTMLDual = 14

ppSaveAsMetaFile = 15

ppSaveAsGIF = 16

ppSaveAsJPG = 17

ppSaveAsPNG = 18

ppSaveAsBMP = 19

          1. 疑难

DsoFramer是微软的开源控件,现在已经不更新,容易出现bug。

比如文档格式不对,需要重新保存在打开,否则会出现两个窗口等未知报错。

选择保存时如果时间过长,会出现服务器正在运行中,需要在任务管理器关闭对应的word\execel\ppt的进程,重新启动。

 

        1. 第三方DLL\组件调用
          1. 使用IE内核打开ActiveX

使用IE内核打开网页,在非IE浏览器中调用activeX控件,及使用原有的html的代码即可。这种方法通常需要注册对应的activeX

{"emit":"open","Obj":"web","AppType":1,"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"http://www.baidu.com"},"par0":{"header":null,"noScriptErr":true, "UIFLAG":null,"DLCTL":null,"userAgent":null,"crossDomain":true}}

 

          1. 可视化Flash ocx 调用

能在网页中执行命令,控制flash,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":1,"src":[],"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1}

调用C:/Windows/SysWOW64/Macromed/Flash/Flash32_32_0_0_403.ocx 控件,需要自行安装flash.

可以在dllJs.html进一步设置参数AppType==1情况,和过程调用代码。同时也能通过浏览器网页发布命令。

  

名称

设置

含义

说明

emit

open

必需。打开dll事件请求。

 

Obj

dll

必需。

 

AppType

1

 

必需。

根据自己的代码确定。

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串数组

 

打开多个DLL,只能一个可视化

 

par

 

 

下面三个参数必须有一个。

htmlStr

 

Html代码

 

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

 

URL

http://www.appemit.com.../ dllJs.html 或者

/demo/htmlDemo/js/ dllJs.html

支持网页地址或者本地html文件路径。

 

webJs

1

启用par的设置的嵌入网页JS

1 IE

2 webkit

3 blink

0 关闭

或者设置为0,把dllJs的src参数设置在src里面。

使用runCmd执行输入命令。

par0

 

 

 

AppMethod

null

默认非必需。

POST。同步呼叫的控件,应该设置为POST,采取websocket相同的异步通话

 

在dllJs.html中也可以设置src参数。

webJs0

0

0 关闭本js的控制 ,即使webJs大于0

注释后启用。

 

系统默认执行了4个过程接口

AppJs_init

AppJs_loaded

AppJs_destroy

AppJs_closed

 

            1. 嵌入网页JS控制

 

  • AppJs_init=function(AppType)

如果在浏览器网页中没有设置src,可以在这里设置。

webJs0,0 关闭本js的控制  

    createType:"createEmbed"      //可视化的控件 createEmbed(comCarrier,clsId,iid) ,只能有一个 , createObject(clsId,iid)   createInstance(clsId,itface)   createUnknown(clsId,iid)

                               ,comName:"flash"                                  //ocx

                               ,objName:"shockwave"

                               //,comCarrier:"custom"           // createEmbed可视化 picture(图片控件设置)、static 、 winform   默认推荐 custom         //不同类型组件采取不要载体

                               ,dllFile:"C:/Windows/SysWOW64/Macromed/Flash/Flash32_32_0_0_403.ocx"     //  必须 \\   /

                               ,clsId :"D27CDB6E-AE6D-11CF-96B8-444553540000"  //guid

                               ,iid:null

                               ,itface:null

                               ,embedObject:null

 

  • AppJs_loaded=function(AppType){      

 //系统启动APP ,产生AppJsObject. shockwave对象后执行

AppJsObject.shockwave.Movie = "/demo/htmlDemo/file/test1.swf" 

  •  AppJs_destroy=function(){    //AppJsObject.shockwave销毁前执行

 

  • AppJs_closed=function(status){  //AppJsObject.shockwave关闭后执行。已经没有AppJsObject.shockwave对象了

 

 

            1. 浏览器网页执行代码命令控制

if (cmdId=="stop" ){

                codeStr =   txt2code(function(){/*

AppJsObject.shockwave.stop();

return {status="stop"}

*/});

       } else if(cmdId=="play"  ){

             codeStr =   txt2code(function(){/*

AppJsObject.shockwave.play();

return {status="play"}

*/});

       }

Var Req={"emit":"runCmd","Obj":"dll","codeStr": codeStr}

EmitReq(Req);

通过前面dllJs.html定义的AppJsObject.shockwave,可以直接控制flash。当然也可以不需要dllJs.html定义,能在浏览器网页中websocket发送使用"emit":"runCmd"命令发送AppJs_init、AppJs_loaded,代码也可以。

 

 

          1. 报表控件reportX调用

能在网页中执行命令,控制reportX,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":2,"src":[],"pos":1,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1},"par0":{"AppMethod":"msg Synchronization component need set: POST" }}

调用"/plugins/thirdparty/report/ReportX.ocx" 控件 

可以在dllJs.html进一步设置参数AppType==2情况,和过程调用代码。

同时也能通过浏览器网页发布命令。

  

名称

设置

含义

说明

emit

open

必需。打开dll事件请求。

 

Obj

dll

必需。

 

AppType

2

 

必需。

根据自己的代码确定。

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串数组

 

打开多个DLL,只能一个可视化

 

par

 

 

下面三个参数必须有一个。

htmlStr

 

Html代码

 

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

 

URL

http://www.appemit.com.../ dllJs.html 或者

/demo/htmlDemo/js/ dllJs.html

支持网页地址或者本地html文件路径。

 

webJs

1

启用par的设置的嵌入网页JS

1 IE

2 webkit

3 blink

0 关闭

或者设置为0,把dllJs的src参数设置在src里面。

使用runCmd执行输入命令。

par0

 

 

 

AppMethod

null

默认非必需。

POST。同步呼叫的控件,应该设置为POST,采取websocket相同的异步通话

 

在dllJs.html中也可以设置src参数。

webJs0

0

0 关闭本js的控制 ,即使webJs大于0

注释后启用。

 

系统默认执行了4个过程接口

AppJs_init

AppJs_loaded

AppJs_destroy

AppJs_closed

 

            1. 嵌入网页JS控制

  

  • AppJs_init=function(AppType)

如果在浏览器网页中没有设置src,可以在这里设置。

 

src:[  {

                              // webJs0:0,                           //只能设置为0   关闭本js的控制 ;   或者注释 为默认打开控制

                                createType:"createEmbed"       //可视化的控件createEmbed(comCarrier,clsId,iid)  , createObject(clsId,iid)   createInstance(clsId,itface)   createUnknown(clsId,iid)

                               ,comName:"reportXOCX"

                               ,objName:"reportX"

                               // ,comCarrier:"custom"           // createEmbed可视化  picture(图片控件设置)、static 、winform  默认 推荐 custom           //不同类型组件采取不要载体

                               ,dllFile:"/plugins/thirdparty/report/ReportX.ocx"

                               ,clsId :"A5DA6E97-1D4C-4708-B705-84A45716B4DD"  //guid

                               ,iid:null

                               ,itface:null

                               ,embedObject:null

                               }   //暂时支持一个控件

                         ]

 

  • AppJs_loaded=function(AppType){      

 //系统启动APP ,产生AppJsObject.reportX对象后执行

 

  •  AppJs_destroy=function(){    //AppJsObject.reportX销毁前执行

 

  • AppJs_closed=function(status){  //AppJsObject.reportX关闭后执行。已经没有AppJsObject.reportX对象了

 

            1. 浏览器网页执行代码命令控制

if(cmdId=="reportX_open" ){

             codeStr =   txt2code(function(){/*

//AppJsObject.reportX.OpenReport(..io.fullpath("/demo/htmlDemo/file/rep1.rpxe"))

var  reportXPath=AppJs.dlgOpen('rpxe|*.rpxe|所有文件|*.*||')    

 AppJsVar_reportXPath=reportXPath;      //全局变量  ,没有var

if  reportXPath  {AppJsObject.reportX.OpenReport(reportXPath)

     return {status="open reportX"; path=reportXPath}

}else {

   return null;

}

*/});

       }else if(cmdId=="reportX_save"  ){

           //方案1 通过websocket交互信息.

           /*

           if   ( !reportXPath) return;

             codeStr = 'AppJsObject.reportX.SaveReport("'+reportXPath+'") \                      //通过websocket交互信息,或者直接采取全局变量

             return {status="save reportX"}' ;

             */

          

           // 方案2  直接采取全局变量

        

          codeStr = 'AppJs.msgbox(AppJsVar_reportXPath);   AppJsObject.reportX.SaveReport(AppJsVar_reportXPath);'

            codeStr+= 'return {status="save reportX 2"}' ;

        

            

     // 方案3  另存为

           

     //    codeStr = "var savePath=AppJs.dlgSave('rpxe|*.rpxe|所有文件|*.*||','另存为')  if (savePath) AppJsObject.reportX.SaveReport(savePath);"

     

       }Var Req={"emit":"runCmd","Obj":"dll","codeStr": codeStr}

EmitReq(Req);

通过前面dllJs.html定义的AppJsObject.reportX,可以直接控制reportX。当然也可以不需要dllJs.html定义,能在浏览器网页中websocket发送使用"emit":"runCmd"命令发送AppJs_init、AppJs_loaded,代码也可以。

          1. 第三方dll调用
  1. dll_demodll安装在/plugins/thirdparty/dll_demodll

能在网页中执行命令,控制dll_demo1,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":4,"src":[],"AppShow":false,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1 },"par0":{"AppMethod":"msg Synchronization component need set: POST" }}可以在dllJs.html进一步设置参数AppType==4情况,和过程调用代码。

 

同时也能通过浏览器网页发布命令。

   

名称

设置

含义

说明

emit

open

必需。打开dll事件请求。

 

Obj

dll

必需。

 

AppType

4

 

必需。

根据自己的代码确定。

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串数组

 

打开多个DLL,只能一个可视化

 

pos

0

无界面不需要

 

AppShow

false

必需。窗口不可见。

无界面必需设置false。

 

 

par

 

 

 

htmlStr

 

Html代码

下面三个参数必须有一个。

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

 

URL

http://www.appemit.com.../ dllJs.html 或者

/demo/htmlDemo/js/ dllJs.html

支持网页地址或者本地html文件路径。

 

webJs

1

启用par的设置的嵌入网页JS

1 IE

2 webkit

3 blink

0 关闭

或者设置为0,把dllJs的src参数设置在src里面。

使用runCmd执行输入命令。

par0

 

 

 

AppMethod

null

默认非必需。

POST。同步呼叫的控件,应该设置为POST,采取websocket相同的异步通话

 

backNoJson

true/false

默认false,反馈为json

true,调用的dll或者ocx反馈的数据直接发送,不处理编码或者json转换

反馈的数据处理

codePage

65001

65001 utf8

1200 UCS-2LE

1201 UCS-2BE

0  不处理

反馈的数据编码,默认65001

在dllJs.html中也可以设置src参数。

webJs0

0

0 关闭本js的控制 ,即使webJs大于0

注释后启用。

 

系统默认执行了4个过程接口

AppJs_init

AppJs_loaded

AppJs_destroy

AppJs_closed

 

 

            1. 嵌入网页JS控制

  演示调用dll的add方法,主要是初始化后,声明dll.api( "Add","int(int a,int b)", "cdecl" );   //必须是cdecl 声明

 

  • AppJs_init=function(AppType)

如果在浏览器网页中没有设置src,可以在这里设置。

src:[  {

                              // webJs0:0,                           //只能设置为0   关闭本js的控制 ;   或者注释 为默认打开控制

                                createType:"createDll"               //  dll调用

                                ,objName:"dll_demo1"

                               ,dllFile:"/plugins/private/50FCF891-1B93-4AE5-8A66-AB26A3C03378/dll_demo1.dll"     //  必须 \\   / 放在/plugins/private/clsId/文件夹下面

                               ,clsId :"50FCF891-1B93-4AE5-8A66-AB26A3C03378"  //guid   发送给dll  信息

                               ,iid:null

                               ,data:'{"msg":"init from JS","info":1}'               //发送给dll  数据

                              

                               }   //暂时支持一个控件

                         ]

                      ,AppShow:false                  //整体不可见 必须设置,默认可见

 

//   dll 接口__declspec(dllexport) int Add(int a, int b )     

//自行声明接口,再调用。

 

 AppJsObject.dll_demo1.myAdd =AppJsObject.dll_demo1.dll.api( "Add","int(int a,int b)", "cdecl" );   //必须是cdecl 声明

 

var sum=AppJsObject.dll_demo1.myAdd(3,5);

 //AppJs.log(sum);

AppJs.msgbox(sum);

return  {data=sum};                         //结果在  external.out 中  

            1. 浏览器网页执行代码命令控制

         //或者浏览器网页  发布命令runCmd,执行AppDll_RevMsg方法

       codeStr= txt2code(function(){/     *

 var sum=AppJsObject.dll_demo1.myAdd(3,5);

return  sum;

 *    /});

        var Req={"emit":"runCmd","Obj":"dll","codeStr":codeStr }   

        EmitReq(Req);

通过前面dllJs.html定义的AppJsObject.dll_demo1,可以直接控制dll_demo1。当然也可以不需要dllJs.html定义,能在浏览器网页中websocket发送使用"emit":"runCmd"命令发送AppJs_init、AppJs_loaded,代码也可以。

 

        1. 自行Dll开发调用
          1. dll_demo1调用
  1. dll_demo1.dll安装在/plugins/private/50FCF891-1B93-4AE5-8A66-AB26A3C03378/dll_demo1.dll" 

能在网页中执行命令,控制dll_demo1,举例见demo/htmlDemo/dll.html

{"emit":"open","Obj":"dll","AppType":3,"src":[],,"AppShow":false "pos":0,"par":{"htmlStr":null,"HttpServer_startUrl":null,"URL":"/demo/htmlDemo/js/dllJs.html","webJs":1 },"par0":{"AppMethod":"msg Synchronization component need set: POST" }}

可以在dllJs.html进一步设置参数AppType==3情况,和过程调用代码。

 

同时也能通过浏览器网页发布命令。

   

名称

设置

含义

说明

emit

open

必需。打开dll事件请求。

 

Obj

dll

必需。

 

AppType

3

 

必需。

根据自己的代码确定。

有默认的右键菜单。

若为负数-1,则是浮动窗口

src

字符串数组

 

打开多个DLL,只能一个可视化

 

pos

0

无界面不需要

 

AppShow

false

必需。窗口不可见。

无界面必需设置false。

 

 

par

 

 

 

htmlStr

 

Html代码

下面三个参数必须有一个。

HttpServer_startUrl

 

以服务器形式打开本地html文件路径,可以是绝对或者相对路径。/为分隔符。

 

URL

http://www.appemit.com.../ dllJs.html 或者

/demo/htmlDemo/js/ dllJs.html

支持网页地址或者本地html文件路径。

 

webJs

1

启用par的设置的嵌入网页JS

1 IE

2 webkit

3 blink

0 关闭

或者设置为0,把dllJs的src参数设置在src里面。

使用runCmd执行输入命令。

par0

 

 

 

AppMethod

null

默认非必需。

POST。同步呼叫的控件,应该设置为POST,采取websocket相同的异步通话

 

codePage

65001

65001 utf8

1200 UCS-2LE

1201 UCS-2BE

0  不处理

反馈的数据编码,默认65001

backNoJson

true/false

默认false,反馈为json

true,调用的dll或者ocx反馈的数据直接发送,不处理编码或者json转换

反馈的数据处理

在dllJs.html中也可以设置src参数。

webJs0

0

0 关闭本js的控制 ,即使webJs大于0

注释后启用。

 

系统默认执行了4个过程接口

AppJs_init

AppJs_loaded

AppJs_destroy

AppJs_closed

 

 

            1. 嵌入网页JS控制

  

  • AppJs_init=function(AppType)

如果在浏览器网页中没有设置src,可以在这里设置。

src:[  {

                              // webJs0:0,                           //只能设置为0   关闭本js的控制 ;   或者注释 为默认打开控制

                                createType:"createDll"               //  dll调用

                                ,objName:"dll_demo1"

                               ,dllFile:"/plugins/private/50FCF891-1B93-4AE5-8A66-AB26A3C03378/dll_demo1.dll"     //  必须 \\   / 放在/plugins/private/clsId/文件夹下面

                               ,clsId :"50FCF891-1B93-4AE5-8A66-AB26A3C03378"  //guid   发送给dll  信息

                               ,iid:null

                               ,data:'{"msg":"init from JS","info":1}'               //发送给dll  数据

                              

                               }   //暂时支持一个控件

                         ]

                      ,AppShow:false                  //整体不可见 必须设置,默认可见

  • AppJs_loaded=function(AppType){      

 //系统启动APP ,产生AppJsObject. shockwave对象后执行

  • AppJsObject.dll_demo1.AppDll_loaded(AppDll_hwnd, "",{"msg":"loaded from JS","info":2}');

 

  • AppJs_destroy=function(){    //AppJsObject.shockwave销毁前执行

AppJsObject.dll_demo1.AppDll_destroy(AppDll_hwnd, "",'{"msg":"destroy from JS","info":3}');

  • AppJs_closed=function(status){  //AppJsObject关闭后执行。已

 

            1. 浏览器网页执行代码命令控制

 

       codeStr= txt2code(function(){/*

 AppJsObject.dll_demo1.AppDll_RevMsg(AppDll_hwnd,'','{"data":"send from JS","info":3}');

 * /});

        var Req={"emit":"runCmd","Obj":"dll","codeStr":codeStr }   

        EmitReq(Req);

 

通过前面dllJs.html定义的AppJsObject.dll_demo1,可以直接控制dll_demo1。当然也可以不需要dllJs.html定义,能在浏览器网页中websocket发送使用"emit":"runCmd"命令发送AppJs_init、AppJs_loaded,代码也可以。

 

 

 

 

 

 

 

 

 

 

 

      1. 关闭APP
        1. 关闭cid对应APP

{"emit":"close","AppId ":1}

名称

设置

含义

说明

emit

close

必需。关闭控件APP通信事件请求。

 

AppId

1,2…

必需。具体的可调整。

 

Obj

flash

非必需。

 

        1. 关闭cid所有APP

{"emit":"closeAll"}

名称

设置

含义

说明

emit

closeAll

必需。关闭所有控件APP通信事件请求。

关闭在cid下运行的所有控件APP

      1. 窗口
        1. 显示

 {"emit":"show","Obj":"flash"}

名称

设置

含义

说明

emit

show

必需。显示窗口请求。

 

Obj

flash

必需。

 

AppShow

true/null

默认null 可视化

false 不可见

 

pos

 

可选

 

par0

 

 

 

debounce

300

默认300毫秒

 

防抖函数,在限定的延时内仅保留最后一次调用,延时默认300毫秒

        1. 隐藏

 {"emit":"hide","Obj":"flash"}

名称

设置

含义

说明

emit

hide

必需。隐藏窗口请求。

 

Obj

flash

必需。

 

        1. 移动

 {"emit":"move","Obj":"flash","pos":{"left":10,"top":6,"width":206,"height":106}}

名称

设置

含义

说明

emit

move

必需。移动窗口请求。

 

Obj

flash

必需。

 

pos

屏幕绝对位置

必需。

 

par0

 

 

 

debounce

300

默认300毫秒

 

防抖函数,在限定的延时内仅保留最后一次调用,延时默认300毫秒

 

 

 

 

 

    1. 获得参数

 {"emit":"getPar","Obj":"clientAuth"}

 

名称

设置

含义

说明

emit

getPar

必需。获得参数请求。

 

Obj

clientAuth

是否授权

1 授权

0 无

 

 

 

 

 

    1. 设置参数

 {"emit":"setPar","Obj":"flash","topMost":true}

 

名称

设置

含义

说明

emit

getPar

必需。获得参数请求。

 

Obj

flash

必需。

 

topMost

 

必需。

True 置顶

False 取消置顶

 

    1. AppEmit操作
      1. 错误信息

{"emit":" lasterr"}

 

名称

设置

含义

说明

emit

lasterr

必需。获得最近错误请求。

"

 

      1. 重启

{"emit":"restart","Obj":"AppEmit"}

 

名称

设置

含义

说明

emit

restart

必需。AppEmit重启请求。

重启后client需要重新连接。

Obj

AppEmit

必需。

 

      1. 更新

{"emit":"update","Obj":"AppEmit"}

 

名称

设置

含义

说明

emit

update

必需。询问AppEmit是否更新程序请求。

默认强制更新。如果config.ini里面设置autoUpdate=0,则询问更新。

Obj

AppEmit

必需。

 

 

 

      1. 关于

{"emit":"about","Obj":"AppEmit"}

 

名称

设置

含义

说明

emit

about

必需。获得关于请求。

返回

{"data":{"appName":"AppEmit","url":"http://www.appemit.com/","verDesc":"\u516C\u5171\u514D\u8D39\u7248(Public free Version)","verType":0,"version":"0.3.5"}," }

Obj

AppEmit

必需。

 

 

      1. 版本信息

{"emit":"version","Obj":"AppEmit"}

 

名称

设置

含义

说明

emit

version

必需。获得版本请求。

{"data":{"verDesc":"\u516C\u5171\u514D\u8D39\u7248(Public free Version)","verType":0,"version":"0.3.5"},"

Obj

AppEmit

必需。

 

 

 

 

  1. 问题
  1. 支持linux mac?

目前版本不支持,使用在windows系统上。

  1. 免费版本有何限制条件?

每80次消息发送时有弹窗。

收费版本没有限制,包括支持局域网。

  1. 测试点击连接,为何没有反应?

首先要打开AppEmit.exe服务,可以F12查看报错情况。重启系统后,AppEmit.exe进程自动开启,没有被关闭。

  1. 如何开发插件?

使用HPSocket的C接口。目前在测试中。

 

你可能感兴趣的:(AppEmit,javascript,websocket,chrome,dll,flash)