Как открыть пользовательский файл расширения в программе?

Я программирую программное обеспечение GUI регистратора данных с использованием Borland C ++ Builder 2006. Это желаемая платформа моей компании.

Я сохраняю полученные данные после некоторого анализа в определенных файлах с моим определенным расширением как «.evp». Я определил функции сохранения и открытия в моих программах, которые работали нормально.

Теперь у меня проблема с тем, как открыть сохраненный файл напрямую, без использования моего программного обеспечения. Я имею в виду, когда я дважды щелкаю на сохраненном файле, он автоматически открывается с моим программным обеспечением и показывает данные. Тогда возникает два вопроса:

  1. Как я говорю Windows, чтобы открыть этот файл .evp с моим программным обеспечением.
  2. Как я обращаюсь с открытым файлом в моем программном обеспечении и использую его в своей определенной функции Open.

0

Решение

от Borland C2006 ты имеешь в виду Embarcadero BDS2006 Turbo(explorer) C++?

  1. Файловые ассоциации хранятся где-то в реестре

    Увидеть Создать запись реестра, чтобы связать расширение файла с приложением в 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, чтобы вы ничего не испортили. И только при работе, как следует изменить имя записи в нужном месте.

  2. Сторона применения

    Перейдите к исходному файлу вашего приложения (тот, который открывается при открытии проекта в 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);

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector