Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   LuckieDIPS (https://www.delphipraxis.net/7581-luckiedips.html)

Luckie 16. Aug 2003 08:18


LuckieDIPS
 
Liste der Anhänge anzeigen (Anzahl: 2)
Sichert und stellt die Icon Positionen der Desktopicons wiederher (nur NT ff.)

Mein Dank geht an Nico, der für den Kern des Codes zuständig war. :wink:

Neue Version: 2.0
Jetzt mit Unterstützung für Windows 98.

Neue Version: 2.1
Bugs gefixet

Neue Version: 3.0
Neue Option: Automatisches Sichern der Icon-Positionen.
Wird diese Option aktiviert, speichert das Programmautomatisch die Icon-Positionen, wenn sich die Auflösung ändert. Es minimiert sich dann beim Minimieren in die TNA und wird automatisch mit Windows beim Anmelden gestartet.

Änderung zurückgenommen. Es funktioniert noch nicht!


Neue Version: 3.1
Das Programm kann jetzt mit der Benutzeranmeldung mitgestartet werden und minimiert sich dann in die TNA neben die Uhr. So hat man einen schnellen Zugriff, um die Desktopicon Positionen zu sichern oder wieder herzustellen.

Neue Version 3.2
Der Speicherort kann jetzt freigewählt werden, sowohl in der GUI, als auch wenn das Pogramm nur mit Parametern gestartet wird. Optional kann zu den bekannten Parametern /s und /r zum Sichern oder Wiederherstellen mit dem Paramter /p:<Pfad> ein Pfad angegeben werden, in dem die Datei mit den Iconpositionen gespeichert werden soll. Diese Information wird in der Registry gesichert unter: "HKEY_CURRENT_USER\Software\MichaelPuff\LuckieDIPS ".

Edit [2007-03-20]: Jetzt mit Uninstaller.
Edit [2007-03-21]: Bugs gefixt. Lifting der Oberfläche.

Homepage: LuckieDIPS Homepage (noch alte Version)

sakura 16. Aug 2003 15:30

Re: LuckieDIPS
 
Ich finde das Tool richtig genial ;-)

...:cat:...

Luckie 16. Aug 2003 15:35

Re: LuckieDIPS
 
Danke. :P

S - tefano 16. Aug 2003 15:49

Re: LuckieDIPS
 
Als ich noch Win98 hatte, hab ich mich nach so einem Tool gesehnt, so oft wie die Auflösung nach nem Spiel verstellt war.
Heute passiert das zum Glück nicht mehr so oft, aber trotzdem. Endlich hat sich mal einer die Mühe gemacht so ein Tool zu basteln! Ave Luckie & Nico ;-)

Bis dann,

S - tefano

P.S.: Bugs hab ich noch keine gefunden. Kann mir das Tool nämlich nicht runterladen, bekomme vom Server keine Antwort :(

Alexander 16. Aug 2003 15:50

Re: LuckieDIPS
 
Ich würde es mir ja gerne runterladen und könnte es wohl auch sehr gut gebrauchen, aber er findet es ncith :sad:

sakura 16. Aug 2003 15:53

Re: LuckieDIPS
 
Der Server scheint gerade verreckt zu sein :mrgreen:

Ein wenig Geduld und er kommt wieder. Ist halt Linux :angle:

...:cat:...

Alexander 16. Aug 2003 16:05

Re: LuckieDIPS
 
Unter diesen Bedingungen eher schwer vorzustellen :mrgreen:

@sakura Warum setzt du eigentlich Windowsserver ein?

Luckie 16. Aug 2003 16:47

Re: LuckieDIPS
 
HP geht wieder. Für 98 und NT ff. hat Nico ein Programm. Findet man bei mir in der Ablage unter Exports -> dipssrc.zip Es handelt sich dabei um ein Übersetzung von einem C/C++ Programm von Jeffrey Richter. Da der Delphi-Compiler aber keine Shared Resources (oder so) unterstützt, mußte er ein paar recht geniale Klimmzüge machen. Auf alle Fälle lohnenswert sich die Sourcen mal anzukucken.

Alexander 16. Aug 2003 17:24

Re: LuckieDIPS
 
So jetzt habe ich's ausprobiert, aber erstens sind ein paar Ordner weg und zweitens sehen die iocons so komisch aus (WinXP), sie haben einen schwarzen Rand..

Und wie ist das, speichert dein Programm auch die Infos, wenn man es schließt?

Nachtrag: ah habe die Ini nicht gesehen ;-)

Alexander 16. Aug 2003 17:44

Re: LuckieDIPS
 
So habe gerade gemerkt, dass sie nicht weg sind, sondern das ein paar Icons ihr Position gewechselt haben. Also so ganz funktioniert es noch nciht.

Luckie 16. Aug 2003 17:47

Re: LuckieDIPS
 
Nach der Anwendung meines Programmes? Kuck mal, ob die verschwundenen Ordner in der Ini-Datei stehen.

Wie viele Icon hast du denn auf dem Desktop?

Alexander 16. Aug 2003 17:53

Re: LuckieDIPS
 
Sie sind ja doch ncith verschwunden, sonder haben ihre Position gewechselt...
Sie stehen aber in der Ini drinne.
Es sind ca 35 Icons.

Luckie 16. Aug 2003 18:03

Re: LuckieDIPS
 
Dein aktivierter ActiveDesktop wird mein Programm aushebeln.

hummer 16. Aug 2003 18:05

Re: LuckieDIPS
 
Das Programm ist wirklich gut und funktioniert bei mir einwandfrei. Kann es auch gebrauchen, denn bei mir Win2000 verstellen sich meistens von gerade installierten Programmen, die Icons doch relativ häufig.

S - tefano 16. Aug 2003 18:12

Re: LuckieDIPS
 
Jau, bei mir funktionierts auch.
Echt nützlich!

Bis dann,

S - tefano

Luckie 16. Aug 2003 18:30

Re: LuckieDIPS
 
Wie gesagt, wird der ActiveDesktop sein. das ist wohl kein gewöhnliches Fenster. Und das hebelt eben die LuckieDIPS aus.

Luckie 17. Aug 2003 07:52

Re: LuckieDIPS
 
Neue Version ist da: 1.1

Was ist neu? Die Ini-Datei mit den Iconpositionen wird jetzt nicht mehr im Programmverzeichnis gespeichert, wo der Anwender eventuell keine Schreibrechte hat, sondern in seinem persönlichen lokalen Einstellungen für die Anwendungsdaten, zum Beispiel:
Code:
x:\Dokumente und Einstellungen\username\Lokale Einstellungen\Anwendungsdaten
Download: LuckieDIPS [102 KB]

Luckie 21. Aug 2003 04:18

Re: LuckieDIPS
 
Und noch eine neue Version: 1.2
- Speicherort der Ini-Datei jetzt 'C:\Dokumente und Einstellungen\%username%\Lokale Einstellungen\Anwendungsdaten\LuckieDIPS
- Schaltfläche zum Entfernen der Datei und des Ordners hinzugefügt.

Download: LuckieDIPS [102 KB]

Luckie 8. Dez 2004 05:26

Re: LuckieDIPS
 
Es gibt wieder eine neue Version der LuckieDIPS. Neu ist, dass man es jetzt mit Paramertern starten kann und so die Iconpositionen automatsich wiederhergestellt oder gesichert werden. Näheres dazu auf der LuckieDIPS Homepage.

Download: LuckieDIPS [102 KB]
Homepage: LuckieDIPS Homepage

Luckie 15. Feb 2005 18:01

Re: LuckieDIPS
 
Und wieder eine neue Version. Dank eines Wrappers von NicoDE wird jetzt auch Windows98 unterstützt.

Download: LuckieDIPS [109 KB]
Homepage: LuckieDIPS Homepage

lkz633 15. Feb 2005 18:27

Re: LuckieDIPS
 
Klappt es mittlerweile mit ActiveDesktop?

Gruss
lkz633

Luckie 15. Feb 2005 18:28

Re: LuckieDIPS
 
Nein noch nicht. Nico will sich das wohl mal angucken.

4toms 15. Feb 2005 18:50

Re: LuckieDIPS
 
Kann mir mal jemand erklären, worauf die ganze neue Euphorie für LuckieDIPS beruht? Wohl kaum auf dem aktuell aktualisierten Sourcecode. Eher auf den Veröfentlichungen in der ComputerBild?

Wes Wein ich trink, des Lied ich sing...

Die Redakteure der Computerzeitschriften fragen stets vorher an...

Also was ist wem peinlich?

dizzy 15. Feb 2005 18:53

Re: LuckieDIPS
 
Was soll das 4toms? Du pupst den ganzen Tag hier schon rum... wirft ein komisches Licht auf dich :(
(Sorry für ot, lag mich aber am Herzen.)

4toms 15. Feb 2005 19:03

Re: LuckieDIPS
 
Zitat:

Zitat von dizzy
Was soll das 4toms? Du pupst den ganzen Tag hier schon rum... wirft ein komisches Licht auf dich :(
(Sorry für ot, lag mich aber am Herzen.)

Tschulligung. Kann ich DICH irgendwie per Rezept für mich bekommen?
Absolut kritikresistente Fans hätte ich auch ganz gerne!

Edit: Werde in LuckieDIPS nicht mehr schreiben. Danke.

NicoDE 15. Feb 2005 19:09

Re: LuckieDIPS
 
Zitat:

Zitat von 4toms
Absolut kritikresistente Fans hätte ich auch ganz gerne!

Könnt Ihr das bitte mittels Privater Nachrichten klären, danke.

Brüggendiek 17. Feb 2005 21:11

Re: LuckieDIPS
 
Hallo Michael!

Heute habe ich mir Dein Programm runtergeladen und bin arg enttäuscht!

Zitat:

Zitat von Luckie
Und wieder eine neue Version. Dank eines Wrappers von NicoDE wird jetzt auch Windows98 unterstützt.

1. Wieso bekomme ich da unter Win98 und Win98SE die Meldung, daß NT nötig wäre :gruebel:

Mal sehen, vielleicht komme ich in den nächsten Tagen dazu, das Ganze in D5Standard mal zu debuggen.


2. Unter XP Home konnte die Datei nicht gespeichert werden - aber der Ordner wurde angelegt!

Ist ja auch klar, Du hast ja sinngemäß programmiert:
Delphi-Quellcode:
if FileDelete(dateinamen) then
  speichern else
  fehlermeldung;
Wenn die Datei nicht existiert, kann sie auch nicht gelöscht werden :wall:
Nach dem Kopieren der Ini aus dem Source-Ordner klappte es dann - aber nach dem Anklicken des Löschbuttons war (logischerweise) das Problem wieder da.

Irgendwas ist das doch wohl schiefgelaufen - Löschen nur, wenn Datei vorhanden, speichern wenn keine Datei oder Löschen erfolgreich wäre die richtige Vorgehensweise. Ob die Datei existiert, prüfts Du doch ab und schaltest die Buttons entsprechend frei!
Der übliche Fehler - man hat selber die Datei schon auf der Platte und vergißt den Test auf einem frischen System.

Gruß

Dietmar Brüggendiek

NicoDE 17. Feb 2005 21:30

Re: LuckieDIPS
 
3. (Win64) Ein 64-Bit Shell-Prozess liefert die Item-Texte nicht da der Zeiger für den Puffer nil ist (wird in der Debug-Version abgefangen und Explorer ignoriert die Nachricht).

Gruß Nico

NicoDE 18. Feb 2005 13:52

Re: LuckieDIPS
 
Zitat:

Zitat von Luckie
Nein noch nicht. Nico will sich das wohl mal angucken.

Folgender Code dürfte das Problem mit dem 'Active Desktop' lösen...
Delphi-Quellcode:
function IsActiveDesktopActive: Boolean;
var
  Progman: HWND;
  DefView: HWND;
begin
  Result := False;
  Progman := FindWindow('Progman', nil);
  if Progman <> HWND(nil) then
  begin
    DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil);
    if DefView <> HWND(nil) then
      Result := FindWindowEx(DefView, HWND(nil), 'HTML_Internet Explorer', nil)
        <> HWND(nil);
  end;
end;

function GetDesktopListView: HWND;
var
  Progman: HWND;
  DefView: HWND;
  function EnumDefViewProc(Wnd: HWND; out DefView: HWND): BOOL; stdcall;
  var
    ClassName: array [0..255] of Char;
  begin
    DefView := Wnd;
    ClassName[0] := #0;
    GetClassName(Wnd, ClassName, 255);
    Result := StrComp(ClassName, 'SHELLDLL_DefView') <> 0;
  end;
begin
  Result := HWND(nil);
  Progman := FindWindow('Progman', nil);
  if Progman <> HWND(nil) then
  begin
    DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil);
    if DefView <> HWND(nil) then
    begin
      if IsActiveDesktopActive then
        EnumChildWindows(DefView, @EnumDefViewProc, LPARAM(@DefView));
      Result := FindWindowEx(DefView, HWND(nil), 'SysListView32', nil);
    end;
  end;
  if Result = HWND(nil) then
    MessageBox(HWND(nil), PChar(ERROR_GETDESKTOPHANDLE), APPNAME, MB_ICONERROR);
end;

Gruss Nico

Luckie 18. Feb 2005 15:04

Re: LuckieDIPS
 
Zitat:

Zitat von Brüggendiek
1. Wieso bekomme ich da unter Win98 und Win98SE die Meldung, daß NT nötig wäre :gruebel:

Ups, da ist wohl noch die Sicherheitsabfrage drinne, weil es früher nur untzer NT und höher ging.

Zitat:

2. Unter XP Home konnte die Datei nicht gespeichert werden - aber der Ordner wurde angelegt!

Ist ja auch klar, Du hast ja sinngemäß programmiert:
Delphi-Quellcode:
if FileDelete(dateinamen) then
  speichern else
  fehlermeldung;
Wenn die Datei nicht existiert, kann sie auch nicht gelöscht werden :wall:
Nach dem Kopieren der Ini aus dem Source-Ordner klappte es dann - aber nach dem Anklicken des Löschbuttons war (logischerweise) das Problem wieder da.

Irgendwas ist das doch wohl schiefgelaufen - Löschen nur, wenn Datei vorhanden, speichern wenn keine Datei oder Löschen erfolgreich wäre die richtige Vorgehensweise. Ob die Datei existiert, prüfts Du doch ab und schaltest die Buttons entsprechend frei!
Der übliche Fehler - man hat selber die Datei schon auf der Platte und vergißt den Test auf einem frischen System.
Äh ja. Werde ich mir noch mal angucken müssen. Danke für die Infos.

Nachtrag: Sollte alles erledigt sein. Guckt jetzt bitte noch mal, ob richtig gespeichert wird und ob jetzt auch der Active Desktop unterstützt wird.

Download Links hier im letzten Posting oder gleich im ersten.

NicoDE 18. Feb 2005 15:41

Re: LuckieDIPS
 
Wenn wir schon dabei sind, 64-Bit Support...

GetDesktopIconInfo()
Delphi-Quellcode:
const
  ItemBufferBlockSize = $1000;

type
  PLvItemBuffer = ^TLvItemBuffer;
  TLvItemBuffer = packed record
    case Integer of
      0: (
        LvItem32: packed record
          mask     : LongWord;
          iItem    : LongInt;
          iSubItem : LongInt;
          state    : LongWord;
          stateMask : LongWord;
          pszText  : LongWord;
          cchTextMax: LongInt;
          iImage   : LongInt;
          lParam   : LongWord;
          iIndent  : LongInt;
          iGroupId : LongInt;
          cColumns : LongWord;
          puColumns : LongWord
        end);
      1: (
        LvItem64: packed record
          mask     : LongWord;
          iItem    : LongInt;
          iSubItem : LongInt;
          state    : LongWord;
          stateMask : LongWord;
          _align1   : LongWord;
          pszText  : Int64;
          cchTextMax: LongInt;
          iImage   : LongInt;
          lParam   : Int64;
          iIndent  : LongInt;
          iGroupId : LongInt;
          cColumns : LongWord;
          _align2   : LongWord;
          puColumns : Int64;
        end);
      2: (LvItemBuff: array [0..ItemBufferBlockSize - 1] of Byte;
    case Integer of
      0: (AnsiText: array [0..ItemBufferBlockSize - 1] of AnsiChar);
      1: (WideText: array [0..ItemBufferBlockSize div 2 - 1] of WideChar);
      2: (ItemText: array [0..ItemBufferBlockSize div SizeOf(Char)-1] of Char));
  end;

type
  TFNIsWow64Process = function(hProcess: THandle; out Wow64Process: BOOL): BOOL;
    stdcall;

var
  FNIsWow64Process: TFNIsWow64Process;

function IsWow64Process(hProcess: THandle): Boolean;
var
  Wow64Process: BOOL;
begin
  if not Assigned(FNIsWow64Process) then
    FNIsWow64Process := TFNIsWow64Process(
      GetProcAddress(GetModuleHandle(kernel32), 'IsWow64Process'));
  if not Assigned(FNIsWow64Process) then
    Result := False
  else
    Result := FNIsWow64Process(hProcess, Wow64Process) and Wow64Process;
end;

function GetDesktopIconInfo: TDesktopIconInfoArray;
var
  ListView : HWND;
  ProcessId: DWORD;
  Process : THandle;
  Size    : Cardinal; // SIZE_T
  MemLocal : PLvItemBuffer;
  MemRemote: PLvItemBuffer;
  NumBytes : Cardinal; // SIZE_T
  IconCount: DWORD;
  IconIndex: Integer;
  IconLabel: string;
  IconPos : TPoint;
  DesktopIconInfoArray: TDesktopIconInfoArray;
begin
  // Fensterhandle des Desktop-ListView ermitteln und Prozess oeffnen
  ListView := GetDesktopListView;
  ProcessId := 0;
  GetWindowThreadProcessId(ListView, @ProcessId);
  Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
    PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);
  if Process <> 0 then
  try
    // Lokalen und entfernten (im Zielprozess) Puffer anlegen
    Size := SizeOf(TLvItemBuffer);
    MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
    MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT, PAGE_READWRITE);
    if Assigned(MemLocal) and Assigned(MemRemote) then
    try
      // Anzahl der Symbole ermitteln und in einer Schleife durchlaufen
      IconCount := SendMessage(ListView, LVM_GETITEMCOUNT, 0, 0);
      Setlength(DesktopIconInfoArray, IconCount);
      for IconIndex := 0 to IconCount - 1 do
      begin
        // Symboltext auslesen
        // (es gibt zwei identische Strukturen, jeweils eine in diesem und eine
        //  im Zielprozess. Wobei die Daten zwischen den Puffern hin und her
        //  kopiert werden muessen. Dieser Aufwand ist noetig, da LVM_GETITEM
        //  eine Struktur liest und schreibt, die sich im Adressraum des
        //  Prozesses befindet, dem das entsprechende Fenster gehoert...)
        ZeroMemory(MemLocal, SizeOf(TLvItemBuffer));
        with MemLocal^ do
          if IsWow64Process(GetCurrentProcess) and
            not IsWow64Process(Process) then
          begin
            LvItem64.mask := LVIF_TEXT;
            LvItem64.iItem := IconIndex;
            LvItem64.pszText := Cardinal(MemRemote) + ItemBufferBlockSize;
            LvItem64.cchTextMax := High(MemLocal.ItemText) + 1;
          end
          else
          begin
            LvItem32.mask := LVIF_TEXT;
            LvItem32.iItem := IconIndex;
            LvItem32.pszText := Cardinal(MemRemote) + ItemBufferBlockSize;
            LvItem32.cchTextMax := High(MemLocal.ItemText) + 1;
          end;
        NumBytes := 0;
        if WriteProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) and
          Boolean(SendMessage(ListView, LVM_GETITEM, 0, LPARAM(MemRemote))) and
          ReadProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) then
        begin
          IconLabel := string(MemLocal.ItemText);
          // Position auslesen
          // (-1, -1 ist nur ein Indiz fuer einen Fehlschlag, da diese Position
          //  natuerlich moeglich ist...)
          IconPos.X := -1;
          IconPos.Y := -1;
          if Boolean(SendMessage(ListView, LVM_GETITEMPOSITION, IconIndex,
            LPARAM(MemRemote))) and ReadProcessMemory(Process, MemRemote,
            MemLocal, Size, NumBytes) then
          begin
            IconPos := PPoint(MemLocal)^;
          end;
          // Speichern ;)
          DesktopIconInfoArray[IconIndex].Caption := IconLabel;
          DesktopIconInfoArray[IconIndex].Position.X := IconPos.X;
          DesktopIconInfoArray[IconIndex].Position.Y := IconPos.Y;
        end;
        result := DesktopIconInfoArray;
      end;
    except
      // Exceptions ignorieren
    end;
    // Aufraeumen
    if Assigned(MemRemote) then
      VirtualFreeEx(Process, MemRemote, 0, MEM_RELEASE);
    if Assigned(MemLocal) then
      VirtualFree(MemLocal, 0, MEM_RELEASE);
  finally
    CloseHandle(Process);
  end;
end;
SetDesktopIconPos()
Delphi-Quellcode:
function SetDesktopIconPos(DesktopIconInfoArray: TDesktopIconInfoArray):
  Boolean;
var
  Listview : HWND;
  ProcessId: DWORD;
  Process : THandle;
  Size    : Cardinal;
  MemLocal : PLvItemBuffer;
  MemRemote: PLvItemBuffer;
  IconCount: Integer;
  IconIndex: Integer;
  IconLabel: string;
  IconPos : TPoint;
  NumBytes : Cardinal;
  Loop    : Integer;
begin
  Result := False;
  // Kommentare siehe GetDesktopIconInfo ;o)
  ListView := GetDesktopListView();
  ProcessId := 0;
  GetWindowThreadProcessId(ListView, @ProcessId);
  Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
    PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);
  if Process <> 0 then
  try
    Size := SizeOf(TLVItemBuffer);
    MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
    MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT, PAGE_READWRITE);
    if Assigned(MemLocal) and Assigned(MemRemote) then
    try
      IconCount := SendMessage(ListView, LVM_GETITEMCOUNT, 0, 0);
      for IconIndex := 0 to IconCount - 1 do
      begin
        ZeroMemory(MemLocal, SizeOf(TLvItemBuffer));
        with MemLocal^ do
          if IsWow64Process(GetCurrentProcess) and
            not IsWow64Process(Process) then
          begin
            LvItem64.mask := LVIF_TEXT;
            LvItem64.iItem := IconIndex;
            LvItem64.pszText := Cardinal(MemRemote) + ItemBufferBlockSize;
            LvItem64.cchTextMax := High(MemLocal.ItemText) + 1;
          end
          else
          begin
            LvItem32.mask := LVIF_TEXT;
            LvItem32.iItem := IconIndex;
            LvItem32.pszText := Cardinal(MemRemote) + ItemBufferBlockSize;
            LvItem32.cchTextMax := High(MemLocal.ItemText) + 1;
          end;
        NumBytes := 0;
        if WriteProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) and
          Boolean(SendMessage(ListView, LVM_GETITEM, 0, LPARAM(MemRemote))) and
          ReadProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) then
        begin
          IconLabel := string(MemLocal.ItemText);
          for Loop := 0 to Length(DesktopIconInfoArray) - 1 do
          begin
            if DesktopIconInfoArray[Loop].Caption = IconLabel then
            begin
              IconPos.X := DesktopIconInfoArray[IconIndex].Position.X;
              IconPos.Y := DesktopIconInfoArray[IconIndex].Position.Y;
              Result := BOOL(SendMessage(Listview, LVM_SETITEMPOSITION, Loop,
                MAKELPARAM(IconPos.X, IconPos.Y)));
            end;
          end;
        end;
      end;
    except
      // Exceptions ignorieren
    end;
    if Assigned(MemLocal) then
      VirtualFree(MemLocal, 0, MEM_RELEASE);
    if Assigned(MemRemote) then
      VirtualFreeEx(Process, MemRemote, 0, MEM_RELEASE);
  finally
    CloseHandle(Process);
  end;
end;
BTW, in der Schleife von GetDesktopIconInfoFromIni() sollte überprüft werden ob Length(IniSections[Loop]) > 0 ist (sonst kommt es bei einer (angeblich) leeren Section zu einer Zugriffsverletzung).


Gruss Nico

ps: für Unicode müsste man das Programm komplett umschreiben (habe Dateien mit japanischen Symbolen auf dem Desktop...) :)

Luckie 18. Feb 2005 15:52

Re: LuckieDIPS
 
Zitat:

Zitat von NicoDE
Wenn wir schon dabei sind, 64-Bit Support...

Aber nicht mehr heute. Und testen kann ich es schon mal gar nicht. Dazu bräuchte ich ein Ferrari Notebook. :mrgreen:

Zitat:

ps: für Unicode müsste man das Programm komplett umschreiben (habe Dateien mit japanischen Symbolen auf dem Desktop...)
Wir wollen aber nicht übertreiben oder? :roll:

NicoDE 18. Feb 2005 15:55

Re: LuckieDIPS
 
Zitat:

Zitat von Luckie
Und testen kann ich es schon mal gar nicht.

Ich war so frei :)

Zitat:

Zitat von Luckie
Wir wollen aber nicht übertreiben oder?

War nur nen blöder Kommentar, sorry.

edit: Mail ist raus.

Luckie 18. Feb 2005 15:56

Re: LuckieDIPS
 
Kannst du mir die dpr-Datei schicken?

Luckie 18. Feb 2005 22:50

Re: LuckieDIPS
 
So, jetzt läuft es auch unter 64-Bit Windows XP, dank Nico. :thumb:

lkz633 18. Feb 2005 23:20

Re: LuckieDIPS
 
Kannst du den neuen Quellcode mit Acticve Desktop Unterstützung hochladen?

Danke und Gruss
lkz633

Luckie 18. Feb 2005 23:51

Re: LuckieDIPS
 
Ist doch schon oben. :gruebel:

lkz633 18. Feb 2005 23:56

Re: LuckieDIPS
 
Ok, hatte die Einschränkung noch in der Readme gelesen

Zitat:

Einschränkungen : Funktioniert nicht bei aktivierten Active Desktop!
Klappt einwandfrei, danke :-)

Gruss
lkz633

Luckie 19. Feb 2005 00:02

Re: LuckieDIPS
 
Danke fürs Testen.

Luckie 14. Mai 2006 14:34

Re: LuckieDIPS
 
Es gab offensichtlich manchmal Probleme, dass die Iconpositionen beim Wiederherstellen durcheinander gewürfelt wurden. IOch hoffe das habe ich in Version 2.1 gefixet bekommen. Download im ersten Beitrag.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.
Seite 1 von 3  1 23      

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