tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
630
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    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

    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
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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ß
     

  3. #3
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      // 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" ) );
    Geändert von Endurion (16.01.11 um 07:10 Uhr)
     

  4. #4
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Bei solchen Sachen ist ein Aufruf an SHChangeNotify zu empfehlen um den Cache zu löschen.
     

  5. #5
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    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
    Bei fragen einfach melden

    MFG
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Ist die anzuzeigende Datei wirklich als Datei auf der Festplatte, oder "in" der Exe?
     

  7. #7
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Willst du beim Drücken auf eine Exe auch noch deine eigene exe, die sich in der anderen exe befindet mitstarten lassen?
     

  8. #8
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    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
     

  9. #9
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Beim öffnen einer speziellen Textdatei oder allgemein bei Textdateien?
     

  10. #10
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    allgemein bei textdateien
     

  11. #11
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Zitat Zitat von Endurion Beitrag anzeigen
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      // 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!
     

Ähnliche Themen

  1. GUI mit Array verknüpfen
    Von Delectation im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 10.01.08, 12:39
  2. variablen verknüpfen
    Von zerpheus im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 04.12.07, 17:39
  3. 3 Tabellen verknüpfen
    Von Conspi im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 13.02.06, 00:33
  4. PHP mit Javascript verknüpfen
    Von helga im Forum PHP
    Antworten: 1
    Letzter Beitrag: 02.02.06, 10:30
  5. Tabellenzellen verknüpfen
    Von petschni im Forum PHP
    Antworten: 4
    Letzter Beitrag: 24.02.05, 18:27

Stichworte