梦书之家(移动开发)

你有一个苹果,我有一个苹果,我们交换一下,一人还是一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。 ——肖伯纳

导航

再谈CAB打包

在M8上进行开发,很多人之所以用Wince_cab_manager来进行CAB打包的 主要的原因 恐怕是为了在M8的桌面显示中文。

(Windows Mobile SDK自带的CAB打包工具:Cabwiz.exe;cabwiz.ddf,不能正确解析.inf文件包含的中文)

刚开始,我也是这样想的,但是后来发现,M8的MiniOneShell是通过读取注册表来遍历显示桌面上的应用程序与图标的,

所以我们只要修改我们自己的注册表信息即可。

    #define KXYZDesktopDisplayName  (TEXT("软件名称"))
    #define KXYZSoftWareAbb           (TEXT("MYSW"))

    HKEY hKey;
    LPTSTR szSubKey = new TCHAR[MAX_PATH];
    memset(szSubKey,0,sizeof(TCHAR)*MAX_PATH);
    wcscpy_s(szSubKey,MAX_PATH,_T("SOFTWARE\\Meizu\\MiniOneShell\\Main\\"));
    wcscat_s(szSubKey,MAX_PATH, KXYZSoftWareAbb );
    LONG nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,szSubKey,0,0,&hKey);
    delete []szSubKey;
    szSubKey = NULL;
    if(ERROR_SUCCESS == nResult)
    {
        RegSetValueEx(hKey,_T("DisplayName"), 0, REG_SZ, 
              (LPBYTE)KXYZDesktopDisplayName,
              wcslen(KXYZDesktopDisplayName)*sizeof(TCHAR));
        RegCloseKey(hKey);
    }

 

除了以上修改的地方,还需要修改一个地方,否则在M8上用优化精灵查看应用程序或者卸载的时候,看到的软件的名称还是英文字符的:

    //以下两个字段的内容来自.inf文件
//故修改inf文件中的以下内容 也需要同时修改该部分
/*
* [Version]
* Signature="$Windows NT$"
* CESignature="$Windows CE$"
* Provider="your corporation"
*/
#define KXYZProviderName        (TEXT("your corporation"))      //
/*
* [CEStrings]
* AppName="ruanjianmingzi"
*/
#define KXYZAppName             (TEXT("ruanjianmingzi"))
    
    LPTSTR szAppSubKey = new TCHAR[MAX_PATH];
    memset(szAppSubKey,0,sizeof(TCHAR)*MAX_PATH);
    wcscpy_s(szAppSubKey,MAX_PATH,_T("SOFTWARE\\Apps\\"));
    wcscat_s(szAppSubKey,MAX_PATH,KXYZProviderName);
    wcscat_s(szAppSubKey,MAX_PATH,_T(" "));//space
    wcscat_s(szAppSubKey,MAX_PATH,KXYZAppName);

    HKEY hAppKey;
    nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                        szAppSubKey,0,0,&hAppKey);
    delete []szAppKey;
    szAppKey = NULL;
    if(ERROR_SUCCESS == nResult)
    {
        RegSetValueEx(hAppKey,_T("DisplayName"), 0, REG_SZ, 
              (LPBYTE)KXYZDesktopDisplayName,
               wcslen(KXYZDesktopDisplayName)*sizeof(TCHAR));
        RegCloseKey(hAppKey);
    }

将以上代码放在SetupDll中的Install_Exit函数的末尾。 

当然如果你担心安装程序没有自动刷新桌面的话,在M8上可以使用如下的API:(本人觉得以下的API主要用于通过RAPI来安装程序什么的)

1 /**
2 * @brief 通知Shell重新刷新桌面上的图标,用于安装程序后图标
3 * 更新
4 * @return TRUE, 成功; FALSE, 失败
5  */
6 BOOL ReloadDesktopIcons();

 

推而广之,Windows Mobile上的快捷方式,也可以通过修改快捷方式即可。

当然你需要写一个Setupdll。

posted on 2010-05-26 17:26  梦书  阅读(693)  评论(0编辑  收藏  举报