Как открыть пользовательский файл расширения в программе?
Я программирую программное обеспечение GUI регистратора данных с использованием Borland C++Builder 2006. Это желаемая платформа моей компании.
Я сохраняю полученные данные после некоторого анализа в определенных файлах с моим определенным расширением как ".evp" . Я определил функции сохранения и открытия в моих программах, которые работали нормально.
Теперь у меня проблема с тем, как открыть сохраненный файл напрямую, без использования моего программного обеспечения. Я имею в виду, когда я дважды щелкаю на сохраненном файле, он автоматически открывается с моим программным обеспечением и показывает данные. Тогда возникает два вопроса:
- Как я говорю Windows, чтобы открыть этот файл.evp с моим программным обеспечением.
- Как я обращаюсь с открытым файлом в моем программном обеспечении и использую его в своей определенной функции Open.
1 ответ
От 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);