[ IDE @ 07.01.2006. 23:11 ] @
dakle, interesuje me kako naci adrese svih vaznijih foldera u windowsu...

u "BCB DEV"-u ima primjer kako ovo naci: pomocu API f-je "SHGetSpecialFolderLocation"

pa u primjeru kaze:

Code:

 LPITEMIDLIST      pidl;
    LPMALLOC      pShellMalloc;
    char          szDir[MAX_PATH];

    
    if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
    {
        if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOPDIRECTORY,&pidl)))
        {
           
            if(SHGetPathFromIDList(pidl, szDir))
            {
               
                Label1->Caption = szDir;
            }

            pShellMalloc->Free(pidl);
        }

        pShellMalloc->Release();
    }


ali se meni ovo ne moze uopste iskompajlirati... pokazuje mi stalno gresku (sad cu samo lupiti jer ne znam tacno gdje) cini mi se u samom shlobj.h ili nekom drugom .h slicnog naziva... (???)
stavio sam i #include<SHLOBJ.H>
u cemu je stvar??
mogu li se dobiti putanje specijalnih foldera i na jos neki nacin??


dalje, u "BCB DEV"-u na ovu temu i o ovoj funkciji kaze:

"This function allows you to retrieve a pidl for various directories in the shell, such as the Windows desktop , the startup directory, and the My Documents folder..."

sta je pidl ??

tamo se kaze: "The last argument(f-je "SHGetSpecialFolderLocation") is the address of a pidl..."

[Ovu poruku je menjao fucking voodoo dana 08.01.2006. u 00:19 GMT+1]
[ X Files @ 07.01.2006. 23:38 ] @
Probaj da dodas ovu liniju:

Code:

#define NO_WIN32_LEAN_AND_MEAN


... negde na pocetku Unit1.cpp.

Ili u Project / Options / Directories-conditionals / Conditionals

...dodaj NO_WIN32_LEAN_AND_MEAN.

Tj, ako je vec bilo _DEBUG, ti stavi: _DEBUG;NO_WIN32_LEAN_AND_MEAN

a ako nije onda samo taj string.
[ IDE @ 08.01.2006. 18:35 ] @
ok, to je to...
prvo sam mislio da me zezas sa ovim kodom, ali je ipak to to...

hvala ti...

ovdje sam zapazio jos jedan problem: u uputstvu za koriscenje ove f-je (u BCB DEV-u) imaju nabrojane vrijednosti koje trebamo unijeti da bi dobili adresu nekog foldera...
tako npr. u ovom smo slucaju stavili "CSIDL_DESKTOPDIRECTORY" da bi dobili desktop direktorijum, e pa problem je to sto kad se stave neke druge vrijednosti ,npr. za control panel: "CSIDL_CONTROLS" to ne radi...
ne radi, cini mi se ni za my computer... ni jos nekoliko...
u cemu je tu problem, zna li ko??
kako se moze otvoriti npr. control panel i da izgleda isto kao control panel kad ga otvorimo normalnim putam...ili kako otvoriti desktop (show desktop) ali ne samo folder njegov, nego da izgleda kako stvarno izgleda, tj. napraviti link ka sektopu pomocu koda...

a uzgred budi receno, sta znaci ovo sto sam dopisao (NO_WIN32_LEAN_AND_MEAN)?? kada se to upotrebljava??



[Ovu poruku je menjao fucking voodoo dana 08.01.2006. u 19:42 GMT+1]
[ X Files @ 08.01.2006. 20:01 ] @
Citat:

prvo sam mislio da me zezas sa ovim kodom, [...]


Ja? :)

Eh, da stvarno deluje neozbiljno, ali je ipak tacno. Taj makro je bitan kod BCB5
i BCB6, i potreban je kod mnogih operacija, na primer i kod SHBrowseForFolder()
API-ja...

Citat:

a uzgred budi receno, sta znaci ovo sto sam dopisao (NO_WIN32_LEAN_AND_MEAN)
?? kada se to upotrebljava??

To znaci da "znaš za jadac", tj, postoje neka sukobljavanja Borlandovih i M$
header-a, pa taj makro rešava problem.

Takođe, može i da ga napravi (kod programiranja tray-a), ali to je već druga priča...

Citat:

npr. za control panel: "CSIDL_CONTROLS" to ne radi...

Pojma nemam. Nisam probao, a sada baš nemam vremena. Bio je i neki ZIP uz
te primere, pa ne znam mogu li ti oni rešiti problem... Takođe, može se desiti
da je sve to radilo za Win98, a da bi se sve sinhronizovalo sa XP treba na MSDN
pogledati nove konstante...

Citat:

kako se moze otvoriti npr. control panel i da izgleda isto kao control panel kad ga
otvorimo normalnim putam...


Na primer ovako možeš otvoriti CP:
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ShellExecute(NULL, "open", "control.exe", "", NULL, NULL);
}

... a ovako neku pojedinačnu stavku:
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ShellExecute(NULL, "open", "control.exe", "TimeDate.cpl", NULL, NULL);
}


[ NrmMyth @ 09.01.2006. 12:03 ] @
Meni je osobno lijepse samome programatski uci u registry i "pogledati".
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
[ IDE @ 09.01.2006. 15:06 ] @
ok, hvala vam na odgovorima...