ruilin215 发表于 2013-2-1 11:25:29

在魅族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 = {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){CreateJad(szCommandLine);}//......}
强调几点:xxxfile 位于 HKEY_CLASSES_ROOT\FileAssociate 之下,而非 HKEY_CLASSES_ROOT,其下的 "shell" 而非 "shell\open\command",shell 的键值是 "<path_of_exe>" 而非 "<path_of_exe> %1",GetCommandLine()返回值即是系统传入的命令行参数(不包括本进程文件名)。以上几点与桌面PC编程有较大不同。
页: [1]
查看完整版本: 在魅族M8手机(WinCE6.0系统)上编程设置文件关联(C/C++源码)