//---------------------------------------------------------------------------
// 检测文件关联情况
// ExeName: 要检测的扩展名(例如: ".txt")
// AppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")
// 返回true: 表示已关联,false: 表示未关联
bool __fastcall CheckFileRelation(AnsiString ExtName, AnsiString AppKey)
{
TRegistry *pReg = new TRegistry();
pReg->RootKey = HKEY_CLASSES_ROOT; // 打开主键
// 在检测到本程序不是默认的文件关联时,请用户确认该重新关联操作
pReg->OpenKey(ExtName, true);
if (pReg->ReadString("") != AppKey)
{
pReg->CloseKey();
return false;
}
pReg->CloseKey();
return true;
}
//---------------------------------------------------------------------------
// 注册文件关联
// ExeName: 要检测的扩展名(例如: ".txt")
// AppName: 要关联的应用程序名(例如: "C:\MyApp\MyApp.exe")
// AppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")
// Icon: 扩展名为ExeName的图标文件(例如: "C:\MyApp\MyApp.exe, 1")
// Describe: 文件类型描述
void __fastcall RegisterFileRelation(AnsiString ExtName, AnsiString AppName,
AnsiString AppKey, AnsiString Icon, AnsiString Describe)
{
try
{
TRegistry *pReg = new TRegistry();
pReg->RootKey = HKEY_CLASSES_ROOT; // 打开主键
// 新建/打开以文件扩展名为名的项,并写入数据
pReg->OpenKey(ExtName, true);
pReg->WriteString("", AppKey);
pReg->CloseKey();
pReg->OpenKey(AppKey, true);
pReg->WriteString("", Describe);
pReg->CloseKey();
pReg->OpenKey(AppKey + "\\DefaultIcon", true);
pReg->WriteString("", Icon);
pReg->CloseKey();
pReg->OpenKey(AppKey + "\\Shell", true);
pReg->WriteString("", "Open");
pReg->CloseKey();
pReg->OpenKey(AppKey + "\\Shell\\Open\\Command", true);
pReg->WriteString("", AppName + " %1");
pReg->CloseKey();
delete pReg;
}
catch(...)
{
MessageBox(NULL, "注册文件关联时发生错误", "注意", MB_OK|MB_ICONWARNING);
}
} |