Desktop Pinner v6.8.2

    • Release

    Es gibt 61 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

      Desktop Pinner v6.8.2

      Name des Programms:
      Desktop Pinner v6.8.2

      Kurze Beschreibung:
      Mit dem Programm können Dateien und Ordner am linken Bildschirmrand angepinnt werden.
      Es bleibt ein 1 Pixel breiter Streifen am linken Bildschirmrand sichtbar, auf den man klicken kann, um das Fenster anzuzeigen. Die Fenster werden mit der API SetWindowPos() immer im Vordergrund gehalten. Das Design ist an Metro angelehnt. Zu Details zu den Farbschemen siehe Punkt "Farbschemen".
      Die Bedienung sollte größtenteils recht intuitiv sein. Mit dem Mausrad kann man scrollen. Mit der rechten Maustaste können angepinnte Objekte markiert werden. Einträge können per Drag&Drop hinzugefügt werden. Der markierte Eintrag kann mit dem Mausrad oder den Hoch- und Runter-Buttons verschoben werden und ist an das Hinzufügen-Fenster gebunden, womit die Einträge auch bearbeitet werden können.
      Das Hinzufügen von Verknüpfungen ist etwas komplizierter, als das Hinzufügen einer Datei. Da der OpenFileDialog nicht die .lnk-Datei selbst, sondern die verknüpfte Datei bzw. den verknüpften Ordner auswählt, muss man sich ein Workaround überlegen. Im Hinzufügen-Fenster im Unterpunkt "Verknüpfung" kann man Verknüpfungen einfügen.
      Dateien und Ordner können per Drag&Drop hinzugefügt werden.

      Screenshots:


      Farbschemen:
      Das Farbschema der Anwendung kann angepasst werden.
      Dazu muss im Einstellungsmenü (unterster Button) auf "Farbschema wählen" geklickt werden. Es öffnet sich dieses Fenster (hier mit unterschiedlichen Auswahlen dargestellt):

      • Unter "Vordefinierte Farbschemen" werden die von mir erstellten Farbschemen aufgelistet. Diese sind Desktop Farbe, Grün, Dunkelgrün, Rot, Dunkelrot, Violett, Blau und Dunkelblau.
        Wird "Desktop Farbe" ausgewählt, passt sich das Farbschema automatisch an der in Windows ausgewählten Aero-Schema-Farbe an.
      • Unter "Eigene Farbschemen" werden die Farbschemen aufgelistet, die sich im Ordner "Presets" im Programmordner befinden.
        Eigene Farbschemen können in Form einer Assembly (dll oder exe) oder in Form einer Textdatei (txt oder ini) hinterlegt werden. (Für aktuelle Details zu Farbschemen in Textform siehe Post #23.)
        Handelt es sich um eine Assembly, wird vor dem Doppelpunkt der Dateiname und dahinter der Name des Farbschemas angezeigt.
        Handelt es sich um eine Textdatei, wird nur der Name des Farbschemas angezeigt.
        Für Details siehe Expander "Benutzerdefinierte Farbschemen".
      • Unter "Aus Basisfarbe" können die RGB-Werte für eine Basisfarbe eingestellt werden. Die anderen Farben werden aus der Basisfarbe errechnet.
      Benutzerdefinierte Farbschemen

      Farbschemen werden in Form von PlugIn-Dlls oder in Form von Textdateien angegeben.
      Eine Dll kann mehrere Farbschemen enthalten.
      Ein Farbschema besteht aus folgenden Eigenschaften:
      • BackGroundColor (Color)
        Gibt die Hintergrundfarbe für Fenster an.
        Meist BaseColor, aber dunkler.
      • BaseColor (Color)
        Gibt die Hauptfarbe an, die für Controls verwendet wird.
      • FontColor (Color)
        Gibt die Farbe für allgemeinen Text, für Symbole und für einige UI-Elemente wie z.B. ScrollBars oder Highlightings an Buttons an.
        Meist weiß.
      • AccentColor (Color)
        Gibt die Akzentfarbe für hervorgehobene Inhalte und Überschriften an.
        Meist BaseColor, aber intensiver.
      • DisabledColor (Color)
        Gibt eine Farbe an, die darstellen soll, dass ein Objekt deaktiviert ist.
        Meist ein Grauton.
      • ButtonGradientWidth (Double)
        Gibt die Breite für Farbverläufe bei Buttons an.
        Gültig von -1 bis 1.
        Bei 0 wird genau die Farbe "BaseColor" verwendet.
        Bei 1 wird der gesamte Helligkeits-Bereich der Farbe in HSB verwendet.
        Bei -1 wird der Helligkeitsbereich umgekehrt.
        Der Standardwert für alle vordefinierten Farbschemen ist 0.08.
      • ButtonMouseDownGradientOffset (Double)
        Gibt an, um welchen Prozentsatz die Helligkeiten der Verlauffarben verändert werden.
        Gültig von -1 bis 1.
        Ein Positiver Wert bedeutet, dass die Helligkeit erhöht wird. Ein negativer Wert bedutet, dass die Helligkeit verringert wird.
        Der Standardwert für alle vordefinierten Farbschemen ist 0.08.
      • PresetName (String)
        Gibt den Namen des Farbschemas an.
      Benutzerdefiniertes Farbschema erstellen:
      Assembly:
      • Im VisualStudio eine neue Projekt vom Typ Klassenbibliothek erstellen.
      • Einen Verweis auf MetroScheme.dll hinzufügen.
      • Die Vorhandene Klasse Class1 umbenennen.
        Das ist nicht der sichtbare Name des Farbschemas. Theoretisch könnte die Klasse auch BundesKanzlerinAngelaMerkel heißen, aber es empfiehlt sich, die Klasse sinnvoll zu benennen.
      • Die Klasse von MetroScheme.CustomPreset erben lassen.
        MetroScheme.ColorScheme kann nicht verwendet werden, da die CustomPreset-Klasse eine zusätzliche Funktion implementiert. Darüberhinaus gibt es sowieso eine Friend MustOverride -Eigenschaft, die außerhalb der ursprünglichen Assembly nicht überschrieben werden kann.
      • Normalerweise werden die zu überschreibenden Member von VisualStudio automatisch eingefügt. Sollte das nicht der Fall sein, müssen die oben aufgezählten Eigenschaften überschrieben werden.
      • Die entsprechenden Werte zurückgeben.
        Anmerkung zur PresetName-Eigenschaft: Das ist der sichtbare Name.
      • Das Projekt kompilieren.
      • Die erstellte Assembly (ohne die MetroScheme.dll) in den Ordner "Presets" im Programmordner kopieren.
        Falls dieser Ordner nicht existiert, diesen erstellen (oder das Programm einmal ausführen).
      • Das Programm ausführen, falls es noch nicht ausgeführt wird.
      • Im Einstellungsmenü auf "Farbschema wählen" klicken und die Option "Eigene Farbschemen" auswählen.
      • Das Farbschema suchen und anklicken.
      Textdatei:
      (Für aktuelle Details zu Farbschemen in Textform siehe Post #23.)

      Codebeispiel für das Farbschema Dunkelgrün
      (Dieser Expander sollte eigentlich innerhalb des vorherigen Expanders sein, es ist aber nicht möglich, Expander zu schachteln.)

      VB.NET-Quellcode

      1. Public Class DarkGreen
      2. Inherits MetroScheme.CustomPreset
      3. Public Overrides ReadOnly Property BackGroundColor As System.Drawing.Color
      4. Get
      5. Return Color.FromArgb(0, 62, 0)
      6. End Get
      7. End Property
      8. Public Overrides ReadOnly Property BaseColor As System.Drawing.Color
      9. Get
      10. Return Color.FromArgb(0, 83, 0)
      11. End Get
      12. End Property
      13. Public Overrides ReadOnly Property FontColor As System.Drawing.Color
      14. Get
      15. Return Color.FromArgb(255, 255, 255)
      16. End Get
      17. End Property
      18. Public Overrides ReadOnly Property AccentColor As System.Drawing.Color
      19. Get
      20. Return Color.FromArgb(20, 160, 0)
      21. End Get
      22. End Property
      23. Public Overrides ReadOnly Property DisabledColor As System.Drawing.Color
      24. Get
      25. Return Color.FromArgb(128, 128, 128)
      26. End Get
      27. End Property
      28. Public Overrides ReadOnly Property ButtonGradientWidth As Double
      29. Get
      30. Return -0.07
      31. End Get
      32. End Property
      33. Public Overrides ReadOnly Property ButtonMouseDownGradientOffset As Double
      34. Get
      35. Return 0.08
      36. End Get
      37. End Property
      38. Public Overrides ReadOnly Property PresetName As String
      39. Get
      40. Return "Dunkelgrün"
      41. End Get
      42. End Property
      43. End Class

      Verwendete Programmiersprache und IDE:
      Visual Basic .Net (Visual Studio 2010 Express)

      Systemanforderungen:
      .Net Framework 4.0
      Mindestens ~630 Pixel Bildschirmhöhe.

      Vom Programm erstellte Dateien/Ordner:
      %Appdata%\Local\Desktop Pinner v6\Settings.ini
      %Appdata%\Local\Desktop Pinner v6\Tree.ini
      (Programmordner)\Presets\
      Registrywert: HKEY_LOCAL_USER\Software\Microsoft\Windows\CurrentVersion\Run\Desktop Pinner v6

      Bekannte Bugs:
      • An der Grenze zwischen zwei Controls wird die Hintergrundanimation etwas verschoben. Daran kann ich nicht wirklich was ändern.
      ToDo-Liste:
      • (Erledigt) Benutzerdefinierte Farbschemen nicht über die PresetName-Eigenschaft, sondern über den Klassennamen identifizieren. Dadurch werden die Einschränkungen für den Namen aufgehoben.
      • (Erledigt) Benutzerdefinierte Farbschemen auch in Form einer Textdatei hinterlegbar machen.
      • (Erledigt) Eventuell Farbschema aus einer einzigen Grundfarbe erstellen lassen.
      • (Erledigt) Aktuelle Fensterfarbe von Windows automatisch auslesen und anwenden.
      • (Erledigt) Autostart-Eintrag erstellen lassen.
      • (Erledigt) Objekte per Drag-Drop hinzufügen
      • (Erledigt) Einstellungen-Zurücksetzen-Button einbauen.
      • Hilfsprogramm zum einfachen Erstellen von Farbschemen erstellen.
      • Hintergrundanimation anpassbar machen.
      • (Eventuell) Forms langsam einblenden lassen. Das ist problematisch, weil der Streifen ganz links mit verschwindet, wenn die Opacity-Eigenschaft der Form gegen 0 geht. Ein Workaround hätte ich im Kopf. Mal sehen, das hat erst mal eine niedrige Priorität.
      Download:
      Desktop Pinner v6.8.2.zip (146KB gepackt, 368KB entpackt)
      MetroScheme v2.xml (für die Weiterverwendung) (61,4KB)

      Erklärung zu den Dateien:
      Dateien von mir:
      • Desktop Pinner v6.exe: Hauptprogramm.
      • DPElevatedServices.exe: Ein Programm, das beim Starten Administratorberechtigungen anfordert. Es wird gestartet, wenn der Benutzer nicht ausreichende Rechte hat, um den Autostart-Registrywert zu erstellen/löschen bzw. den Presets-Ordner zu erstellen.
      • MetroScheme v2.dll: Enthält Metro-Controls mit der Farbschemenunterstützung und einige Helfer.
      • MetroScheme v2.xml: Enthält die XML-Dokumentation der MetroScheme v2.dll. Dadurch werden in Visual Studio in Intellisense die Informationen zu Klassen/Methoden/etc. angezeigt.
      • VistaFBD.dll: Enthält einen FolderBrowserDialog, der so aussieht wie der SaveFileDialog. Der normale FolderBrowserDialog sieht nämlich nicht schön aus und ist unintuitiv.
      • AssemblyPresetCompiler.dll: Enthält Methoden zum kompilieren von Farbschemen zu Dlls und zum Laden selbiger.
      Dateien von Alex-Digital:
      • Interfaces.dll: Enthält die Interfaces, die für die Controller für Presets nötig sind. Eine Datei, die im Moment noch nicht vorhanden ist (Zuständig für das Laden von Presets in TextForm. Siehe Post #23 für Details.) wird als PlugIn behandelt und benötigt eine externe Assembly mit den Iterface-Deklarationen
      Lizenz/Weitergabe:
      Für meine Dateien gilt:
      Das Programm darf beliebig weitergegeben werden, solange dafür keine Gegenleistung verlangt wird.
      Dekompilieren erlaubt, ich beantworte Fragen zum Code aber auch gerne so.
      Verwenden in anderen Programmen bzw. einkompilieren erlaubt, es wäre aber nett, wenn man mich informieren würde, damit ich bescheid weiß.
      Für Dateien von Alex-Digital gilt:
      Die Dateien dürfen nicht-kommerziell verwendet werden. Einkompilieren ist erlaubt.
      Dekompilieren ist nicht erlaubt.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils

      Dieser Beitrag wurde bereits 24 mal editiert, zuletzt von „Niko Ortner“ ()

      So. Die Farbschemen sind jetzt implementiert.
      Ich werde noch einbauen, dass man Farbschemen in Form von Textdateien hinterlegen kann. Und ich werde ein Assistentsprogramm erstellen, das den Vorgang erleichtert.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Ein paar behobene Bugs, die mit dem Binden von existierenden Einträgen an den Hinzufügen-Dialog zu tun haben.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Ich habe einige Bugs behoben (darunter auch das fehlerhafte Verhalten von Buttons, die Dialoge öffnen).
      Weiters habe ich die Controls in die "MetroScheme v2.dll" ausgelagert und vollständig dokumentiert, was das Weiterverwenden erleichtern sollte.
      Farbschemen sind jetzt in Form einer Textdatei hinterlegbar. Weiters können Farbschemen aus einer Basisfarbe errechnet werden.
      Das vordefinierte Farbschema "Desktop Farbe" liest die aktuelle Fensterfarbe des Aero-Desktops aus. Das ist allerdings über einen Timer gelöst (prüft im Sekundentakt auf eine Veränderung), da es keine Benachrichtigung gibt, wenn z.B. bei Windows 8 das Hintergrundbild (und damit die Fensterfarbe) über die Diashow geändert wird. Weiters habe ich das nur auf Windows 8 64Bit getestet. Es kann sein, dass es bei anderen Windows-Versionen zu Fehlern kommt (speziell bei älteren).
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Hi,

      das Programm läuft bei mir nicht.
      Ich glaube er will eine presets Datei im Programmordner schreiben.
      Da rum pfuschen dürfen jedoch nur Administratoren. Dort die Presets-Datei abzulegen ist denke ich, etwas ungünstig.

      Dann wäre es vielleicht ganz schön nen Updater zu verwenden (weiß nicht ob es schon einen gibt, da ich es nicht starten kann).
      Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
      Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
      Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
      ... Nun solltest es selber wissen. :'D
      @MemoAnMichSelbst:
      Presets werden keine geschrieben. Es wird der Presets-Ordner erstellt, wenn er nicht existiert. Erstelle ihn mal selbst (der Name ist "Presets") und prüfe, ob das das Problem behebt. Hast Du nebenbei einen StackTrace? Oder schmiert das Programm direkt mit "Desktop Pinner v6.exe funktioniert nicht mehr" ab?

      Updater gibt's keinen. Ich hätte auch nicht vor, einen zu verwenden, da mir das zu kompliziert ist und ich die Dateien irgendwo auf einem Server hinterlegen müsste. Aber von Update zu Update sind nur die "Desktop Pinner v*.exe" und die "MetroScheme v*.dll" auszutauschen (und eventuell die Presets-Assemblies). Die Settings.ini und die Tree.ini bleiben gleich.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Hi,

      du hast recht, er will nen Ordner erstellen.
      Hierbei wär es dann aber sinnvoll zu prüfen ob er dafür die Rechte hat und ggf. Admin-Rechte für den Vorgang einzufordern.

      Achtung Stacktrace:
      Informationen über das Aufrufen von JIT-Debuggen
      anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

      Spoiler anzeigen
      ************** Ausnahmetext **************
      System.UnauthorizedAccessException: Der Zugriff auf den Pfad "C:\Program Files (x86)\Desktop Pinner\Presets" wurde verweigert.
      bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
      bei System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
      bei System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
      bei System.IO.Directory.CreateDirectory(String path)
      bei Desktop_Pinner_v6.Form_Main.LoadSettings()
      bei Desktop_Pinner_v6.Form_Main.OnLoad(EventArgs e)
      bei System.Windows.Forms.Form.OnCreateControl()
      bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
      bei System.Windows.Forms.Control.CreateControl()
      bei System.Windows.Forms.Control.WmShowWindow(Message& m)
      bei System.Windows.Forms.Control.WndProc(Message& m)
      bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
      bei System.Windows.Forms.Form.WmShowWindow(Message& m)
      bei System.Windows.Forms.Form.WndProc(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


      ************** Geladene Assemblys **************
      mscorlib
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18034 built by: FX45RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
      ----------------------------------------
      Desktop Pinner v6
      Assembly-Version: 1.0.0.0.
      Win32-Version: 1.0.0.0.
      CodeBase: file:///C:/Program%20Files%20(x86)/Desktop%20Pinner/Desktop%20Pinner%20v6.exe.
      ----------------------------------------
      Microsoft.VisualBasic
      Assembly-Version: 10.0.0.0.
      Win32-Version: 11.0.50709.17929 built by: FX45RTMREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
      ----------------------------------------
      System
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18034 built by: FX45RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
      ----------------------------------------
      System.Core
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
      ----------------------------------------
      System.Windows.Forms
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18036 built by: FX45RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
      ----------------------------------------
      System.Drawing
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18021 built by: FX45RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
      ----------------------------------------
      System.Configuration
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
      ----------------------------------------
      System.Xml
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18034 built by: FX45RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
      ----------------------------------------
      System.Runtime.Remoting
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
      ----------------------------------------
      MetroScheme v2
      Assembly-Version: 1.0.0.0.
      Win32-Version: 1.0.0.0.
      CodeBase: file:///C:/Program%20Files%20(x86)/Desktop%20Pinner/MetroScheme%20v2.DLL.
      ----------------------------------------
      mscorlib.resources
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
      ----------------------------------------
      System.Windows.Forms.resources
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
      ----------------------------------------

      ************** JIT-Debuggen **************
      Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
      Konfigurationsdatei der Anwendung oder des Computers
      (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
      Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

      Zum Beispiel:

      <configuration>
      <system.windows.forms jitDebugging="true" />
      </configuration>

      Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
      Ausnahmen an den JIT-Debugger gesendet, der auf dem
      Computer registriert ist, und nicht in diesem Dialogfeld behandelt.


      Vielleicht reicht für diese Updates ja schon eine ClickOnce Anwendung?
      Gerade für so kleine Tools benutze ich die ClickOnce-Update-Funktion ganz gern. Die funktioniert tadellos.

      Wie schaut es in Sachen Autostart aus?

      PS: Das Design ist echt fein geworden.
      Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
      Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
      Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
      ... Nun solltest es selber wissen. :'D
      @MemoAnMichSelbst:
      bei System.IO.Directory.CreateDirectory(String path)
      bei Desktop_Pinner_v6.Form_Main.LoadSettings()

      Ja, es ist der Presets-Ordner.

      Was das Erstellen des Ordners betrifft, werde ich mich nochmal umsehen.

      Zum Thema ClickOnce muss ich mich erst einlesen. Mal schauen. Aber eher nicht.

      Autostart werde ich einbauen.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Ich habe ein zusätzliches Programm hinzugefügt: DPElevatedServices.exe
      Es wird beim Erstellen des Presets-Ordners und beim Erstellen/Löschen des Registrierungswertes verwendet. Beim Start wird man von UAC aufgefordert, das Programm zuzulassen oder zu blockieren. Dem Programm werden per Befehlszeilenargumente die Befehle übergeben. Diese sind:
      SetAutostartRegValue:IsAutostartEnabled=(Boolean);Path=(String) -> Zum Schreiben und Löschen des Registrierungswertes.
      CreateDirectory:Path=(String) -> Erstellt den angegebenen Ordner. Diese Funktion wird nur beim Erstellen des Presets-Ordners verwendet.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Ich habe noch zwei kleine Bugs gefunden:
      Das Programm war keine Einzelinstanzanwendung.
      Die Pfade der Dateien wurden falsch ausgewählt. Das betrifft aber nur die Debug-Version und nicht die Release-Version.

      Ich habe jetzt Drag&Drop implementiert. Dateien und Ordner, die auf die Liste gezogen werden, werden aufgenommen. Als angezeigter Text wird bei Dateien der Dateiname ohne Erweiterung und bei Ordnern der Ordnername verwendt.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      HeyHey,

      Noch ein Fehler:
      Wenn man auf " - " klickt, ohne das Einträge vorhanden sind, dann kommt "index außerhalb des Bereichs" ;) und zwar noch von "DesktopPinner v5" :D ;) (obwohl neueste Version). (s. Anhang)
      Das passiert aber auch nur, wenn man zuvor einen Eintrag hinzugefügt hatte.
      Ansonsten Oft hilfreich ;)

      Valerian
      Bilder
      • Index_DskPin.png

        10,79 kB, 454×189, 574 mal angesehen
      @Valerian Flamm: Kannst Du die Exception bitte nochmal provozieren und den StackTrace hier posten? Ohne bin ich ziemlich aufgeschmissen.
      Komisch vor allem finde ich, dass als Programmname Desktop Pinner v5 kommt... Bist Du sicher, dass Du die richtige Version gestartet hast?
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Jip, gerne...
      Ich denke, dass wenn ich die Datei vor 10 Minuten geladen habe und diese auch "desktop Pinner v6" heißt, dass es die neueste ist ^^
      Und hier hoffentlich der gewünschte Anhang:
      Spoiler anzeigen

      Brainfuck-Quellcode

      1. Informationen über das Aufrufen von JIT-Debuggen
      2. anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
      3. ************** Ausnahmetext **************
      4. System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
      5. Parametername: index
      6. bei System.ThrowHelper.ThrowArgumentOutOfRangeException()
      7. bei System.Collections.ObjectModel.Collection`1.RemoveAt(Int32 index)
      8. bei Desktop_Pinner_v6.Form_Main.RemoveItem()
      9. bei Desktop_Pinner_v6.Form_Main._Lambda$__11(Object a0, MouseEventArgs a1)
      10. bei System.Windows.Forms.Control.OnMouseDown(MouseEventArgs e)
      11. bei MetroScheme.Controls.MetroButton.OnMouseDown(MouseEventArgs e)
      12. bei System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
      13. bei System.Windows.Forms.Control.WndProc(Message& m)
      14. bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      15. bei System.Windows.Forms.UserControl.WndProc(Message& m)
      16. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      17. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      18. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      19. ************** Geladene Assemblys **************
      20. mscorlib
      21. Assembly-Version: 4.0.0.0.
      22. Win32-Version: 4.0.30319.18033 built by: FX45RTMGDR.
      23. CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
      24. ----------------------------------------
      25. Desktop Pinner v6
      26. Assembly-Version: 1.0.0.0.
      27. Win32-Version: 1.0.0.0.
      28. CodeBase: file:///D:/Downloads/Desktop%20Pinner%20v6/Desktop%20Pinner%20v6.exe.
      29. ----------------------------------------
      30. Microsoft.VisualBasic
      31. Assembly-Version: 10.0.0.0.
      32. Win32-Version: 11.0.50709.17929 built by: FX45RTMREL.
      33. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
      34. ----------------------------------------
      35. System
      36. Assembly-Version: 4.0.0.0.
      37. Win32-Version: 4.0.30319.18033 built by: FX45RTMGDR.
      38. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
      39. ----------------------------------------
      40. System.Core
      41. Assembly-Version: 4.0.0.0.
      42. Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      43. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
      44. ----------------------------------------
      45. System.Windows.Forms
      46. Assembly-Version: 4.0.0.0.
      47. Win32-Version: 4.0.30319.18037 built by: FX45RTMGDR.
      48. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
      49. ----------------------------------------
      50. System.Drawing
      51. Assembly-Version: 4.0.0.0.
      52. Win32-Version: 4.0.30319.18022 built by: FX45RTMGDR.
      53. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
      54. ----------------------------------------
      55. System.Runtime.Remoting
      56. Assembly-Version: 4.0.0.0.
      57. Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      58. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
      59. ----------------------------------------
      60. System.Configuration
      61. Assembly-Version: 4.0.0.0.
      62. Win32-Version: 4.0.30319.17929 built by: FX45RTMREL.
      63. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
      64. ----------------------------------------
      65. System.Xml
      66. Assembly-Version: 4.0.0.0.
      67. Win32-Version: 4.0.30319.18033 built by: FX45RTMGDR.
      68. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
      69. ----------------------------------------
      70. MetroScheme v2
      71. Assembly-Version: 1.0.0.0.
      72. Win32-Version: 1.0.0.0.
      73. CodeBase: file:///D:/Downloads/Desktop%20Pinner%20v6/MetroScheme%20v2.DLL.
      74. ----------------------------------------
      75. mscorlib.resources
      76. Assembly-Version: 4.0.0.0.
      77. Win32-Version: 4.0.30319.18010 built by: FX45RTMGDR.
      78. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
      79. ----------------------------------------
      80. System.Windows.Forms.resources
      81. Assembly-Version: 4.0.0.0.
      82. Win32-Version: 4.0.30319.18010 built by: FX45RTMGDR.
      83. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
      84. ----------------------------------------
      85. ************** JIT-Debuggen **************
      86. Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
      87. Konfigurationsdatei der Anwendung oder des Computers
      88. (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
      89. Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.
      90. Zum Beispiel:
      91. <configuration>
      92. <system.windows.forms jitDebugging="true" />
      93. </configuration>
      94. Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
      95. Ausnahmen an den JIT-Debugger gesendet, der auf dem
      96. Computer registriert ist, und nicht in diesem Dialogfeld behandelt.
      Valerian :)
      @Valerian Flamm:
      Hast Du die Datei heruntergeladen, bevor der Post #12 da war? Denn ich habe den Startpost geändert und direkt danach den Post geschrieben. Es kann sein, dass Du die v6.2 erwischt hast.
      Das erklärt aber immer noch nicht das Problem, weil ich in diesem Bereich nichts geändert habe.
      Im Code sieht's so aus:

      VB.NET-Quellcode

      1. Private Sub RemoveItem() Handles MetroButton_Remove.MouseDown
      2. If Not MetroList_Items.SelectedIndex = -1 Then
      3. Dim DecrementSelection As Boolean = (MetroList_Items.SelectedIndex = MetroList_Items.CurrentContainer.Items.Count - 1)
      4. MetroList_Items.CurrentContainer.Items.RemoveAt(MetroList_Items.SelectedIndex)
      5. If DecrementSelection AndAlso MetroList_Items.SelectedIndex > 0 Then
      6. MetroList_Items.SelectedIndex -= 1
      7. End If
      8. End If
      9. End Sub

      Die Exception kann nur bei Zeile 4 auftreten ("bei System.Collections.ObjectModel.Collection`1.RemoveAt(Int32 index)"). Und diese Zeile kann nur ausgeführt werden, wenn SelectedIndex kleiner als -1 oder größer als die Auflistung - 1 ist.
      Also schaffst Du es irgendwie, den SelectedIndex aus dem gültigen Bereich zu bewegen.

      Kannst Du bitte Schritt für Schritt erklären, was Du machst. Vom Doppelklick auf die Exe bis zur Exception.
      Edit: Hat sich erledigt. Ich habe den Fehler reproduziert.
      Ich habe eine unnötige Abfrage eingebaut. Siehe Code oben, Zeile 5. Ich bin mir nicht mehr sicher, warum ich zusätzlich abfrage, ob noch Items vorhanden sind. Wenn ich drüber nachdenke, gibt's keinen Grund, diese Bedingung zu behalten. Nach ein paar Tests hat's keine Probleme mehr gegeben. Sollte jetzt also funktionieren.

      Ich lade noch die neue Datei hoch.

      Danke an Dich, für die Hilfe und für's Testen.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Niko Ortner“ ()

      Ich habe sie nach dem Post #12 so etwa um 15:55 heruntergeladen...

      ok :D Also:
      - Exe starten
      - Auf Plus klicken
      - Ohne irgendwas einzufüllen auf Hinzufügen
      - 2x auf Minus (Fehler kommt egal ob der neu-Dialog geschlossen ist oder nicht)

      Valerian :thumbup:
      @Valerian Flamm:
      (Siehe Edit von Post #16)
      Ok. Wir schwimmen auf einer Welle ;)

      Ich fange jetzt an, die Minor-Version in den Namen der Zip-Datei einzubauen. Das erleichtert das Unterscheiden.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils
      Hallo,

      das ist ein gut gelungenes Programm, besonders wenn man Windows 7 hat (wegen Metro und so),
      aber drei Sachen hätte ich noch:
      - Wenn ich aus Versehen ein Anführungszeichen gesetzt habe, kommt bei mir eine Ausnahme, dass
      es ein illegales Zeichen im Pfad gebe (in diesem Fall die Anführungszeichen). Könnte man das nicht
      mit einer List(Of Char) lösen und wenn ein illegales Zeichen vorkommt, dass es ersetzt wird?

      - Könnte man in den Einstellungen einen Zurücksetzen-Button hinzufügen und wenn man darauf
      klickt, dass alles so aussieht, als hätte man es zum ersten Mal gestartet?

      - Ist es eigentlich möglich, wenn man das Fenster sichtbar macht, dass man die Opacity von 100%
      in mittlerer Geschwindigkeit zu 0% setzt. Das wäre ja ein nettes Feature, welches man ja in den
      Settings ändern kann.

      Ansonsten funzt alles perfekt und nutze es jetzt.

      MFG

      Alex-Digital :D
      Das Framework stellt die illegalen Zeichen übrigens in Path.GetInvalidFileNameChars bzw. Path.GetInvalidPathChars bereit.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.