Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Installationsprogramm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
10.06.2005, 13:55 Uhr
~farsy
Gast


Ich schreibe gerade an einem Installationsprogramm. Dieses zeigt in einem Edit-Feld den Zielordner an. Bei einem Klick auf Durchsuchen soll man den Ordner wechseln können.
Ich habs mit SaveFileDialog probiert;da kann man aber anscheinend nur Dateien speichern und nicht nur Ordner allein anwählen.

Gibts ne Alternative

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.06.2005, 15:11 Uhr
Th



Um Ordner auszuwählen, such mal nach SHBrowseForFolder...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.06.2005, 21:49 Uhr
xXx
Devil


jup, bei net forms ist d as auch dabei, also so nen editfeld, wo da neben durchsuchen ist und das immer den aktuell ausgewählten pfad anzeigt...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2005, 14:14 Uhr
Dark Listener



Hab da ein gutes Beispiel für dich gefunden:

www.winapi.net/index.php?inhalt=s40

In der Hoffnung Dir geholfen zu haben,
Dark Listener
--
Look at my brand new Logo! And on the following page with my own tutorial there !!!
www.oyla7.de/cgi-bin/designs/medusa_schwarz/index.cgi?page=text&id=64301492&userid=89990972

Dieser Post wurde am 17.06.2005 um 14:14 Uhr von Dark Listener editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2005, 15:31 Uhr
~farsy
Gast


Danke Dark Listener hat mir echt geholfen.
Aber wie kann ich jetzt die '/' umkehren (gibts da nen Funktion dazu
danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.06.2005, 19:27 Uhr
~farsy
Gast


Hat da wirklich keiner ne Ahnung davon ?
Wenn ich nämlich mit CopyFile(); und als Parameter den erhaltenen char-Zeichensatz von SHBrowseForFolder nehme funktionierts nicht; es wird nichts kopiert.
Ich glaube, dass es daran liegt, dass die / umgedreht also \ so rum dein müssen ?!?
Könnt jetzt natürlich ne eigene Funktion schreiben is mir aber dann jetzt zu viel Arbeit.
Außerdem muss das Problem doch öfter auftauchen ?!?

Danke !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.06.2005, 12:28 Uhr
~Marv
Gast


Probier mal das aus zur Ordnerauswahl.
Ich hab das mal im Netz gefunden, kann aber nicht mehr sagen von wem!
Also bei mir hat es geklappt....

Browseff.cpp

C++:
#include "precomp.h"
#include "browseff.h"

// Die HookProc wird benoetigt, um bei Bedarf
// eine Vorauswahl treffen zu können.
static int CALLBACK MyBrowseForFolderHook(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
    switch(uMsg)
    {
        case BFFM_INITIALIZED:
            if(lpData)
                SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);

            break;
        default:
            break;
    }

  return(0);
}


/*
*
*  hWnd Owner      - Entweder das OwnerWindow des Dialogs oder NULL
*  lpTitle         - Ein zusaetzlicher Titel, der im Dialog angezeigt wird oder NULL
*  lpInitialFolder - Ordner, der vorselektiert werden soll oder NULL
*  lpFolder        - In diesem Buffer wird der gewaehlte Ordner gespeichert
*  cchMax          - Gibt an, wieviele character maximal in lpFolder gespeichert werden können.
*                    Der Buffer sollte mindestens MAX_PATH character gross sein. Ist der Buffer
*                    zu klein, wird der String abgeschnitten.
*
* Im Erfolgsfalle gibt die Funktion einen Wert != 0 zurück. In lpFolder ist der gewaehlte Ordner
* gespeichert. Hat der User auf 'Abbrechen' gedrueckt, ist die Stringlaenge = 0.
*
* Im Fehlerfalle wird 0 zurueckgegeben. Ueber die API-Funktion GetLastError koennen weitere
* Informationen ueber den Fehler abgerufen werden.
*
*/

BOOL MyBrowseForFolder(HWND hWndOwner, LPCTSTR lpTitle, LPCTSTR lpInitialFolder, LPTSTR lpFolder, UINT_PTR cchMax)
{
  ITEMIDLIST*   pidl;
  BROWSEINFO    bi;
  IMalloc*      pMalloc = NULL;
  HRESULT       hrIni, hr;
  TCHAR         szName[MAX_PATH * 2];

    if(!cchMax)
    {
        // Der Buffer muß mindestens einen character aufnehmen können
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }

    if(IsBadWritePtr(lpFolder, (sizeof(*lpFolder) * cchMax)))
    {
        // Ein ungueltiger Zeiger wurde uebergeben
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }

    hrIni = CoInitialize(NULL);  // COM Laufzeitumgebung initialisieren

    if(SUCCEEDED((hr = SHGetMalloc(&pMalloc))))
    {
        bi.hwndOwner        = hWndOwner;
        bi.pidlRoot         = NULL;
        bi.pszDisplayName   = szName;
        bi.lpszTitle        = lpTitle;
        bi.ulFlags          = BIF_USENEWUI | BIF_VALIDATE;
        bi.lpfn             = MyBrowseForFolderHook;
        bi.lParam           = (LPARAM)lpInitialFolder;
        bi.iImage           = 0;

        if(NULL == (pidl = SHBrowseForFolder(&bi)))
        {
            // Der User hat 'Abbrechen' gewaehlt
            hr = S_OK;
            lpFolder[0] = TEXT('\0');
        }
        else
        {
            if(!SHGetPathFromIDList(pidl, szName))
            {
                hr = HRESULT_FROM_WIN32(GetLastError());
            }
            else
            {
                _tcsncpy(lpFolder, szName, cchMax);
                lpFolder[cchMax - 1] = TEXT('\0');
            }

            pMalloc->Free(pidl);
        }
        pMalloc->Release();
    }

    if(SUCCEEDED(hrIni))
        CoUninitialize();

    SetLastError(hr);

  return(SUCCEEDED(hr));
}



Browseff.h

C++:
#ifndef   BROWSEFF_H
  #define BROWSEFF_H

    BOOL MyBrowseForFolder(HWND hWndOwner, LPCTSTR lpTitle, LPCTSTR lpInitialFolder, LPTSTR lpFolder, UINT_PTR cchMax);

#endif



precomp.h

C++:
#ifndef   PRECOMP_H
  #define PRECOMP_H

    #include <windows.h>
    #include <tchar.h>
    #include <shlobj.h>

#endif

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.06.2005, 13:47 Uhr
~farsy
Gast


Ja das ist glaub ich der Code von Winapi.net.
Das mit der Ordnerauswahl funktioniert auch schon prächtig; nur das Kopieren via CopyFile(); (siehe oben) noch nicht so ganz.
Kann mir jemand helfen ?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.06.2005, 13:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zeig mal wie du kopierst, evtl haste nur nen tippfehler drin oder so
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.07.2005, 13:25 Uhr
~farsy
Gast


Also ich mach das folgendermaßen:
szPath sei das durch SHBrowseFolder vorgegebene Verzeichnis


C++:
    
int xy;
xy = lstrlen(szPath); strncpy(szPath+xy,"\alpha.txt",10); // Name des Destination-Files hinzufügen

SetDlgItemText(hDlg1, IDC_EDIT1, szPath);                 //durch Anzeigen Pfad überprüfen CopyFile("C:/alpha.txt","szPath",FALSE);                     //Kopiervorgang





Ich denke, dass es an den \ -Zeichen liegt. Wenn ich nämlich schreibe:


C++:

CopyFile("C:/alpha.txt","D:/alpha.txt",FALSE);




funktionierts; die Datei wird kopiert.
Vielleicht kann man das bei SHBrowseFolder auch irgendwie umschreiben (ich benutze den oben stehenden Codevon Marv)
Kann mir jemand helfen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: