AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Startmenü Einträge

Ein Thema von mOzZzI · begonnen am 4. Mär 2006 · letzter Beitrag vom 5. Mär 2006
Antwort Antwort
Benutzerbild von mOzZzI
mOzZzI

Registriert seit: 11. Nov 2005
Ort: Bamberg
320 Beiträge
 
Delphi 2006 Professional
 
#1

Startmenü Einträge

  Alt 4. Mär 2006, 21:49
Hallo miteinander!

Ich versuche, im OnCreate Ereignis meines Programmes den Ordner "C:\Dokumente und Einstellungen\All Users\Startmenü\" auszulesen und in einer ListView anzuzeigen...klappt aber nicht so recht...

Danach möchte ich z.B. einen Ordner unter "C:\...\Startmenü" erstellen und Dateien in diesen Ordner hineinsetzen, die der Benutzer ausgewählt hat...

Jetzt meine Frage: Wie stelle ich das ungefähr an?

Mfg Philipp
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Startmenü Einträge

  Alt 4. Mär 2006, 22:31
Es gibt in HKCU einen Eintrag, welcher besagt wo das Startmenue gespeichert ist. Diese Eintraege liegen in HKCU\Software\Microsoft\Windows\CurrentVersion\Exp lorer\User Shell Folders. Einfach mal reingucken

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Startmenü Einträge

  Alt 5. Mär 2006, 01:45
Genau. Du liest diesen Key einfach ein (in der Delphi-Hilfe (zumindest bis V7) ist sogar ein ausführliches Beispiel und scannst dann das Dir. Dazu gibts auch massig Funktionen:
Delphi-Quellcode:
procedure getdirsindir(const verzeichniss:string;var dirs:tstringlist);
var
  sd:string;
  s:tsearchrec;
  i:integer;
begin
  dirs:=tstringlist.Create;
  sd:=dirup(verzeichniss);
  if findfirst(sd+'*.*',faanyfile,s)<>0 then begin
    sysutils.findclose(s);
    exit;
  end;
  dirs.add(s.Name);
  while findnext(s)=0 do
    dirs.Add(s.name);
  i:=0;
  while i<dirs.count do begin
    if ((dirs[i]='..') or (dirs[i]='.')) then begin
      dirs.Delete(i);
      i:=i-1;
    end else
      if not directoryexists(sd+dirs[i]) then begin
        dirs.Delete(i);
        i:=i-1;
      end;
    inc(i);
  end;
  sysutils.findclose(s);
end;

function getfilesindir(const verzeichniss,filter:string;var files:tstringlist):extended;
var
  sd:string;
  s:tsearchrec;
  i:integer;
  e:extended;
  flt:string;
begin
  if filter='then
    flt:='*.*'
  else
    flt:=filter;
  e:=0;
  sd:=dirup(verzeichniss);
  result:=0;
  files:=tstringlist.Create;
  if findfirst(sd+flt,faanyfile,s)<>0 then begin
    sysutils.findclose(s);
    exit;
  end;
  files.add(s.Name);
  while findnext(s)=0 do begin
    files.Add(s.name);
    e:=e+s.Size;
  end;
  i:=0;
  while i<files.count do begin
    if ((files[i]='..') or (files[i]='.')) then begin
      files.Delete(i);
      i:=i-1;
    end else
      if directoryexists(sd+files[i]) then begin
        files.Delete(i);
        i:=i-1;
      end;
    inc(i);
  end;
  result:=e;
  sysutils.findclose(s);
end;

function gettreeindir(const root:string;var files,dirs:tstringlist;filter:string):extended;
var
  sd:string;
  i,j:integer;
  fls,unterverzeichnisse:tstringlist;
  flt:string;
  groesse:extended;
begin
  groesse:=0;
  if filter='then
    flt:='*.*'
  else
    flt:=filter;
  sd:=dirup(root);
  files:=tstringlist.Create;
  dirs:=tstringlist.Create;
  dirs.Add(sd);
  i:=0;
  while i<dirs.Count do begin
    getdirsindir(dirs[i],unterverzeichnisse);
    for j:=0 to unterverzeichnisse.Count-1 do
      dirs.Add(dirup(dirs[i])+unterverzeichnisse.Strings[j]);
    inc(i);
  end;
  for i:=0 to dirs.Count-1 do begin
    groesse:=groesse+getfilesindir(dirs[i],flt,fls);
    for j:=0 to fls.Count-1 do
      files.Add(dirup(dirs[i])+fls.strings[j]);
  end;
  result:=groesse;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Startmenü Einträge

  Alt 5. Mär 2006, 13:36
Ich würde nicht darauf vertrauen, dass der Registry Eintrag immer dort ist und auch immer Gültigkeit hat. Ich würde da besser die API Funktion nehmen:
Delphi-Quellcode:
const
  CSIDL_FLAG_CREATE = $8000;
  CSIDL_ADMINTOOLS = $0030;
  CSIDL_ALTSTARTUP = $001D;
  CSIDL_APPDATA = $001A;
  CSIDL_BITBUCKET = $000A;
  CSIDL_CDBURN_AREA = $003B;
  CSIDL_COMMON_ADMINTOOLS = $002F;
  CSIDL_COMMON_ALTSTARTUP = $001E;
  CSIDL_COMMON_APPDATA = $0023;
  CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
  CSIDL_COMMON_DOCUMENTS = $002E;
  CSIDL_COMMON_FAVORITES = $001F;
  CSIDL_COMMON_MUSIC = $0035;
  CSIDL_COMMON_PICTURES = $0036;
  CSIDL_COMMON_PROGRAMS = $0017;
  CSIDL_COMMON_STARTMENU = $0016;
  CSIDL_COMMON_STARTUP = $0018;
  CSIDL_COMMON_TEMPLATES = $002D;
  CSIDL_COMMON_VIDEO = $0037;
  CSIDL_CONTROLS = $0003;
  CSIDL_COOKIES = $0021;
  CSIDL_DESKTOP = $0000;
  CSIDL_DESKTOPDIRECTORY = $0010;
  CSIDL_DRIVES = $0011;
  CSIDL_FAVORITES = $0006;
  CSIDL_FONTS = $0014;
  CSIDL_HISTORY = $0022;
  CSIDL_INTERNET = $0001;
  CSIDL_INTERNET_CACHE = $0020;
  CSIDL_LOCAL_APPDATA = $001C;
  CSIDL_MYDOCUMENTS = $000C;
  CSIDL_MYMUSIC = $000D;
  CSIDL_MYPICTURES = $0027;
  CSIDL_MYVIDEO = $000E;
  CSIDL_NETHOOD = $0013;
  CSIDL_NETWORK = $0012;
  CSIDL_PERSONAL = $0005;
  CSIDL_PRINTERS = $0004;
  CSIDL_PRINTHOOD = $001B;
  CSIDL_PROFILE = $0028;
  CSIDL_PROFILES = $003E;
  CSIDL_PROGRAM_FILES = $0026;
  CSIDL_PROGRAM_FILES_COMMON = $002B;
  CSIDL_PROGRAMS = $0002;
  CSIDL_RECENT = $0008;
  CSIDL_SENDTO = $0009;
  CSIDL_STARTMENU = $000B;
  CSIDL_STARTUP = $0007;
  CSIDL_SYSTEM = $0025;
  CSIDL_TEMPLATES = $0015;
  CSIDL_WINDOWS = $0024;

////////////////////////////////////////////////////////////////////////////////
// GetShellFolder
// Returns the special shell folders
// uses: ActiveX, ShlObj;

function GetShellFolder(CSIDL: integer): string;
var
  pidl : PItemIdList;
  FolderPath : string;
  SystemFolder : Integer;
  Malloc : IMalloc;
begin
  Malloc := nil;
  FolderPath := '';
  SHGetMalloc(Malloc);
  if Malloc = nil then
  begin
    Result := FolderPath;
    Exit;
  end;
  try
    SystemFolder := CSIDL;
    if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
    begin
      SetLength(FolderPath, max_path);
      if SHGetPathFromIDList(pidl, PChar(FolderPath)) then
      begin
        SetLength(FolderPath, length(PChar(FolderPath)));
      end;
    end;
    Result := FolderPath;
  finally
    Malloc.Free(pidl);
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mOzZzI
mOzZzI

Registriert seit: 11. Nov 2005
Ort: Bamberg
320 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Startmenü Einträge

  Alt 5. Mär 2006, 13:42
Ok, ich habe es jetzt mit der API funktion von luckie gemacht...

Jetzt ist noch, wie kann ich darin Dateien in diesen Ordner hineinsetzen, die der Benutzer ausgewählt hat...
--Mfg mozZzI--------------
Get & Test my ToolBar (550 KB)
Thread & Comments Here
------------------------------
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:35 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