| Autor |
Beitrag |
trm
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Do 17.06.10 23:21
Hi,
Wenn ich den Userdesktop ermittle (den habe ich wirklich in einem String)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TForm1.GetDesktop(var Desktop_String: string; allDesktop: Boolean = True): Boolean; const SHGFP_TYPE_CURRENT = 0; var path: array[0..MAX_PATH] of char; begin case allDesktop of True: SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, @path[0]); False: SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, @path[0]); end; Desktop_String := path; Result := Length(Desktop_String) > 0; end; |
,dann bekomme ich später NUR beim SharedDesktop eine Verknüpfung. Auf dem Userdesktop aber nicht.
Auch, wenn ich per Admin das ganze laufen lasse, passiert nichts.
Wo steckt der Fehler? Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 18.06.2010 um 02:19
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 17.06.10 23:43
Warum wirfst du zuerst den Rückgabewert von SHGetFolderPath weg und versuchst dann am Inhalt des Strings festzustellen, ob ein Fehler aufgetreten ist?
Wenn dabei ein Fehler auftritt, hättest du am Rückgabewert ja vielleicht schon einen Hinweis darauf...
trm hat folgendes geschrieben : | | Auch, wenn ich per Admin das ganze laufen lasse, passiert nichts. |
Wie meinst du das? Was passiert denn beim Debuggen?
Kommt der String nicht in path an oder geht danach etwas schief? 
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Fr 18.06.10 00:19
Das eigenartige ist, es kommt keine Fehlermeldung.
Ich habe den Code abgeändert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function TForm1.GetDesktop(var Desktop_String: string; allDesktop: Boolean = True): Boolean; const SHGFP_TYPE_CURRENT = 0; var path: array[0..MAX_PATH] of char; begin Result := True; case allDesktop of True: Result := SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, @path[0]) = S_OK; False: Result := SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, @path[0]) = S_OK; end; if not Result then ShowMessage(SysErrorMessage(GetLastError)); if Result then begin Desktop_String := path; Result := Length(Desktop_String) > 0; end; end; |
Hier kommt kein Fehler. Aber der Rückgabewert des Strings ist vollkommen ok.
Als nächstes prüfe ich, ob der Pfad ein \ hat und dann erstelle ich eine Verknüpfung mit folgender Funktion, welche auch keinen Fehler verursacht:
CreateLink(Pfad + 'Buch3.exe', UserDesktop + 'Bestellbuch3.lnk', 'Bestellbuch3', Pfad);
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function TForm1.CreateLink(lpszPathObj, lpszPathLink, lpszDesc, WorkingDir: string): Boolean; var psl: IShellLink; ppf: IPersistFile; begin Result := False; if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, psl)) then begin psl.SetPath(PChar(lpszPathObj)); psl.SetDescription(PChar(lpszDesc)); psl.SetWorkingDirectory(PChar(WorkingDir)); if SUCCEEDED(psl.QueryInterface(IID_IPersistFile, ppf)) then Result := ppf.Save(StringToOLEStr(lpszPathLink), TRUE) = S_OK; if not Result then ShowMessage(SysErrorMessage(GetLastError)); end; end; |
Ich weiss echt nicht, wo ich suchen soll
Edit:
Das eigenartigste ist ja, dass CSIDL_COMMON_DESKTOPDIRECTORY funktioniert, nur eben CSIDL_DESKTOPDIRECTORY nicht.
Beide Pfade werden korrekt erkannt.
Edit 2:
Jetzt habe ich erst bemerkt, dass, obwohl der korrekte Pfad im String steht, die Verknüpfung auf dem Desktop erstellt wird, aber nicht dort, wo sie sein soll. Ich habe unter Windows 7 meinen Pfad zum Desktop auf einer anderen Festplatte, dieser Pfad wird auch korrekt erkannt. Dennoch erstellt die Funktion die Verknüpfung am Originaldesktop ( C:\Users\mathias\Desktop\ ) statt auf ( d:\backup\desktop\ ). Liegt das am virtuellen Desktop? Wenn ja, wie kann ich erzwingen, dass die Verknüpfung auf D:\backup\desktop\ erstellt wird?
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Fr 18.06.10 09:11
Eigentlich müsste das hier EDiT 3 sein, aber so fällt es schneller ins Auge.
Nach einen Windows 7 - Neustart funktioniert es auf einmal wie es soll.
Ich weiss trotzdem nicht, warum, denn das Merkwürdige war immer noch, dass ich bildlich gesehen 2 Garagen hatte, die sich in keinster Weise gegenüber stehen oder verbunden sind. Nachdem ich in die Garage 1 gefahren bin und ich aus dem Auto aussteige, ist das Auto nicht mehr in Garage 1, sondern in Garage 2.
Das ist wie dieses Teilchen, welches verschiedene Stati (Statusse?) annehmen kann und an mehreren Orten gleichzeitig ist
Jedenfalls ist das Problem erstmal verschwunden 
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 18.06.10 09:37
trm hat folgendes geschrieben : | | Ich weiss trotzdem nicht, warum, denn das Merkwürdige war immer noch, dass ich bildlich gesehen 2 Garagen hatte, die sich in keinster Weise gegenüber stehen oder verbunden sind. Nachdem ich in die Garage 1 gefahren bin und ich aus dem Auto aussteige, ist das Auto nicht mehr in Garage 1, sondern in Garage 2. |
Vielleicht war die eine Garage gerade überfüllt.
Im Ernst: Durch die virtuellen Verzeichnisse kann es schon sein, dass da etwas durcheinandergeht. Meistens ist die Ursache zu finden, wenn man die Systemdateien einblendet. Dann sieht man nämlich manchmal einen gleichnamigen virtuellen Ordner Desktop. In dem Fall ist beim Umleiten etwas schief gegangen.
(Generell sollte man Systemdateien unter Windows 7 aber ausgeblendet lassen.)
trm hat folgendes geschrieben : | Das ist wie dieses Teilchen, welches verschiedene Stati (Statusse?) annehmen kann und an mehreren Orten gleichzeitig ist  |
Ja, Quantenmechanik ist was Schönes, hatte ich in der Uni.
Auch wenn mir die Berechnungen dann doch ein wenig zu unübersichtlich waren.
|
|
|