BigBasti's Blog About Me & my Digital Lifestyle

10Mrz/100

101 LINQ Beispiele fuer C# Programmierer

Wer Datenbankprogrammierung mit C# betreibt wird früher oder später nicht an LINQ vorbeikommen. Wer sich damit etwas auseinandersetzt wird schnell merken, dass diese Queries schnell recht komplex werden.

Hier bietet Mocrosofts MSDN eine tolle Beispielsammlung an, in der fast alle Anwendungsfälle beschrieben sind. Das ganze findet ihr im MSDN Visual C# Developer Center.

VN:F [1.8.4_1055]
Rating: 0.0/10 (0 votes cast)
28Feb/100

C#: Alle Sichtbaren Prozesse / Fenster auflisten

Immer öfter benötige ich beim erstellen einer Software Zugriff auf fremde Fenster, doch leider bietet hier die Process-Klasse des .NET Frameworks nur wenig Hilfe. Denn mit ihr kann mann nicht alle Fenster ansprechen!

Problem:

Nehmen wir mal wir möchten alle zur Zeit geöffneten Fenster in einer Liste darstellen, dabei haben wir 3 Windows Explorer Fenster, 2 Mal FireFox und 3 anderen Programme geöffnet.

Wenn wir nun auf die Mittel des .NET Frameworks zurückgreifen, müssten wir das so angehen:


            foreach (Process p in Process.GetProcesses())
            {
                if (p.MainWindowHandle != null){
                    MessageBox.Show(p.MainWindowTitle + " - " + p.MainWindowHandle.ToString());
                }
            }

Der Code ist sehr simpel und leicht verständlich. Wir prüfen, ob ein Fenster sichtbar ist, in dem wir schauen, ob ein Handle dafür hinterlegt ist. Leider kann man das meines Wissens nicht anders lösen.

Aber wie es euch vielleicht schon aufgefallen ist benutzen wir hier die Funktion p.MainWindowHandle() - das Problem hierbei ist das kleine Wörtchen "Main", das in dem Funktionsnamen steckt, denn diese Funktion liefert uns NUR den Titel und das Fensterhandle des Hauptfensters des Programms, oder in anderen Worten, des Fensters eines Programms, das zuletzt aktiv gewesen ist.

Das bedeutet, dass wenn wir 3 Firefox Fenster offen haben wir nur das Handle und den Titel des zuletzt aktiven Fenster bekommen. Schlimmer ist es noch mit den Systemfenstern, da diese immer unter dem Prozess "Explorer" laufen, der unter anderem auch für die Darstellung der Taskleiste verantwortlich ist.

Das bedeutet, dass wir im Normalfall nicht die Windows Explorer Fenster ansprechen können sondern stattdessen das Handle der Taskleiste zurückbekommen, da diese meißt aktiver ist als die Windows Fenster und meistens auch immer im Vordergrund bleibt. (Siehe letzter Artikel)

Lösung:

Doch wie bekommen wir nun alle Fenster? Hier bietet uns das Framework leider keine Hilfe, weswegen wir auf die Win32 API zurückgreifen müssen. Hier finden wir Methoden, die uns viel über die Fenster verraten:


        [DllImport("user32.dll")] //Die Position und Größe eines Fensters bestimmen
        public static extern long GetWindowRect(IntPtr hwnd, ref RECT lpRect);

        [DllImport("user32.dll")] //Prüfen, ob ein Fenster Sichtbar ist
        public static extern bool IsWindowVisible(IntPtr hWnd);

        [DllImport("user32.Dll")] //Alle offenen Fenster abrufen
        public static extern int EnumWindows(ProcessListDemo.Windows.WinCallBack x, int y);

        [DllImport("User32.Dll")] //Titel eines Fensters auslesen
        public static extern void GetWindowText(int h, StringBuilder s, int nMaxCount);

        [DllImport("User32.Dll")] //Die Klasse des Fensters besimmen
        public static extern void GetClassName(int h, StringBuilder s, int nMaxCount);

Die wichtigsten hier sind "EnumWindows" und "IsWindowVisible". Die erste liefert uns eine Liste mit allen Fensterhandles die zur Zeit aktiv sind und mit der Zweiten können wir bestimmen, ob ein Fenster sichtbar ist oder nicht. Die anderen Funktionen lassen wir erstmal ungeachtet.

Wie eben schon erwähnt benutzen wir die EnumWindows-Funktion um uns alle Fensterhandles zu besorgen. Diese Funktion arbeitet hierbei über einen Delegaten Aufruf.


        ///
        /// Beinhaltet alle zur Zeit geöffneten und Minimierten Fenster
        ///
        public LinkedList lstWindows { get; set; }

        ///
        /// Delegate Funktion für EnumWindows (Siehe Declarations)
        /// Gibt die Werte an EnumWindowCallBack weiter
        ///
        public delegate bool WinCallBack(int hwnd, int lParam);

        private void getWindows()
        {
            //Liste mit Fenstern befüllen
            ProcessListDemo.Declarations.EnumWindows(new WinCallBack(EnumWindowCallBack), 0);

        }

        ///
        /// Diese Funktion wird durch die Delegate Funktion WinCallBack aufgerufen
        /// und iteriert durch alle zur Zeit geöffneten Fenster
        private bool EnumWindowCallBack(int hwnd, int lParam)
        {
            IntPtr windowHandle = (IntPtr)hwnd;

            StringBuilder sb = new StringBuilder(1024);
            StringBuilder sbc = new StringBuilder(256);

            ProcessListDemo.Declarations.GetClassName(hwnd, sbc, sbc.Capacity);
            ProcessListDemo.Declarations.GetWindowText((int)windowHandle, sb, sb.Capacity);

            //Nur Prozesse mit einer Beschreibung, also einem Fenster bearbeiten
            if (sb.Length > 0)
            {
                ProcessListDemo.Declarations.RECT r = new ProcessListDemo.Declarations.RECT(); //Fensterposition & Größe bestimmen:
                ProcessListDemo.Declarations.GetWindowRect(windowHandle,ref r);

                Window w = new Window(  sb + "",
                                        windowHandle,
                                        sbc + "",
                                        ProcessListDemo.Declarations.IsWindowVisible(windowHandle),
                                        new ProcessListDemo.Declarations.Point(r.Left, r.Top),
                                        new ProcessListDemo.Declarations.Point(r.Right - r.Left, r.Bottom - r.Top),
                                        Window.WinType.Normal);
                this.lstWindows.AddLast(w);
            }
            return true;
        }

In einfachen Worten erklärt passiert hier folgendes: Wir rufen die EnumWindows Funktion auf und übergeben dieser als Parameter die Referenz auf die Funktion EnumWindowCallBack, dazu benötigen wir die Delegate Funktion WinCallBack. Wichtig hierbei ist, dass alle Funktionen die gleichen Parameterdefinitionen haben. Der zweite Parameter ist bei mir hier aber ungenutzt, dieser ist optional vorhanden, um zB. weitere Referenzen zu übergeben wie zB. eine Listbox worin die Ergebnisse gespeichert werden sollen. Da wir hier aber die Ergebnisse direkt in die Klassen-variable schreiben benötigen wir diese nicht.

Nachdem die EnumWindows Funktion nun aufgerufen wurde macht sie nichts anderes, als die ihr übergebene Funktion (EnumWindowCallBack) aufzurufen. Diese wird dabei für jeden Prozess einmal aufgerufen und bekommt als Parameter das Handle des Fensters.

Im Prinzip nicht kompliziert. Ich habe hier, um das ganze besser zu visualisieren zwei Klassen namens "Window" und "Windows" erstellt. Diese übernehmen die ganze Arbeit für euch und erstellen eine Komplette Übersicht aller Fenster inklusive der Angaben, wie Größe, Position, Handle und Titel. Diese könnt ihr gern in euren eigenen Projekten nutzen.

Bild 1: Die Eigenschaften der Window-Klasse

Wenn ihr euch mal die Ergebnisse der EnumWindows Funktion anschaut werdet ihr feststellen, dass es ziemlich viele Fenster sind die da so im Hintergrund laufen, aber unsichtbar sind! Um diese Fenster zu filtern benutzen wir die Funktion IsWindowVisible und prüfen ob das Fenster Sichtbar ist oder nicht.

Bild 2: Das Demoprogramm in Aktion, zeigt alle Fensterprozesse

In dem Demoprogramm zeige ich euch wie ihr die zwei Klassen "Window" und "Windows" sehr einfach dazu benutzen könne, um eine Komplette Übersicht über alle Fenster des Systems zu bekommen.


        private void cmdList_Click(object sender, EventArgs e)
        {
            //Alte Liste Leeren
            lstProcess.Items.Clear();

            //Alle vorhandenen Fenster bestimmen
            Windows windows = new Windows();

            //Alle Fenster durchgehen und in die Lite einsetzen
            foreach (Window w in windows.lstWindows)
            {
                ListViewItem lvi = new ListViewItem(w.winTitle);
                lvi.SubItems.AddRange(new string[] { w.winClass,
                    w.winHandle.ToString(), w.winVisible.ToString() });     

                lstProcess.Items.Add(lvi);
            }
        }

Wie man sieht ist diese Angelegenheit dank der "Windows"-Klassen nun sehr einfach geworden. Zum besseren Verständnis solltet ihr euch das Demoprojekt herunterladen.

Download des Demoprojekts: Download [VS 2008 C#]

Wie hat euch dieser Artikel gefallen? Habt ihr Verbesserungsvorschläge, Kritik oder Lob? Bitte ein Kommentar schreiben!

VN:F [1.8.4_1055]
Rating: 10.0/10 (1 vote cast)
24Feb/100

.NET: Windows Taskleiste verstecken

In den letzten Tagen ist mir durch einen Zufall aufgefallen, dass die Windows Taskleiste (seit Windows Vista) in einem Fenster Prozess des Explorers läuft.

Das interessante/lustige hierbei ist, dass die Taskleiste als Fenster erkannt wird und dementsprechend auch als Fenster behandelt werden kann. Also können wir sämtliche Funktionen für Fenster auch auf die Taskleiste anwenden.

Als Beispiel blende ich hier die Taskleiste mit Hilfe der ShowWindow Funktion aus. Das lustige hierbei, ist dass nicht die Ganze Taskleiste von dieser Aktion betroffen ist. Der "Start"-Knopf von Windows bleibt weiterhin sichtbar und funktioniert, nur das Drumherum ist nun verschwunden.

Der Prozess den wir suchen läuft als "explorer" und sollte der einzige Prozess sein, der ein MainWindowHandle hat aber keinen MainWindowTitle. Wenn man diese zwei Kriterien anwendet, kann man ganz einfach diesen Prozess isolieren:


        [DllImport("user32.dll")]
        public static extern long ShowWindow(IntPtr hWnd, int nCmdShow);

        private IntPtr tbHandle = IntPtr.Zero;
        private void button1_Click(object sender, EventArgs e)
        {
            Process[] pr = Process.GetProcesses();

            foreach (Process p in pr)
            {
                if (p.MainWindowHandle != null && p.MainWindowTitle == ""
                    && p.ProcessName == "explorer")
                {
                    tbHandle = p.MainWindowHandle;
                }
            }

            if (tbHandle != IntPtr.Zero)
            {
                ShowWindow(tbHandle, 0);
            }
            else
            {
                MessageBox.Show(this, "Konnte Prozess nicht finden!",
                "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

Da man nun das MainWindowHandle hat kann man nun mit Hilfe der ShowWindow-Funktion aus der Win32 API das Fenster verstecken.

WICHTIG: Bitte vor dem Verstecken der Taskleiste unbedingt das MainWindowHandle abspeichern, da man diese sonst nicht wieder einblenden kann!

Wenn man die Aktion erfolgreich ausführt sieht man folgendes:

Bild 1: Die Taskleiste ist verschwunden, nur der Start-Knopf ist noch da

Wie man sieht ist nur noch der Start-Knopf da und die gesamte Taskleiste ist verschwunden und ist auch nicht anklickbar!

Wenn man die Option "Taskleiste Automatisch ausblenden" aktiviert hat hat man sogar einen noch schöneren Effekt!

Also wenn ihr nicht wollt, dass euch jemand auf die Taskleiste glotzt oder ihr jemandem einen kleinen Streich spielen wollt könnt ihr das ja mal testen!

Falls ihr eure Taskleiste versteckt habt und aus versehen das Programm beendet könnt ihr die Taskleiste nicht mehr über das Programm wiederherstellen! Die einzige Lösung ist es im Taskmanager ([STRG]+[SHIFT]+[ESC]) den Prozess "explorer.exe" zu beenden und dann über Datei->Neuer Task->"explorer"->[ENTER] den Explorer neu zustarten.

Bild 2: Das Demoprogramm

Ich hoffe diese kleine Spielerei hat euch gefallen, das Demo Projekt (diesmal in C#) gibts hier:

Demoprojekt: Download [VS 2008]

VN:F [1.8.4_1055]
Rating: 0.0/10 (0 votes cast)
9Dez/090

ASP.NET: Erzeugen eines MD5 Hashs

Wer sich schon mal mit PHP auseinander gesetzt hat, wird wissen wie einfach es ist dort einen MD5 Hash zu einem Wert zu berechnen. Dies geht dort sehr simpel mit der Funktion "MD5($wert);".

Leider oder zum Glück ist es in in ASP.NET etwas komplexer aufgebaut. Somuss man hier erst Instanzen von Kryptographie Klassen erstellen, bevor man endlich den gewünschten MD5 String bekommt.

So sieht der Code dafür aus:


using System.Security.Cryptography;
using System.Text;
        public String MD5(String wert)
        {
            byte[] bWert = Encoding.UTF8.GetBytes(wert);
            MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] hash = md5.ComputeHash(bWert);
            string md5Wert = BitConverter.ToString(hash).Replace("-", "").ToLower();

            return md5Wert;
        }

Mit dieser Funktion bekommt man einen sauberen MD5 Hash in Kleinbuchstaben. Diese Funktion lässt sich nun so benutzen wie unter PHP um bequem MD5 hashes zu berechnen.

VN:F [1.8.4_1055]
Rating: 0.0/10 (0 votes cast)
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!

VN:F [1.8.4_1055]
Rating: 9.0/10 (2 votes cast)
21Okt/090

Visual Studio 2010 Beta 2 – Erster Eindruck

Seit heute ist die zweite Beta vom Visual Studio 2010 für die breite Masse verfügbar. Seit Beta 2 läuft das gute Stück Software auch unter Windows 7.

vs20102Bild 1: Der Ladebildschirm vom Visual Studio 2010

dotnet4Microsoft hat VS10 ja ziemlich stark überarbeitet, zB basiert die Oberfläche nun auf WPF. Und zusammen mit dem neuen Visual Studio wird auch das .NET Framework 4.0 eingeführt, welches zur Zeit auch in der zweiten Beta vorliegt.

Nach dem man VS gestartet hat wird man wie auch in den letzten Versionen von einem Begrüßungsbildschirm empfangen.

Aber es wird sofort auffallen, dass die gesamte Oberfläche viel aufgeräumter ist, man wird nicht mehr mit seitenweise Text beworfen und die ganzen anderen kleinen Bereiche sind auch verschwunden!

Das Design an Sich ist im schlichten Blau gehalten, das sich durch alle Bereiche zieht. Auch nach dem man ein neues Projekt angelegt hat bleibt die Übersichtlichkeit erhalten und man wird nicht von 10 Funktionsleisten abgelenkt.

hellow3

Bild 2: Die erste Anwendung mit Framework 4.0 :-)

Ich hatte bisher nur wenig Zeit um großartig viel auszuprobieren. Ich habe lediglich ein paar Zeilen geschrieben um zu schauen wie der neue Codeeditor sich schlägt.

Und man muss leider sagen, dass man merkt, dass es noch im Beta Stadium ist, denn Intellisense ist nicht so schnell wie in VS9 und ist öfter mal verwirrt. Auch kommt es vor, dass es irgendwo aufpoppt wo es garnicht hingehört!

vs20103

Bild 3: Der Codeeditor

Der Editor an sich hat ein paar neue Features bekommen, zumindest sichtbare, denn nun werden fünf statt vier Farben benutzt um den Code zu formatieren und werden auch gleiche Begriffe hervorgehoben.

Ich freu mich trozdem schon auf weitere tests mit der IDE. Was habt ihr für Erfahrungen sammeln können?

VN:F [1.8.4_1055]
Rating: 4.8/10 (5 votes cast)
1Sep/090

TreeView in XML speichern und zurück einlesen #2

Vor ca 2 Wochen habe ich eine Hilfsklasse zum Exportieren und Importieren von TreeNodes und XMLDateien veröffentlicht, mit dem Versprechen auf ein Update, mit dem das Exportieren ganzer TreeViews möglich ist.

Jetzt hatte ich Zeit und habe die Klasse um die entsprechenden Funktionen erweitert, sodass es nun möglich ist einen ganzen Baum in einer XML Datei abzulegen.

treeviewdemo2

Warum habe ich das nicht gleich so gemacht? Ganz einfach weil ich das nicht brauchte! :) Und es eigentlich sinnvoller finde die TreeNodes einzeln zu speichern!

Außerdem besteht beim Speichern einer TreeView ein großes Problem! Ansich eignet sich die Struktur einer TreeView perfekt um diese in einer XML Datei abzubilden. Nun kommt aber das Problem ins Spiel, dass eine TreeView mehrere "Kern" (root)-Äßte haben kann. Einer XML erlaubt das aber nicht. Eine XML Datei darf exakt eine Root-Node besitzen!

treeviewdemo2_1

Wie umgeht man nun dieses Problem? Ich habe das so geregelt, dass ich einfach eine eigene Root-Node erstelle in die ich dann die Root-Nodes aus der TreeView einfüge die exportiert werden soll. Diese habe ich dementsprechend "rootNode" genannt! Also nicht erschrecken, wenn ihr in euren XML Files diese Fremde Node findet, diese wird beim Einlesen natürlich nicht mit eingelesen!

Ansonsten ähneld der neue Code sehr dem alten. Wie immer könnt ihr mir gerne Kommentare mit Bugs, Fehlern und Wünschen schreiben. Viel Spaß beim Testen und benutzen! Ich habe die Klasse wie auch letztes mal in ein Demoprojekt verpackt damit man die neuen Funktionen gleich live erleben kann! Wenn ihr nur auf die Klasse scharf seit, dann kopiert sie einfach aus dem Projektordner in euer eigenes Projekt!

Bei Weiteren Fragen schreibt mir bitte eine Mail!

Download: XMLParser v. 1.1

VN:F [1.8.4_1055]
Rating: 9.0/10 (2 votes cast)
30Aug/090

.NET Entwicklung unter UNIX-basierenden Systemen

Seit längerem befindet sich das Projekt "Mono" in der Entwicklung und ist nun in der Version 2.4 verfügbar. Dank Mono wird .NET Plattformunabhängig und liefert das, was Microsoft schon längst hätte bringen sollen!

Mit MonoDevelop wird gleich auch eine sehr gute IDE zum Entwickeln mitgebracht! Diese läuft auf allen gängigen Systemen einschließlich Mac OS X. Da das ganze auch noch open Source ist, ist es auch kostenlos zu haben!

Durch dieses Projekt wird Linux natürlich sehr interessant für .NET Entwickler und wird in Zukunft definitiv dazu führen dass es viele Anwendungen für alle geben wird, so wie es jetzt mit Java ist!

Ist die IDE Erstmal eingerichtet erinnert diese erstmal stark an Netbeans oder Eclipse:

bildschirmfoto-2009-08-30-um-194735Bild 1: MonoDevelop in einem C# Projekt

Diese wird ebenfalls stetig weiter entwickelt und erinnert jetzt schon sehr an der Visual Studio aus dem Hause Microsoft!

Einen compiler bekommt man natürlich auch gleich mit geliefert! Den man zb auch über die Konsole aufrufen kann:

bildschirmfoto-2009-08-30-um-194838Bild 2: Das aus Bild 1 kompilierte & ausgeführte Projekt

Leider steht noch nicht das komplette .NET Framework, welches demnächst in der Version 4.0 erscheint verfügbar, sondern wird langsam stetig erweitert!

Wenn euer Interesse geweckt wurde und ihr das mal testen wollt, kann ich ein Video im MSDN empfehlen, welches die ersten Schritte sehr gut beschreibt und eine komplette kleine Anleitung liefert!

Ich werde demnächst das ganze mal auf dem Mac testen und gucken ob das ganze schon mit Java konkurrieren kann!

VN:F [1.8.4_1055]
Rating: 10.0/10 (1 vote cast)
13Aug/090

Windows 7 APIs lernen mit dem Microsoft Training Kit & Code Pack

Seit nun ca 3 Tagen ist das Microsoft Windows 7 Training Kit da und ich habe mir heute mal die Zeit genommen da erwas reinzuschauen!

Wem das nichts sagt, das Training Kit ist ein Paket mit Beispielen und Erklärungen, das Microsoft zu jedem neuen Produkt herausgibt. Dort finden sich sehr viele ausführliche Beispiele für die neuen Funktionen des Systems und die neuen APIs werden vorgestellt.

bild-114Bild 1: So sieht die Startseite des Training Kits aus

In dieser Ausgabe geht es vorallem um diese Themen:

  • Taskbar
  • Libraries
  • Multi Touch
  • Sensors and Location
  • Ribbon
  • Trigger Start Services
  • Instrumentation and ETW
  • Application Compatability
  • Version Checking
  • UAC Data Redirection
  • Session 0 Isolation
  • Installer Detection
  • User Interface Privilege Isolation
  • High DPI

Ich konnte leider noch nichts testen, da ich Windows 7 nicht installiert habe, aber nach ein wenig Durchfliegen kann ich es nur empfehlen. Für alle, die Aktuell bleiben wollen ist es sowieso ein Muss!

Passend dazu gibts auch das neue Code Pack aus der MSDN Code Gallery. Dieses besteht ebenfalls aus vielen Beispielen, von denen auch viele 2 Sprachig sind!

Dieses Code Pack beschäftigt sich mit:

  • Windows 7 Taskbar Jump Lists, Icon Overlay, Progress Bar, Tabbed Thumbnails, and Thumbnail Toolbars.
  • Windows 7 Libraries, Known Folders, non-file system containers.
  • Windows Shell Search API support, a hierarchy of Shell Namespace entities, and Drag and Drop functionality for Shell Objects.
  • Explorer Browser Control.
  • Shell property system.
  • Windows Vista and Windows 7 Common File Dialogs, including custom controls.
  • Windows Vista and Windows 7 Task Dialogs.
  • Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs. (DirectWrite and WIC have partial support)
  • Sensor Platform APIs
  • Extended Linguistic Services APIs
  • Power Management APIs
  • Application Restart and Recovery APIs
  • Network List Manager APIs
  • Command Link control and System defined Shell icons.

Das interessanteste dürften hier die in Windows 7 neuen Jumplists und Sensoren sein!

Mehr Infos dazu hier.

VN:F [1.8.4_1055]
Rating: 0.0/10 (0 votes cast)
   
Get Adobe Flash playerPlugin by wpburn.com wordpress themes