zoukankan      html  css  js  c++  java
  • [Sciter系列] MFC下的Sciter–4.HTML与图片资源内置

    [Sciter系列] MFC下的Sciter–4.HTML与图片资源内置,防止代码泄露。

    本系列文章的目的就是一步步构建出一个功能可用,接口基本完善的基于MFC框架的SciterFrame程序,以此作为以后程序的基础。其中,文章中按照如下逻辑编排(解决如下问题):

    1、使用什么环境

    2、完成什么功能

    3、如何完成


    1、工程环境: VS2010 + Sciter-SDK + Win7

    建议:HTML页面还使用ANSI编码,UTF-8此时不建议使用。

    2、本文完成的功能:将上节课的HTML页面和相关图片资源内置,防止代码泄露。

    3、具体步骤如下:

    由于HTML页面随意就可以打开,并且代码加密不太现实,最简单的方法就是将资源内置,这样即美观又为以后的程序加密打下基础。

    首先,我们来研究一般的VC++资源内置办法:(具体的自行搜索)

    访问时使用Res://协议,按照Res://应用程序.exe/[类型/]资源ID或名称。这是微软提供的在C++内部访问内置资源的方法,似乎我们只需要将所有的资源放入Res中,然后将路径都改为Res协议的路径就可以了!但是,现实很残酷,经多次测试,这是不可行的。

    换一种思路,我们将资源通过LoadResource()加载,然后释放到内存,最后通过 SciterLoadHtml()  从内存加载就可以了!这种方式的确可以加载HTML页面,但是我们也很容易看出,所有的图片都不能正常显示!难道我们还需要将图片也放到内存中吗?当让,加载到内存很容易,但是难点在于HTML如何加载放在内存中的图片?这一点是我们无法实现的(至少是我无法实现的)。

    到了这里,这个问题似乎已经无法解决了!但是,不知有人注意到了没?官方给出的历程都是通过WIn32加载内置资源实现的,包括图片!他是如何解决上述问题的呢?我们下面一一剖析!

    首先,官方给出的程序都是Win32下自定义窗口类实现 event_handle 和 host 接口,然后通过 load_file(res:xxx) 加载内置的资源文件,从来没有对图片进行特别的处理,所以我们如果能找到最低的加载流程,就可以完成资源内置的功能了!

    我们注意到,核心函数是 load_file(),但是在MFC下,即便实现了 event_handle 和 host 接口,测试时也无法使用此功能!其实这是有原因的,在host的注释中其实已经有了说明,在我们的窗口类中,必须有

    HWND      get_hwnd() ;
        HINSTANCE get_resource_instance();

    这两个函数的实现,host内部需要使用这两个函数。

    所以我们必须在窗口类中实现这两个函数:

    public:
        HWND      get_hwnd() { return m_hWnd; }
        HINSTANCE get_resource_instance() { return AfxGetInstanceHandle(); }

    然后将第一节加载页面的函数修改为:load_file(res:xxx)的形式。(HTML资源和图片资源的修改放在最后讲解)

    此时再次测试,还是不可行,对比Demo程序,最后找到了一个函数 setup_callback(); 注册回调,在加载资源之前注册一下,再次测试,OK !

    按照上面的流程,资源已经完成了内置工作。但是HTML页面和图像资源如何处理才可以呢?

    如图所示:

    aa

    RC文件中代码:

    INDEX              HTML                    "res\index.html"

    TOOL_1                PNG                     "res\tool_1.png"

    比较推荐大家导入资源后手工修改RC资源,删除有数字ID的名称和声明。

    HTML页面通过 load_file(“res:index.html”); 就可以直接加载。

    HTML中的图片通过 res:tool_1.png 就可以直接加载。

    注意:html和图片文件必须放在Res文件夹下。

    此时,将整个工程从新编译,一个资源内置的程序就写好了!

    aa

    如果项目文件较多情况下,生成的文件会很大,此时使用upx压缩一下,加密和体积都会很好的得到控制,perfect!

    -----

    工程代码:

    http://pan.baidu.com/s/1EGGAk

    博客:

    CSDN:http://blog.csdn.net/bbdxf

    cnBlogs: http://www.cnblogs.com/bbdxf

    CSDN博客:http://blog.csdn.net/bbdxf
    CNBlogs: http://www.cnblogs.com/bbdxf
    本博客内容为本人原创,如有转载请保留出处!尊重他人就是尊重自己!

  • 相关阅读:
    Python-02 基础语法
    Python-01 基础语法
    windows端口被占用-解决方案
    vue两个独立的组件之间的传值通信
    URI
    Inversion of control
    7月10日每日总结
    7月9日每日总结
    xshell终端设置主机名和用户名颜色
    PyTorch中一些损失函数的使用
  • 原文地址:https://www.cnblogs.com/bbdxf/p/3410582.html
Copyright © 2011-2022 走看看