在魅族M8手机(WinCE6.0系统)上编程设置文件关联(C/C++源码)

 

在魅族M8手机(WinCE6.0系统)上设置文件关联,需生成以下注册表项:

 

HKEY_CLASSES_ROOT/.xxx

    defaultvalue: xxxfile

HKEY_CLASSES_ROOT/FileAssociate/xxxfile/shell

    defaultvalue: <path_of_exe>

HKEY_CLASSES_ROOT/FileAssociate/xxxfile

    DefaultIcon: <path_of_icon>

 

其中 xxx 指代欲关联的文件名后缀,<path_of_exe> 指代欲关联到的EXE文件,<path_of_icon> 为被关联文件的默认显示图标。

此外,<path_of_exe> 启动后应读取进程命令行,GetCommandLine()返回值(如果非空)即为其欲打开的关联文件。

 

以下是设置文件关联的代码:

 

bool RegisterJarFile() { bool bOK = false; HKEY hKeyJar = 0; DWORD dwDisposition = 0; RegCreateKeyEx(HKEY_CLASSES_ROOT, L".jar", 0, NULL, 0, 0, NULL, &hKeyJar, &dwDisposition); if(hKeyJar) { if(RegSetValueEx(hKeyJar, NULL, 0, REG_SZ, (const BYTE*)L"jarfile", wcslen(L"jarfile")*sizeof(WCHAR)) == ERROR_SUCCESS) { HKEY hKeyJarFile = 0; const WCHAR* szJarFile = L"FileAssociate//jarfile"; RegCreateKeyEx(HKEY_CLASSES_ROOT, szJarFile, 0, NULL, 0, 0, NULL, &hKeyJarFile, &dwDisposition); if(hKeyJarFile) { WCHAR buffer[256] = {0}; GetFullPathFileName(buffer, 256, L"jar.png"); RegSetValueEx(hKeyJarFile, L"DefaultIcon", 0, REG_SZ, (const BYTE*)buffer, wcslen(buffer)*sizeof(WCHAR)); HKEY hKeyShell = 0; RegCreateKeyEx(hKeyJarFile, L"shell", 0, NULL, 0, 0, NULL, &hKeyShell, &dwDisposition); if(hKeyShell) { GetFullPathFileName(buffer, 256, L"m8jad.exe"); bOK = (RegSetValueEx(hKeyShell, NULL, 0, REG_SZ, (const BYTE*)buffer, wcslen(buffer)*sizeof(WCHAR)) == ERROR_SUCCESS); RegCloseKey(hKeyShell); } RegCloseKey(hKeyJarFile); } } RegCloseKey(hKeyJar); } return bOK; }

 

以下是处理命令行的代码:

 

virtual BOOL OnInitDialog() { //...... WCHAR* szCommandLine = GetCommandLine(); if(szCommandLine && szCommandLine[0]) { CreateJad(szCommandLine); } //...... }

 

强调几点:xxxfile 位于 HKEY_CLASSES_ROOT/FileAssociate 之下,而非 HKEY_CLASSES_ROOT,其下的 "shell" 而非 "shell/open/command",shell 的键值是 "<path_of_exe>" 而非 "<path_of_exe> %1",GetCommandLine()返回值即是系统传入的命令行参数(不包括本进程文件名)。以上几点与桌面PC编程有较大不同。

你可能感兴趣的:(在魅族M8手机(WinCE6.0系统)上编程设置文件关联(C/C++源码))