Я программирую программное обеспечение GUI регистратора данных с использованием Borland C ++ Builder 2006. Это желаемая платформа моей компании.
Я сохраняю полученные данные после некоторого анализа в определенных файлах с моим определенным расширением как «.evp». Я определил функции сохранения и открытия в моих программах, которые работали нормально.
Теперь у меня проблема с тем, как открыть сохраненный файл напрямую, без использования моего программного обеспечения. Я имею в виду, когда я дважды щелкаю на сохраненном файле, он автоматически открывается с моим программным обеспечением и показывает данные. Тогда возникает два вопроса:
от Borland C2006
ты имеешь в виду Embarcadero BDS2006 Turbo(explorer) C++
?
Файловые ассоциации хранятся где-то в реестре
Увидеть Создать запись реестра, чтобы связать расширение файла с приложением в C ++. Таким образом, вы можете создать рег файл или добавить записи реестра программно с помощью WinAPI.
Я никогда не обновлял реестр в своих приложениях, но это пример того, как вы можете читать реестр (получая частоту процессора):
double getregfcpu()
{
DWORD keyhnd;
HKEY hKey=NULL;
DWORD dwSize;
DWORD dwFrequency;
double f=0.0;
for(;;)
{
keyhnd=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Hardware\\Description\\System\\CentralProcessor\\0",0,KEY_QUERY_VALUE,&hKey);
if (keyhnd!=ERROR_SUCCESS) break;
dwSize = sizeof(dwFrequency);
keyhnd = RegQueryValueEx (hKey,"~MHz",NULL,NULL,(LPBYTE)&dwFrequency,&dwSize );
if (keyhnd!=ERROR_SUCCESS) break;
f=dwFrequency; f*=1e6;
break;
}
if (hKey!=NULL) RegCloseKey(hKey);
return f;
}
так что экспериментируйте / используйте RegCreateKeyEx
вместо RegOpenKeyEx
, Настоятельно рекомендуем сначала поэкспериментировать с какой-то записью в реестре, не связанной с windows, чтобы вы ничего не испортили. И только при работе, как следует изменить имя записи в нужном месте.
Сторона применения
Перейдите к исходному файлу вашего приложения (тот, который открывается при открытии проекта в IDE). Найти там WinMain
функционировать и изменить его так:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cmdl, int)
{
try
{
Application->Initialize();
Application->Tag=(int)cmdl; // *** ADD THIS LINE ***
Application->CreateForm(__classid(TMain), &Main);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
cmdl
содержит указатель на командную строку, с которой было вызвано ваше приложение. Так что скопируйте его на свой Application->Tag
который предназначен для любого определенного пользователем поведения. Таким образом, cmdl доступен из всего проекта (в любом окне / форме). Теперь, чтобы извлечь файл, чтобы открыть, вы просто делаете в своем Form
конструктор примерно так:
AnsiString cmdl=(LPSTR)Application->Tag; // access the command line parameters
if (cmdl.Length()>2) // file is encapsulated with ""if (cmdl[1]=='"')
if (cmdl[cmdl.Length()]=='"')
{
AnsiString s="";
for (int i=2;i<cmdl.Length();i++) s+=cmdl[i]; // cut of the ""// here load file: s
}
Если вы хотите иметь больше параметров командной строки, вам нужно немного обновить его, выполнив поиск «» и обработав все параметры командной строки … Иногда полезно использовать локальный путь приложения exe. Вы можете получить это так:
AnsiString exepath=ExtractFilePath(Application->ExeName);
Других решений пока нет …