AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ParamStr(1) unter Win7 falscher Pfad
Thema durchsuchen
Ansicht
Themen-Optionen

ParamStr(1) unter Win7 falscher Pfad

Ein Thema von e-gon · begonnen am 24. Aug 2011 · letzter Beitrag vom 24. Aug 2011
Antwort Antwort
Seite 1 von 3  1 23      
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#1

ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 10:34
Hallo zusammen,

um Dateien per Doppelklick mit meinem eigenen Programm öffnen zu können benutze ich
ExtractFileDir(ParamStr(1)) Das hat bisher auch immer gut funktioniert. Nach meinem Umstieg auf Windows 7 habe ich allerdings ein Problem, wenn die zu öffnende Datei auf dem Desktop liegt.
ExtractFileDir(ParamStr(1)) liefert dann "C:\Benutzer\USERNAME\Desktop" zurück. Aber diesen Pfad gibt es laut Windows nicht und mein Programm stürzt ab. Windows-Explorer behauptet es müsste "C:\Users\USERNAME\Desktop" heißen. Wieso liefert ParamStr dann "Benutzer"?

Natürlich könnte ich nun "Benutzer" durch "Users" ersetzen. Aber das wäre eine unsaubere Lösung! Und wer weiß welche Pfade noch falsch von ParamStr zurückgegeben werden...

Kennt jemand eine Lösung für dieses Problem?

Gruß
e-gon
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 10:48
Diesen Pfad kann man "übersetzen" lassen. Nur weiß ich gerade leider nicht mehr, wo das zu finden ist...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#3

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 10:53
Müsste CSIDL_FLAG_CREATE sein.
http://www.delphipraxis.net/1082613-post8.html

siehe dazu: http://www.delphipraxis.net/1041628-post5.html
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 11:09
Danke für die schnellen Antworten!

Aber wie soll mir CSIDL_FLAG_CREATE dabei helfen? ParamStr(1) liefert "C:\Benutzer\USERNAME\Desktop". Woher soll ich dann wissen, dass ich CSIDL_FLAG_CREATE abfragen muss? Auf einem anderen PC ist z. B. der Username ein anderer oder das System liegt nicht auf C: sondern D: ...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 11:21
... oder das System liegt nicht auf C: sondern D: ...
Dann zeig mal das du ein Win7-System auf D:\ bekommst. AFAIK wird hier auf jedenfall die Laufwerke so sortiert das Win7 unter C:\ liegt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#6

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 11:25
Hmmm, mir war so, als wenn mir der Explorer (Doppelklick im Explorer oder auf Desktop) den internen nicht-lokalisierten Pfad übergibt und nicht den Lokalisierten.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 11:28
... oder das System liegt nicht auf C: sondern D: ...
Dann zeig mal das du ein Win7-System auf D:\ bekommst. AFAIK wird hier auf jedenfall die Laufwerke so sortiert das Win7 unter C:\ liegt.
Da magst Du recht haben (ich kenne Win7 noch nicht so gut).

Worum es mir aber eigentlich geht: Da ich nicht weiß welche Pfade alles von Win7 verbogen werden ist es mir nicht möglich sämtliche Verzeichnisse auf das richtige Verzeichnis abzubilden.

Gibt es vielleicht eine Funktion wie PathNameToRealName(ExtractFileDir(ParamStr(1))); ?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 12:07
Das könnte eine Erklärung für Probleme sein, die ich schon einmal mitbekommen habe.

Vielleicht geht es mit GetModuleFilename korrekt?
Delphi-Quellcode:
function GetModuleFileNameWrapper: string;
var
  lpFileName: array[0..MAX_PATH] of Char;
begin
  FillChar(lpFileName, SizeOf(lpFileName), #0);
  GetModuleFileName(HInstance, lpFileName, MAX_PATH);
  Result := lpFileName;
end;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 13:36
GetModuleFilename ist gut, wenn es um das ausführende Programm geht. Ich bräuchte das aber für die zu öffnende Datei.

Um es mal deutlich zu machen: Ich habe bestimmte Dateitypen mit meinem Programm verbunden. Klickt man nun doppelt auf eine Datei diesen Typs wird automatisch mein Programm gestartet und die zu öffnende Datei per ParamStr(1) übergeben.

Den Pfad meines Programms kann ich problemlos ermitteln. Das Problem liegt dann vor, wenn die "gedoppeltklickte" Datei auf dem Desktop oder in sonst einem Verzeichnis liegt, welches von Win7 umgebogen wird.

Aber es kann ja nicht sein, dass ich der Einzige mit einem solchen Problem bin. Wie macht Ihr das, die auch so ein Programm entwickeln, das über Dateien eines bestimmten Typs geöffnet wird?
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#10

AW: ParamStr(1) unter Win7 falscher Pfad

  Alt 24. Aug 2011, 13:47
Hm. Vielleicht bist du mit deinem Problem doch einsamer als du dachtest. Ich habe es gerade mal getestet und ein Demo-Projekt erstellt, das mir den Pfad der Exe-Datei anzeigt und den Pfad der übergebenen Datei (um mal beide hier diskutierten Fälle zu erschlagen, auch wenn du ja eigentlich nur auf letzteres hinauswillst). In allen Fällen kam bei mir im Programm "c:\users\...." an.

System: Win7 Professional 64-Bit.
Delphi 2009.

Ich hänge das Mini-Programm mal einfach an. In der dritten Zeile sollte nach dem Start der Pfad der übergebenen Datei stehen. Kannst ja mal berichten, ob da bei dir auch "Benutzer" anstatt "Users" ankommt.
Angehängte Dateien
Dateityp: zip testpfad.zip (242,7 KB, 14x aufgerufen)

Geändert von Bbommel (24. Aug 2011 um 13:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz