Toon posts:

[C#/Win32] Systeem folders aanroepen werkt niet meer.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik haal via een PInvoke de "all users" directory van het start menu op.

Dit doe ik met de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public const int CSIDL_COMMON_STARTMENU = 0x0016;

[DllImport("shell32.dll",EntryPoint="SHGetSpecialFolderLocation",ExactSpelling=false,
CharSet=CharSet.Unicode,SetLastError=true)]
    static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner,int nFolder,out IntPtr ppidl);

[DllImport("shell32.dll",EntryPoint="SHGetPathFromIDList",ExactSpelling=false,
CharSet=CharSet.Unicode,SetLastError=true)]
    static extern int SHGetPathFromIDList(IntPtr ppidl,string nFolder);

private void button1_Click(object sender, System.EventArgs e)
{
    IntPtr ir = (IntPtr)0;
    IntPtr ir1;
    string s = "";
    SHGetSpecialFolderLocation(ir,CSIDL_COMMON_STARTMENU,out ir1);
    SHGetPathFromIDList(ir1,s);
    MessageBox.Show(this,s);
    //label2.Text = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) +
"\\Tagger\\";
}


Als ik nu lijn 20 wil aanroepen krijg ik een foutmelding. The path is not of a legal form.

De work directory veranderd niet want dit geeft wel een goed resultaat:
label2.Text = Environment.CurrentDirectory.ToString();

Wat gaat er fout of wat mis ik?

[ Voor 10% gewijzigd door Verwijderd op 27-04-2004 16:33 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
Wat krijg je als resultaat als je Environment.SpecialFolder.ProgramFiles bekijkt?

Daarnaast kan je beter gebruik maken van de Path.Combine static method om 2 paden samen te voegen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Samenvoegen?

De .NET versie van de specialFolder geeft het start menu van de "current user" terug*. Met die PInvoke haal ik dus de "all users"dir op. Verder moet ik sowieso die PInvoke constructie gebruiken omdat deze constructie al een klein beginnetje is om een shortcut mee te maken. Tenzij iemand een managed methode weet :9 .


*Ik geloof dat dit niet "Environment.SpecialFolder.ProgramFiles" is maar "Environment.SpecialFolder.Program" maar dit doet er niet toe bij het probleem, want al dit soort directory aanroepen leveren na de PInvoke de hiervoor genoemde error op.

Ik denk dat ik iets weer terug moet zetten of vrij moet geven maar ik weet eigenlijk niet waarnaar ik moet zoeken.

[ Voor 4% gewijzigd door Verwijderd op 27-04-2004 22:08 ]