exe verknüpfen

b) klingt am vernünftigsten: Eine Extension registrieren. Das geht in etwa so (die typedefs und Funktion musst du da selber noch einsetzen)

Ab Vista gibt es da eine API für, für alles davor ist Handarbeit angesagt:

Code:
void Registry::RegisterFileType( const GR::tChar* szExtension, const GR::tChar* szAppDescription, 
                                        const GR::tChar* szIconPath, const GR::tChar* szOpenCommand )
{

  GR::tChar      szDesc[MAX_PATH];
  wsprintf( szDesc, _T( "%s.Document" ), szAppDescription );
  SetKey( HKEY_CLASSES_ROOT, szExtension, NULL, szDesc );

  SetKey( HKEY_CLASSES_ROOT, szDesc, NULL, szAppDescription );

  wsprintf( szDesc, _T( "%s.Document\\DefaultIcon" ), szAppDescription );
  SetKey( HKEY_CLASSES_ROOT, szDesc, NULL, szIconPath );

  wsprintf( szDesc, _T( "%s.Document\\shell\\open\\command" ), szAppDescription );
  SetKey( HKEY_CLASSES_ROOT, szDesc, NULL, szOpenCommand );

}



bool Registry::IsFileTypeRegisteredTo( const GR::tChar* szExtension, const GR::tChar* szAppDescription )
{

  GR::tChar       szDesc[MAX_PATH],
                  szTemp[MAX_PATH];

  wsprintf( szDesc, _T( "%s.Document" ), szAppDescription );

  GetKey( HKEY_CLASSES_ROOT, szExtension, _T( "" ), szTemp );

  if ( _tcsicmp( szTemp, szDesc ) == 0 )
  {
    return true;
  }
  return false;

}



void Registry::UnregisterFileType( const GR::tChar* szExtension, const GR::tChar* szAppDescription )
{

  if ( !IsFileTypeRegisteredTo( szExtension, szAppDescription ) )
  {
    return;
  }

  DeleteBranch( HKEY_CLASSES_ROOT, szExtension );

}

Ein Aufruf sieht dann so aus:

Code:
  // den Pfad zur eigenen EXE heraussuchen
  GR::tChar    szDummy[MAX_PATH];
  GetModuleFileName( NULL, szDummy, MAX_PATH );
  GR::tString   strKey = szDummy;

  // Dateinamen als Aufrufparameter mitgeben
  strKey += _T( " \"%1\"" );

  // registrieren
  Registry::RegisterFileType( _T( ".igf" ), _T( "Painter Image" ), szDummy, strKey.c_str() ); 

  // deregistrieren
  Registry::UnregisterFileType( _T( ".igf" ), _T( "Painter Image" ) );

Das wäre genau das!
 
Zurück