BigBasti's Blog About Me & my Digital Lifestyle

30Nov/090

Idee fuer ein App und deren Umsetzung

apple-iphone-sdk-beta-2Ich denke jeder Computer- oder Handybenutzer kennt folgende Situation. Man benötigt ein bestimmtes Werkzeug, in diesem Fall eine Software, mit der man eine bestimmte Tätigkeit erledigen möchte. Da das geplante Vorhaben (im Kopf) relativ einfach ist, denkt man man wird schnell eine (kostenlose) Software finden, die diesen Job erledigt.

Umso größer ist dann die Überraschung / Enttäuschung wenn man feststellt, dass es diese Software nicht gibt (oder man diese Nicht finden kann).

An dieser Stelle bin ich dann immer froh, ein Programmierer zu sein (oder sein zu wollen ;) ). Denn nun muss man selber ran und sich das Programm selber "basteln", was natürlich viele Vor- und Nachteile hat.

Zu den Vorteilen gehören natürlich, dass man die Software vom Funktionsumfang und auch vom Aussehen selber gestalten kann und an seine Bedürfnisse anpassen kann. Außerdem besteht die (geringe) Möglichkeit eine Marktlücke zu entdecken und mit der dann (eigentlich für sich selbst) geschriebenen Software Geld zu Verdienen.

Zu den Nachteilen zählen natürlich die vielen Stunden, die man benötigt um diese Software zu schreiben, zu testen und anzupassen. Bei mir stellt sich zudem noch ein Problem auf, dass die Zeit bis zur Fertigstellung enorm verlängert, nämlich, dass ich dieses Programm unterwegs benötige.

Undzwar auf meinem iPhone. Da ich bisher aber (so gut wie) garnicht in iPhone Entwicklung involviert war müsste ich eine "neue" Sprache erlernen, nämlich Objective-C.

Ich habe mich mit dieser Sprache schon einmal auseinandergesetzt, und mir die Grundlagen beigebracht. Dabei fällt einem .NET & Visual Studio Entwickler sofort die komplett anders aufgebaute IDE Namens "XCode" auf, die aus vielen kleinen Fenstern besteht (und viel Umgewöhnung braucht), dafür aber kostenlos von Apple bereitgestellt wird. Und die desweiteren durchaus verwirrende Syntax von Objective C, in der man sehr!! viele eckige und geschweifte Klammern finden wird.

Da ich dieses Programm aber doch haben möchte, und es durchaus als Spannend erachte was neues zu lernen. Werde ich mich wohl an diese große Aufgabe herantrauen und es bis zum Schluss durchziehen.

Wer weiß, vielleicht lässt sich das Ergebnis sogar verkaufen? :)

Wenn ihr ein paar Gute Tutorials kennt, könnt ihr gerne einen Link als Kommentar posten! Ein paar Nützliche Videos habe ich bereits in iTunes gefunden.

23Nov/0912

Google Wave – wer will eine Einladung haben?

Google Wave ist seit einiger Zeit gestartet und ich bin auch schon seit knapp einem Monat dabei.

google_wave_logo_final

Hauptsächlich kommt der Dienst bei mir zur Zeit in der Schule zum Einsatz, wo alle dann alles mitschreiben, was sie mitbekommen im Unterricht. Und da wir alle in einer "Klassen Wave" sind sind alle immer aktuell, auch wenn man mal krank war.

Wenn ihr euch das ganze auch mal anschauen wollt, bisher aber noch keine Einladung hattet, ist das jetzt eure Chance. Ich habe 7 Invites von Google bekommen, die ich an die Welt verteilen kann.

Wenn ihr eine wollt, schreibt hier einfach ein Kommentar mit eurer GMail EMailadresse. Die ersten 7 bekommen dann ihre Einladung. First in - first out.

UPDATE 25.11.2009: Ich habe 8 Weitere Einladungen zu vergeben. Also wer noch eine braucht, einfach Kommentar mit Email schreiben!

UPDATE: 29.11.2009: Und immernoch sind 8 Einladungen da. Wer noch eine Braucht -> Kommentar.

18Nov/090

ASP.NET: Codeändeungen während des Debugvorgangs erlauben

aspnetHeute wurde ich auf ein Problem hingewiesen, dass entsteht, wenn man Webseiten mit ASP.NET in Kombination mit einem ASP.NET Entwicklungs Webservers entwickelt.

Wenn man nämlich während des Debug Vorgangs, wenn die Applikation im "Pause"-Modus ist den Quelltext verändern will bekommt man folgende Meldung vom Visual Studio zu sehen:

Änderungen sind nicht zulässig, wenn der Debugger an einem bereits Ausgeführten Prozess
angehängt wurde oder der debuggte Code zur Build- oder Laufzeit optimiert wurde.

Dies liegt daran, dass das Projekt nicht richtig bzw. garnicht konfiguriert wurde. Um diese Funktion benutzen zu können muss man in die Projekteigenschaften wechseln, dann auf der linken Seite den Tab "Web" wählen und die CheckBox "Bearbeiten und Fortfahren aktivieren".

Nun wird das Projekt wie gewohnt debuggt. Diese Einstellung ist leider gut versteckt und ich kann auch nicht nachvollziehen, warum diese Standardmäßig deaktiviert ist.

14Nov/093

Mod_Rewrite unter Microsoft IIS nutzbar machen

iisEin Umstieg von Unix & Apache auf Windows & IIS kann ganz schön stressig sein. Da ich letzte Woche selber mit dem Blog von UNIX auf eine Windows Plattform umgestiegen bin musste ich das an meinem eigenen Leib erfahren.

Das was einem am IIS wohl am meisten fehlt ist wohl die mod_rewrite funktion, die man über die .htaccess Datei konfiguriert. Diese wird dann dementsprechend unbrauchbar.

Microsoft bietet zwar auch sowas ähnliches an, aber mich überkommt immer ein ungutes Gefühl sobald ich mit mod_rewrite auseinandersetzen muss, und da hat man natürlich noch weniger Lust das ganze umzuschreiben.

Die beste Lösung wäre da natürlich, wenn man die alten Definitionen benutzen könnte. Und das geht auch tatsächlich!

Nach etwas googeln habe ich eine schöne, kostenlose Software gefunden, die und die dafür benötigte ISAPI Erweiterung für den IIS liefert! Diese findet ihr hier:

Wenn ihr die Installation durchlaufen habt, könnt ihr schnell mal checken ob der Dienst läuft in dem Ihr auf die Eigenschaften von "Websites" im IIS klickt und dann ISAPI Filters wählt. Gegebenenfalls den IIS neustarten.

modrew1Bild 1: Aktive ISAPI Filter

Nun könnt ihr eure Definitionen über die mitgelieferte (und wie ich finde etwas eingestaubte) Software erledigen:

modrew2Bild 2: Das Tool von Helicon zum verwalten der Rewrite-Regeln

Hier (Bild 2) sehr ihr eine Globale Einstellung, die sich auf alle Sites auswirkt. Es können aber auch einzelne Regeln erstellt werden, so wie man es auch gewohnt ist! Alternativ kann man auch in dem Webseiteneigenschaften (siehe Bild 1) Direkt den Tab "ISAPI_Rewrite" wählen.

Die Software ist kostenlos und erfüllt hervorragend ihren Zweck! Ich kanns nur weiterempfehlen!

12Nov/090

Online IDE Flick macht “Visual Studio” mobil

Jeder, der mit Visual Studio schon gearbeitet hat, weiß wie mächtig diese IDE ist. Umso schlimmer ist es, wenn man unterwegs ist und schnell ein paar Änderungen an seinem Web-Projekt machen will. Denn nicht überall ist eine Visual Studio Version installiert!

Hier hat CodeRun angesetzt und eine komplette IDE entwickelt, die im Browser läuft. Diese hört auf den Namen Flick und orientiert sich stark an Visual Studio.

Wenn man die IDE aufgerufen hat und auf den "Neues Projekt"-Button geklickt hat wird man schnell sehen warum. Denn hier findet man viele Projektvorlagen aus dem Visual Studio und dem .NET Framework!

coderun1Bild 1: Auswahl der Projektvorlage in Flick

Wie man sieht gibt es aber nicht nur .NET Projektvorlagen, sondern auch JavaScript und PHP. Hat man sich ersteinmal für eine Vorlage entschieden wird man von einer gewohnten, wenndoch etwas abgewandelten Visual Studio Oberfläche empfangen.

coderun2Bild 2: Ein geöffnetes PHP-Projekt

Man wird bekannte Icons wiederfinden, und auch die Syntaxhervorhebung ist aus dem Visual Studio übernommen. Aber auch der Gesamtaufbau ist gleich. Rechts der Solutionexplorer, Links das Codefenster und unten die Debugging und Outputoptionen.

Auch die Kontextmenüs ähneln stark denen aus Visual Studio:

coderun3Bild 3: Ein Visual Studio Benutzer wird hier viel wiedererkennen

Wie gesagt, orientiert sich diese IDE an Webprojekten. So kann man neben PHP auch ASP.NET Websites entwickeln, momentan aber nur mit C#.

Das tolle hierbei ist, was diese IDE auch über andere stellt ist, dass diese die .NET Codevervollständigung unterstützt. So bekommt man an gewohnter Stelle das gewohnte Intellisensemenü vom Visual Studio zu sehen, sogar mit Beschreibung!

coderun4Bild 4: Ein ASP.NET Projekt wie man es gewohnt ist

Wie man in Bild 4 sehen kann werden auch hier die Oberfläche und der Code getrennt und im Solutionexplorer rechts korrekt dargestellt. Oben in dem Bild sieht man den HTML Code und unten die Codebehind-Datei.

Die ASP.NET Codehervorhebung wird auch für die CSS und HTML Elemente in einem JavaScript Projekt übernommen. Hier das Beispielprojekt JQuery:

coderun5Bild 5: Ein JavaScript Projekt

Doch die IDE bietet nicht nur den Codeeditor, sondern auch erweiterte Funktionen wie Debugginng und Deployment. Desweiteren kann man seine erstellten Dateien, wenn diese fertig sind, herunterladen oder sein eigenes Visual Studio Projekt zum Bearbeiten hochladen.

Drückt man auf dem Play-Button wird das Projekt auch kompiliert und in einem seperaten Fenster ausgeführt.

Wenn man sich registriert bekommt man dazu noch Speicherplatz, sodass man später weiter arbeiten kann und nicht alles immer herunterladen muss. Außerden stehen einem dann erweiterte Deployment Optionen zur Verfügung.

Das ganze ist wie gesagt kostenlos, egal ob registriert oder nicht, von daher lohnt sich das Ausprobieren auf jeden Fall!

9Nov/094

Windows Aero Glass in eigenen Projekten nutzen Teil 2

dotnetIn dem ersten Teil dieses Beitrags, der nun schon einige Monate her ist habe ich gezeigt, wie man die Aero Glas Effekte auch in eigene Projekte einbauen kann. Doch leider waren da noch einige Probleme, so konnten wir nur das ganze Formular in Glas verwandeln und die Darstellung der Steuerelemente war falsch.

Genau hier möchte ich den zweiten Teil ansetzen und diese letzten Probleme aus der Welt schaffen!

Wir beginnen genauso wie im ersten Teil nur nennen wir unsere Klasse diesmal GlassForm um nicht durcheinander zu kommen.

Diesmal importieren wir eine weitere Methode aus der Windows API, nämlich DwmIsCompositionEnabled() die es uns ermöglicht zu prüfen, ob diese Effekte, die wir nutzen möchten auch verfügbar sind.

Die zweite Funktion DwmExtendFrameIntoClientArea müsste aus Teil 1 schon bekannt sein, diese hilft uns die Formränder zu vergrößern und somit die Glasoberfläche ins Formularinnere zu holen.

Da wir dieses Mal die eine Option für alle Ränder haben möchten, sodass wir zB. nur den oberen Rand in Glas verwandeln, benötigen wir ein Structure, in dem wir die Werte für jeden Rand speichern können und den wir dann später der Funktion DwmExtendFrameIntoClientArea übergeben.

So sieht unsere Klasse aus:


Imports System.Runtime.InteropServices

Public Class GlassForm
 _
        Private Shared Sub DwmExtendFrameIntoClientArea _
                (ByVal hwnd As IntPtr, ByRef margin As AeroDemo2.MARGINS)
    End Sub
 _
    Public Shared Function DwmIsCompositionEnabled() As Boolean
    End Function

    Public Shared Function ExtendGlassFrame _
        (ByVal hwnd As IntPtr, ByVal margin As AeroDemo2.MARGINS) As Boolean

        GlassForm.DwmExtendFrameIntoClientArea(hwnd, margin)

        Return True

    End Function

End Class

Public Structure MARGINS
    Public left As Integer
    Public right As Integer
    Public top As Integer
    Public bottom As Integer

    Public Sub New(ByVal l As Integer, ByVal r As Integer, _
                   ByVal t As Integer, ByVal b As Integer)
        left = l
        right = r
        top = t
        bottom = b
    End Sub
End Structure

Wie man sieht enthält die Structure MARGINS je eine Variable für jede Seite des Formulars, wobei der Wert den sie beinhaltet den Abstand zum eigentlichen Rahmen angibt!

Wechseln wir nun zur Klasse Form1, da wir hier fertig sind. In der Form_Load Methode können wir uns nun einen neuen Structure erstellen und diesem unsere gewünschten Rahmenabstände übergeben. Daraufhin rufen wir unsere Funktion auf die für sns das Glas herzaubern soll.

Doch wenn wir das Programm nun starten werden wir kein Glas vorfinden! Das liegt daran, dass Windows die Farbe Schwarz für Transparente Darstellung auf Glas verwendet. Das bedeutet, dass alle Steuerelemente, die Schwarze Farbe enthalten transparent und somit zu Glas werden! Das konntet ihr aber auch im ersten Teil schon beobachten!

Dieses Problem nehmen wir aber später nocheinmal in Angriff! Kommen wir ersteinmal zu unserem Glasfenster!

Damit wir auch wirklich Glas sehen, müssen wir ersteinmal das Fenster mit schwarzer Farbe füllen. Dazu schreiben wir folgendes in die Form_Paint Methode:


    Dim margins As AeroDemo2.MARGINS

    Private Sub Form1_Load() Handles MyBase.Load
        'Den "normalen" Bereich festlegen
        margins = New AeroDemo2.MARGINS(0, 0, 35, 50)
        'Die Fensterränder erweitern
        GlassForm.ExtendGlassFrame(Me.Handle, margins)
    End Sub

Wenn man das Programm startet, müsste das ca so aussehen:

aerodemo1Bild 1: Alles ist schwarz, bis auf den Glasteil

Bitte nicht erschrecken, denn eigentlich ist es keine Überraschung, dass wir nur schwarz sehen, denn wir haben im letzten Schritt alles Schwarz gefärbt. Der Aero Teil ist dadurch nun transparent geworden!

Da das Schwarze aber ziemlich blöd aussieht möchten wir das natürlich wieder auf unsere Standardeinstellung ändern. Dazu müssen wir diesen schwarzen Rechteck da oben nun wieder mit der Ausgangsfarbe füllen! Das machen wir so:


    Private Sub Form1_Paint(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        If GlassForm.DwmIsCompositionEnabled() = True Then
            'Hintergrund Schwarz füllen, um den Glass effenkt zu erhalten
            e.Graphics.Clear(Color.Black)
            'Nun das Stück, dass nicht aus Glas sein soll wieder "zurückmalen"
            Dim clientArea As New Rectangle(margins.left, margins.top, _
                    Me.ClientRectangle.Width - margins.left - margins.right, _
                    Me.ClientRectangle.Height - margins.top - margins.bottom)
            Dim b As Brush = New SolidBrush(Me.BackColor)
            e.Graphics.FillRectangle(b, clientArea)
        End If
    End Sub

Nachdem wir das Rechteck wieder mit der Ausgangsfarbe bemalt haben sieht das schon viel angenehmer aus:

aerodemo2Bild 2: Das Fenster hat nun wieder die "Normale" Farbe

Was natürlich nun auffällt ist das Komplett schwarze Label (ja, es ist wirklich eins) und der nicht lesbare Button.

Dies sind die oben besagten Probleme von GDI Objekten. Diese werden Standardmäßig genutzt um Abwärtskompabilität zu gewährleisten. Schaltet man aber das TextRendering auf GDI+ so werden auch die Schriften korrekt dargestellt.

Um das zu ändern muss die Option SetCompatibleTextRenderingDefault auf true gesetzt werden. Dies muss aber geschehen bevor das Programm gestartet wird. Also klicken wir mit der Rechten Maustaste auf unser Projekt -> Hinzufügen -> Modul

In das Modul schreibt ihr nun folgendes rein:


    Sub Main()
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(True)
        Application.Run(New Form1) 'Name eurer Form
    End Sub

Nun müssen wir nurnoch dafür sorgen, dass unser Projekt durch das Modul gestartet wird. Das machen wir in dem wir auf "Projekt" oben im Menü klicken und dann auf Eigenschaften. Hier muss nun der Haken bei "Anwendungsframework aktivieren" herausnehmen und dann bei "Startobjekt" "Sub Main" wählen:

aerodemo2_1Bild 3: Das Projekt über das Modul starten

Wenn wir das Programm nun starten sollte man die Texte und auch den Button lesen können!

Nun sind wir eigentlich schon durch. Was noch zu sagen bleibt ist, dass man es möglichst vermeiden sollte Steuerelemente auf dem Glas zu platzieren, da diese sehr oft falsch dargestellt werden.

Wenn ihr unbedingt Schrift auf Glas haben wollt solltet ihr diese Schrift auf das Formular Zeichnen und nicht einfach über ein Label dort platzieren. Das selbe gilt auch für Grafiken. Leider kann man nicht einfach mit der Graphics.DrawString() Methode Zeichnen sondern muss den Text erst in ein GraphicsPath Objekt "zeichnen" bevor man es dem Glas übergibt. So stellt man sicher, dass die Textverläufe richtig dargestellt werden!

Hier ein Beispiel:


            'Text zeichnen
            Dim txt = Me.CreateGraphics()
            Dim path = New GraphicsPath()

            path.AddString("Ich bin ein gezeichneter Text", _
                           New FontFamily("Tahoma"), CInt(FontStyle.Regular), _
                           20, New Point(60, 0), StringFormat.GenericDefault)

            Dim brush = New PathGradientBrush(path)
            Dim clr As Color() = {Color.Transparent}

            txt.SmoothingMode = SmoothingMode.HighQuality
            brush.CenterColor = Color.White
            brush.SurroundColors = clr
            txt.FillPath(Brushes.Black, path)

            brush.Dispose()
            path.Dispose()
            txt.Dispose()

Und wie es aussehen könnte:

aerodemo3Bild 4: So könnte ein Aero Formular aussehen

Weitere Informationen auch mit Beispielen findet ihr hier: (englisch & C#)

Microsoft
CodeProject
CodeProject

Wie üblich habe ich das Ganze in ein kleines Demoprojekt verpackt: Download

Wie hats euch gefallen, möchtet ihr einen dritten Teil? Freue mich auf euer Feedback!

Teil 1 des Tutorials gibts hier
Zum dritten Teil gehts hier lang

9Nov/090

Blogumzug und WordPressupdate angeschlossen

Wie vielleicht einige von euch festgestellt haben werden, gab es hier in letzter Zeit einige Probleme. Diese beruhten größtenteils auf einem PHP Update auf die Version 5.3. Leider hat mich der Webspace Anbieter, auf dem der Blog lief mich nicht informiert! (Wozu auch, bin ja nur zahlender Kunde)

update-300x266

Jedenfalls ist das in der Letzten Woche 2 Mal aufgetreten und somit habe ich mich entschlossen mit dem Blog auf meinen eigenen Windows Basierten Server umzuziehen!

Diese Reise war unerwartet holprig, da auf einmal viele Plugins nicht mehr funktionierten und einige native Apache Dienste wie Mod Rewrite unter IIS nicht zur Verfügung stehen!

und da ich schon alles von vorn machen musste habe ich auch gleich WordPress auf die neueste Version aktualisiert (2.8.5).

Während des Umzugs ist mir aufgefallen, dass es hier viele Themen gibt über die ich noch schreiben könnte, da ich selber viel mit Googlen beschäftigt war. Also hat es sich allein schon aus der Hinsicht gelohnt!

Aber das beste ist, dass ich nicht mehr auf die Beschränkungen meines Webspaceanbieter gebunden bin. So konnte in zb. in der Verergangeheit bestimmt Plugins nicht installieren, da diese zu viel Speicher benötigten!

An dieser Stelle noch eine kleine Bitte:

Wenn ihr irgendwas findet solltet, das nicht so funktioniert wie es eigentlich sollte, dann schreibt mir hier einen Kommentar oder schickt mir eine Mail!

6Nov/098

Windows Lizenzschlüssel aus der Registry auslesen

Da der Beitrag über das Auslesen des Office Schlüssels sehr beliebt ist, habe ich nun auch das Lesen des Windows Schlüssels als Beispiel verfasst.

Das Vorgehen hierbei ist sogar noch einfacher als beim Office Schlüssel, da es keine Aufteilungen in Versionen gibt! In allen Windows NT Versionen (also alle ab XP) befindet sich der Schlüssel in der Registry unter diesem Pfad:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

winkeyBild 1: Der Registryordner mit dem Windows Schlüssel

In diesem Ordner finden wir den Binärwert "DigitalProductId", der viele Hexadezimalzeichen enthält!

Der Code ist hierbei dem aus dem Officebeispiel sehr ähnlich, da er ja auch nichts anderes macht, als den im HEX-Code vorhandenen Key in lesbare Schrift umzuwandeln! Die einzige Schwierigkeit hierbei besteht darin, den Key richtig zusammen zusetzen, denn es wird nicht das komplette Alphabet verwendet um einen Windows Key zu generieren sondern nur diese Zeichen:

B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9

Wenn man das beachtet steht einem nichts mehr im Wege! Der Code aus diesem Beispiel stammt ausnahmsweise nicht von mir sondern von vcware.de - danke dafür an dieser Stelle!

Ich habe diesbezüglich wie immer ein kleines Demoprojekt angefertigt, das ihr euch herunterladenkönnt! Download

Bitte berichtet ob es bei euch gut geklappt hat.
Hier könnt ihr euch das komplette kostenlose Programm zum auslesen von Windows & Office key herunterladen. (English & Deutsch)

5Nov/090

Windows 7 und seine Schönheitsfehler Teil 2: Die Taskleiste

win7Letzte Woche habe ich unter Windows 7 etwas sehr seltsames beobachtet. Nach dem ich ein kleines Programm geschrieben hatte, dass ich zwischendurch nutzen wollte, wollte ich dieses an die Taskleiste "pinnen", damit ich es immer schnell griffbereit habe!

win75Bild 1: Links: Wie es sein sollte. Rechts: So sieht das "Problem" aus

Doch Pustekuchen! Ich konnte das Programm, ja nicht mal eine Verknüpfung, die auf das Programm linkte an die Taskleiste pinnen! Seltsam, denn andere Programme, auch selbstgeschriebene, konnte ich problemlos anpinnen!

Woran kann das liegen? Alle Optionen, die man von anderen Programmen kennt waren nicht da! Die ganze Jumplist hatte nur den Eintrag "Fenster schließen". Die anderen Optionen wie "Programm an die Taskleiste pinnen" waren alle weg!

Die erste Vermutung war natürlich, es liegt am Code! - Son Mist - Also habe ich losgelegt und das Programm Stück für Stück von verschiedenen Codeteilen befreit bis ich garkeinen Code mehr im Programm hatte. Aber das "Problem" war immernoch nicht behoben!

Wie gesagt konnte ich andere Programme, die ich selbst gemacht habe anpinnen, nur dieses eine nicht. Also habe ich das getan, was jeder kompetente Programmierer tun würde, ich befragte Google! :-)

Leider konnte ich nichts wirklich brauchbares finden, das meinen Fall bestätigte. Schließlich wollte ich schon aufgeben und das Projekt neu anlegen, in der Hoffnung es würde nicht wieder auftauchen.

Zu meinem Glück habe ich davor ein Skript (an dem ich zur Zeit etwas herum spiel) verwendet, dass dieses Programm  (zusammen mit vielen anderen Dateien) umbenannt hatte. Nun hieß das Programm "ax4b.exe". und Überraschung - ich konnte es anpinnen.

Es lag am Namen!

Als ich dem Programm wieder seinen Originalnamen verlieh konnte ich es wieder nicht anpinnen! Achja, das Programm heißt "Uploadhelper.exe"

Wie es also scheint, sind bestimmte Programme unter Windows 7 von der Fähigkeit befreit sich an die Taskleiste pinnen zu können.

Wie ich dann nach einer weiteren Internetrecherche herausgefunden habe gibt es einen Registryeintrag namens "AddRemovenames" derhier zu finden ist:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\AddRemoveNames

win76Bild 2: Der Registryeintrag mit den "verbotenen" Namen

Dieser enthält alle Schlüsselwörter, die alle Programme, die eins dieser Wörter im Namen beinhalten, nicht an die Taskleiste pinnen lässt! Diese Wörter sind:

Documentation;Help;Install;More Info;Readme;Read me;Read First;Setup;Support;What's New;Remove

Und da mein Programm das Wort "help" im Namen hatte wurde es von dieser Regel betroffen.

Es scheint so zu sein, dass Microsoft keine Hilfe oder Setup Programme in der Taskleiste sehen will. Wobei ich wirklich nicht verstehen kann, warum "Documentation" in der Liste steht!

Also hat man als Entwickler nun die Wahl: Entweder man benennt sein Programm um, oder man löscht den entsprechenden Eintrag aus diesem Registryeintrag. Von dem letzteren würde ich allerdings abraten, da es ein enormer Eingriff in die Benutzereinstellungen wäre, und wer weiß, vielleicht benutzen noch andere Dienste diesen Eintrag und funktionieren dann eventuell nicht mehr!

Wenn man von dieser Beschränkung nichts weiß, kann es einen schon in den Wahnsinn treiben, denn wer vermutet denn bitte, dass es an dem Namen liegt?

5Nov/092

Windows 7 und seine Schönheitsfehler Teil 1: Ordnerpfade

win7Seit einiger Zeit ist nun Microsofts neues Betriebssystem Windows 7 auf dem Markt und schlägt sich bisher sehr gut! Ich nutze es selber jeden Tag und bin begeistert von der Geschwindigkeit und den neuen Features die es bietet. Doch leider gibt es auch hier ein paar (wenn auch wenige) Schattenseiten, über die ich in dieser Reihe berichten möchte!

In diesem Ersten Teil geht es um ein kleines "Feature", dass einem nicht gleich ins Auge springt und teilweise auch schon in Windows Vista vorzufinden war. Der "normale" Nutzer würde es wahrscheinlich garnicht bemerken, doch wir als Programmierer müssen desöfteren mit konkreten Pfaden arbeiten, und das ist genau die Sache!

Blicken wir kurz zurück auf Windows XP und seine NT-Vorgänger. Jede Windows XP Version, egal in welcher Sprache sie vorliegt hat den selben Aufbau, zB. wird man immer den Ordner C:\Programme vorfinden, in dem die ganzen installierten Programme liegen.

Wenn wir nun also diesen Pfad fest in unser Programm einbauen, da wir ja davon ausgehen, dass dieser Pfad konstant ist müsste es ja "immer" laufen! Doch das ist leider nicht so, denn wenn man unser Programm auf einem Rechner mit einer Englischen Kopie von Windows (XP) startet, wird das Programm abstürzen, da es den Ordner C:\Programme nicht finden wird!
Warum? Ganz einfach, denn im Englischen gibts das Wort "Programme" nicht! Dort heißt der Ordner "Program Files" und müsste dementsprehend über "C:\Program Files" angesprochen werden! - Ja, ich weiß, ein normaler Mensch würde hier die Umgebungsvariable "ProgramFiles" nutzen, die immer auf den richtigen Ordnerpfad zeigt, aber das würde das Problem nicht verdeutlichen! (dazu kommen wir noch)

Also zurück zu Windows 7. Microsoft dachte sich auch, dass das wohl blöd ist und entschied sich dazu alles einheitlich zu machen! - Gute Idee, doch etwas komisch umgesetzt!

Schauen wir uns doch mal einen Typischen Windows 7 Ordnerpfad an:

win71Bild 1: Der Ordner "Eigene Bilder" ausgewählt im WIndows Explorer

Wenn ich Sie nun nach dem Pfad zu dem ausgewählten Ordner frage, würden Sie wohl wie folgt antworten:

C:\Benutzer\Basti\Eigene Bilder

Ich kann Sie beruhigen, diese Angabe ist völlig korrekt, so scheint es. Denn an dieser Stelle täuscht uns Windows 7 bzw. der Windows Explorer.

Denn würden Sie den o.g. Pfad aufrufen wollen, würde Windows eine Fehlermeldung ausgeben, die besagen würde, dass der Ordner nicht existiert! - Wie kann das sein?

Das liegt daran, dass Windows uns die deutsche Sprache nur vortäuscht! Denn der echte Pfad sieht so aus:

win72Bild 2: Der wahre Pfad steht oben

Nach einem Klick in die Adresszeile wird man feststellen, dass der Ordnerpfad komplett nur aus Englischen Wörtern besteht!

Das macht es manchmal umständlich eine Datei zu finden, auch wenn es für den eigentlichen Nutzer angenehmer erscheint!

Wie kann man sich schützen?

ALs Programmierer sollte man seinen Code immer so schreiben, dass es auf allen Windows Versionen lauffähig ist, doch wie macht man das wenn die Ordner immer anders heißen?

Die Antwort ist relativ leicht und lautet "Umgebungsvariable"! Denn Windows übersetzt nicht alle Ordner, sondern nur die so genannten "Special Folders". Das sind Ordner, die für das System von Bedeutung sind!

Dazu gehören der Windows Ordner Selbst, der Systemordner, der Programmordner oder der "Eigene Dateien" Ordner. Aber woher weis ich, ob ein Ordner ein "Special Folder" ist oder nicht?

Das kann man ganz einfach herausfinden, indem man in die Liste der Umgebungsvariablen (Environmentvariables in English) schaut. Diese findet ihr zb so: [Start]+[R] Tippt nun "cmd" ein und drückt auf [ENTER] um in die Eingabeaufforderung von Windows zu gelangen. Nun tippt "set" ein und drückt erneut auf [ENTER].

win73Bild 3: Die Liste mit den Umgebungsvariablen unter Windows

Hier sehr ihr eine komplette Liste mit allen dem Benutzer zugänglichen Umgebungsvariablen. Alternativ könnt ihr auch so vorgehen: [Start] und nun tippt ihr in das Suchfeld von Windows Vista oder 7 "erweitert" ein und lasst Windows ein paar Sekunden suchen, dann klickt ihr auf den Eintrag "Erweiterte Systemeinstellungen Anzeigen", wählt nun oben den Tab "Erweitert" auf und klickt unten auf "Umgebungsvariablen" ihr bekommt folgendes zu sehen:

win74Bild 4: Die Grafische Oberfläche der Umgebungsvariablen

Unter Windows XP Erreicht ihr dieses Fenster mit einem Rechtsklick auf Arbeitsplatz und dann Erweitert!

Auf diese Variablen kann man auch sehr bequem vom Code aus zugreifen, und da diese auf jedem System stimmen hat man keine Probleme zu erwarten!


        '
        '
        'Pfad zum Programmordner
        Dim ProgrammPfad As String
        ProgrammPfad = Environment.GetEnvironmentVariable("ProgramFiles")

Wie man sieht kann man so sehr einfach den Programmordner auslesen.

Windows 7 bietet noch weitere kleine Überraschungen über die ich im Nächsten Teil schreiben werde!

Hat euch diese Beitrag gefallen? Schreibt mir einen Kommentar!

Get Adobe Flash playerPlugin by wpburn.com wordpress themes