exe verknüpfen

FSA

Erfahrenes Mitglied
Hi
ich habe mal wieder eins meiner berühmten problemchen...

ich weis echt nett wohin dass gehört ob in c/c++ oder was auch immer... also nett sauer sein:D

ich würde gern wissen ob man eine datei mit einer exe so verknüpfen kann das wenn man die datei anklickt die exe sich öffnet geht so was****

Danke im Voraus

MFG
 
Hi

a) entweder machst du einfach eine Verknüpfung.

b) oder du nimmst beim Dateinamen eine eigene Endung und stellst ein, dass diese Endung mit deinem Programm geöffnet wird.

c) oder du patcht CreateFile (und ähnliches) zur Laufzeit.
Kompliziert, fehleranfällig und eventuell Antivirenmeldungen.

Für alle drei Möglichkeiten muss dein Programm aber mindestens einmal richtig gestartet werden (bei a und b kannst du es natürlich auch per Hand einstellen)

Gruß
 
c) würde ich mal sofort vergessen. Das ist übelste Hackerei und garantiert Probleme.

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" ) );
 
Zuletzt bearbeitet:
danke erstmal aber das ist ja alles so kompliziert und das mit der verknüpfung war nicht das was ich erreichen will!

Ich möchte einfach das wenn ich z.B eine .exe öffne eine andere datei sich öffnet ich habs oben vertauscht sorry!
Also .exe öffnen die im hintergrund starten aber nur datei anzeigenlassen!
Allerdings nureine datei anzeigen also die exe in der die bestimmte datei ist
Bisschen kompliziert:D
Bei fragen einfach melden:D

MFG
 
Willst du beim Drücken auf eine Exe auch noch deine eigene exe, die sich in der anderen exe befindet mitstarten lassen?
 
also zu sheel:
ja ist ne normale .txt datei als bsp.

zu cromon:
ich möchte quasie beim drücken der txt datei eine exe starten lassen so ist das gemein

MFG
 
Zurück