Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 17.06.10 23:21 
Hi,

Wenn ich den Userdesktop ermittle (den habe ich wirklich in einem String)

ausblenden 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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 18.06.2010 um 02:19
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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? :roll:

Wenn dabei ein Fehler auftritt, hättest du am Rückgabewert ja vielleicht schon einen Hinweis darauf...

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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? :gruebel:
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 18.06.10 00:19 
Das eigenartige ist, es kommt keine Fehlermeldung.

Ich habe den Code abgeändert:

ausblenden 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);

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 18.06.10 09:37 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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. :mrgreen:

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.)

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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. :D
Auch wenn mir die Berechnungen dann doch ein wenig zu unübersichtlich waren.