在魅族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编程有较大不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值