Abou Chleih

{the magic lies between the brackets}

Menü Schließen

Schlagwort: Windows

Windows 10 – DVD Laufwerk wird nicht erkannt

Eigentlich braucht man – oder zumindest ich – kein DVD Laufwerk mehr. Da ich aber noch eines in einer verstaubten Schachtel fand und es nicht entsorgen wollte, ist es direkt in meinen PC gewandert.
Leider wurde das Gerät nicht von Windows erkannt.
„Alles klar“, dachte ich. Führe ich eben im Geräte-Manager eine manuelle Suche durch. Gesagt, getan – keine Änderung.
Anschließend überprüfte ich alle Kabel und Anschlüsse. Auch hier war es korrekt angeschlossen, ebenso wird es im UEFI System Browser meines Motherboards erkannt.

Das Problem liegt also bei Windows. Und da es schon einige Personen mit ähnlichen Problemen gibt, dachte sich Microsoft wohl, dass ein Support Eintrag angebracht ist.

Diesen arbeitete ich ab, jedoch funktionierte bei mir nur Resolution 5 des Eintrags.

Also wie löste ich das Problem? 

Wir gehen in die Registry per Registry Editor (Win+R und regedit) und navigieren zum Pfad HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi.
Hier erstellen wir einen neuen Schlüssel (Ordner) Controller0 (ist eine Null) per Rechtsklick auf den Schlüssel atapi.
Anschließend navigieren wir in den Schlüssel und erstellen dort ein DWort mit 32-bit Länge:
Name: EnumDevice1
Wert: 1

Schlussendlich starten wir den Rechner einmal neu, das Laufwerk wird dann ordnungsgemäß erkannt.

Lumia Cyan Update (Windows Phone 8.1) auf dem Lumia 520 installieren

Vor einigen Tagen wurde der Status des Cyan Updates für das Lumia 520 auf der Nokia Seite auf „Avaliable“ geändert und sollte somit den Nutzern zur Verfügung stehen.
Die bisherigen Updates, auch die der Developer Preview wurden über das Windows Phone eigene Updatemenü installiert.
Allerdings fand das Lumia dieses Cyan Update einfach nicht – zumindest nicht als OTA.
Im Netz ist dieses Problem kaum beschrieben. Da aber die Versionen in Mitteleuropa alle die gleichen sind und das Update in anderen Ländern wohl ohne Probleme ausgerollt wurde, muss es entweder etwas mit dem deutschen Server zu tun haben, oder mit meinem Smartphone.
Wie bekomme ich also das Update auf mein Lumia?
Microsoft hat das sogenannte Nokia Software Recovery Tool still und heimlich veröffentlicht.
Mit diesem Tool kann man das Update dann aufspielen, aber ACHTUNG! Es werden alle Daten auf dem Gerät gelöscht. Deshalb vorher ein Backup über die Windows Phone eigene Backup-Funktion ausführen. Dieses kann man dann nach der Installation einspielen.
1. Nokia Software Recovery Tool (NSRT) herunterladen und installieren.
2. Lumia 520 mit dem Rechner über ein microUSB Kabel verbinden
3. Das NSRT starten, es erkennt dann automatisch das angeschlossene Gerät und sucht das aktuellste Update für dieses.

Nokia Software Recovery Tool Update found
4. Das Gerät muss  über mindestens 1,7GB freien Speicher verfügen (lokal, nicht auf der SD Karte)

Anschließend einfach den Anweisungen folgen. Das Update ist 1,56GB groß, d.h. der Download kann je nach Downloadgeschwindigkeit dauern.

Danach kann man das Handy neu einrichten, solltet ihr das Backup getätigt haben, so wird euch dieses bei der Ersteinrichtung angezeigt und ihr könnt es zurückspielen.

Das war’s, nun habt ihr das Lumia Cyan Update auf eurem Lumia 520.

Lumia_Cyan_520

[C#/.NET] Eigene Erweiterungen für den Windows Explorer mit SharpShell erstellen

In meinem letzten Beitrag habe ich beschrieben, wie man mit Hilfe einer Microsoft Library eigene Dateiattribute hinzufügen kann.
Auf Grund der Tatsache, dass der Windows Explorer nur die Standardattribute anzeigt (siehe Grafik), müssen wir zur Anzeige der eigenen Attribute entweder

  • ein eigenes Programm entwickeln (Handhabe umständlich)
    oder
  • eine Erweiterung für den Windows Explorer erstellen.

Standardattribute:
Standardattribute_Details

Und um letzteren Punkt handelt dieser Beitrag.

Achtung: Die Library verwendet .NET Framework 4, d.h. eine Erstellung ist nur mit dieser .NET Version möglich und einer IDE, welche diese unterstüzt (VS2010 und höher)

Um zu beginnen, benötigen wir die Library, mit welcher eine Extension erstellt werden kann. Diese findet ihr entweder auf unserer Downloadseite (SharpShell Project) oder auf der Projektpage.

Wir erstellen nun ein neues Projekt vom Typ „Windows Forms-Steuerelementenbibliothek“ (man kann auch einfach eine Klassenbibliothek erstellen) und fügen eine Referenz auf die DLL ein.

Rechtsklick auf das Projekt -> Verweis hinzufügen… ->Durchsuchen -> Durchsuchen -> Datei auswählen.

Nun können wir mit dem eigentlichen Coden beginnen.
SharpShell bietet einige Extensions an, unter Anderem sogenannte Shell Property Sheets/Pages (Erweiterung der Eigenschaftsseite einer Datei/eines Ordners), auf die wir hier näher eingehen.

Zuerst beginnen wir mit dem Sheet, welches alle Pages hält.
Wir erstellen also eine Klasse (ich nenne sie hier einfach mal Sheet) und lassen sie von der abstrakten SharpPropertySheet-Klasse erben. Diese Klasse hält alle nötigen Funktion, welche noch ausgecodet werden müssen.
Die Methoden sind die folgenden:

protected abstract bool CanShowSheet();
protected abstract IEnumerable CreatePages();

Erstere Methode gibt an, ob die Seite angezeigt werden soll.
Letztere gibt die Pages zurück, welche angezeigt werden sollen.

protected override bool CanShowSheet()
{
            return SelectedItemPaths.Count() == 1; //Sobald mindestens eine Datei angewählt, soll die Seite angezeigt werden
}

protected override IEnumerable CreatePages()
{
            CustomPage page = new CustomPage(); //Erstelle eine Page oder mehrere
            return new[] { page }; //und schreibe sie in das Array, welches zurückgegeben wird.
} 

Nun existiert die Klasse CustomPage noch nicht, wir müssen sie erst erstellen.
Da wir ein „Windows Forms-Steuerelementenbibliothek“-Projekt erstellt haben, haben wir schon eine von der IDE vordefinierte Klasse.
Diese nutzen wir nun und benennen wir in „CustomPage“.
Anschließend lassen wir sie von der SharpPropertyPage-Klasse im Namespace „SharpShell.SharpPropertySheet erben.
In den Konstruktor der Klasse schreiben wir einfach mal den Page-Titel:

public CustomPage()
{
     InitializeComponent();
     PageTitle = "Custom Properties";      //Definiert den Page-Titel
}

Diese Klasse hat einige virtual Methoden, wovon wir eine zwingend benötigen:

 public virtual void OnPageInitialised(SharpPropertySheet parent);

Diese Funktion wird aufgerufen, sobald die Seite initialisiert wurde, also ähnlich der Funktion

Form.Load();

Hier bauen wir unsere Logik ein, bspw. können wir hier eine MessageBox aufrufen, welche den Pfad der markierten Datei zurückgibt, bzw. den Pfad der ersten markierten Datei.

    MessageBox.Show(parent.SelectedItemPaths.First().ToString()); 

Oder wir können die CustomProperties, welche wir gesetzt haben auslesen.
Dazu einfach die DSO-Library einbinden und die CustomProperties auslesen.
Ich habe dazu eine ListView eingebettet und fülle diese mit dem Key Bezeichner und dem Wert des Properties:

 public override void OnPageInitialised(SharpPropertySheet parent)
        {
            filePath = parent.SelectedItemPaths.First(); //Pfad der Datei speichern
            OleDocumentProperties myFile = new DSOFile.OleDocumentProperties();
            myFile.Open(@filePath, false, DSOFile.dsoFileOpenOptions.dsoOptionDefault);
            int ctr = 1;
            foreach (DSOFile.CustomProperty property in myFile.CustomProperties)
            {
                ListViewItem key = new ListViewItem(property.Name);
                key.SubItems.Add(property.get_Value());
                lstVw_keys.Items.Add(key);
                ctr++;
            }
            myFile.Close(true);
        } 

Voila, schon ist man eigentlich fertig.
Nun müssen wir allerdings noch ein paar Parameter definieren.
Wir gehen zurück in die Sheet-Klasse und definieren einmal, wie die Clients mit dem verwalteten Code umgehen:

     [ComVisible(true)] 

Nun müssen wir noch definieren, welche Dateien überhaupt betroffen sind:

 [COMServerAssociation(AssociationType.ClassOfExtension,".txt",".css",".js")] 

In diesem Fall also Dateien mit den Endungen .txt, .css und .js.

Jetzt können wir die DLL compilen und schließlich per regAsm einbinden (sehr kompliziert und nervenaufreibend).
Alternativ kann man auch den ServerManager, welcher Teil der SharpShell-Tools ist, benutzen.
Ich zitiere hier jetzt einfach mal meinen Stackoverflow-Beitrag:

I had the same problem while using regasm.exe.
Furthermore there are many things to mention when registering an assembly through regasm.
For example you have to use the x64/x86 version of the regasm.exe, depending on your system.

x64: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regAsm.exe
x86: C:\Windows\Microsoft.NET\Framework\v4.0.30319\regAsm.exe
After having so many problems, I switched to the ServerManager.exe, which is part of the SharpShell Tools. It can be downloaded on the project page.
The usage is quite easy:

  • Load the DLL with „Load server…“
  • Click on „Install Server (xYZ)“
  • And after that on „Register Server (xYZ)“

Restart the Windows Explorer and you should be done (not necessarily needed).

Das Ergebnis sieht in etwa so aus:

CustomPropertiesTab_Pic

Nun seid ihr fertig und könnt eure CustomProperties beliebig hinzufügen, löschen und anzeigen lassen.

Ein Beispielprojekt findet ihr hier: CustomPropertyTab

© 2018 Abou Chleih. Alle Rechte vorbehalten.

Thema von Anders Norén.