Nicht erst mit seiner neuesten Version hat sich der Office SharePoint Server im Webbereich als äußerst flexibles Allround-Werkzeug etabliert und ist entsprechend weit verbreitet. Trotzdem pflegen nicht wenige Entwickler ihre Vorurteile gegenüber der Anwendung, etwa: SharePoint ist eh nur ein System zum Verwalten von Listen!
Dass die Realität weit von dem entfernt ist, zeigt Ihnen MSDN im Rahmen der kostenlosen TechTalk-Roadshow, die im März wieder in fünf Städten Station macht. MSDN-Experte Tom Wendel gibt dabei einen umfassenden Einblick in den Funktionsumfang des neuen SharePoint 2010 und zeigt aus Entwicklersicht, wo überall Sie bei der Anwendung selbst Hand anlegen können, um dem SharePoint zu vollem Potential zu verhelfen.
Gleich zwei heiße Top-Themen präsentiert die aktuelle Ausgabe von msdn tv: wir gehen der Frage nach, was Windows 7 und Bob Dylan gemeinsam haben und präsentieren Mitglieder der Microsoft-Community, die erstmals vor der Kamera auspacken. Aber der Reihe nach: im Interview mit Moderator Jan Schenk informiert diesmal MSDN-Experte und Windows-Entwickler Oliver Scheer unter trickreicher Zuhilfenahme sogenannter CueCards über einige interessante Features von Windows 7 und über Ressourcen, die jeder Developer kennen sollte. Beispiel: das Windows API Code Pack.
Schließlich bedanken sich noch drei Gewinner des Expression Studio Gewinnspiels vom Herbst letzten Jahres per Video für die übersandten Preise. Ach so – wegen Bob Dylan: Die Vorlage zum CueCard-Video stammt aus dem Jahr 1965 und ist hier anzuschauen.
MSDN – das Microsoft Developer Network – unterstützt Entwickler mit einem reichhaltigen Angebot von Online- und Offline-Services und liefert mit seinem umfangreichen Know-how-Fundus effiziente Hilfe, wenn es um Fragen der Anwendungsprogrammierung auf Basis von Microsoft-Produkten und -Technologien geht. Angefangen beim .NET Framework, den verschiedenen .NET-Sprachen und der Entwicklungsumgebung Visual Studio, über Windows und Webprogrammierung, bis hin zur Entwicklung für mobile Plattformen bietet Ihnen MSDN Online genug Treibstoff, um Ihre Probleme und Fragen hinter sich zu lassen und Ihre Ziele schnell zu erreichen. Natürlich auch zu neuen Themen und Technologien wie Windows 7, Cloud Computing, Silverlight oder Multicore-Programmierung. Lesen Sie auch gerne, was die deutschsprachige Wikipedia über uns schreibt: MSDN auf Wikipedia Mit MSDN Online möchten wir Ihnen unter der Internetadresse www.msdn-online.de grundsätzlich eine umfangreiche Grundversorgung anbieten. Dort, wo wir Ihnen einen extra Service oder die Extraportion Know-how anbieten, bemühen wir uns dies natürlich kostenfrei für Sie zu realisieren. So sind 99.5% aller unserer Online-Angebote kostenfrei nutzbar.
Der Release Candidate (RC) von Visual Studio 2010, die letzte Vorabversion vor der Produktveröffentlichung am 12. April 2010, steht nun allen Interessierten in den kommenden Editionen als öffentlicher Download zur Verfügung. Zum Wochenbeginn hatten bereits Inhaber einer MSDN Subscription exklusiven Zugriff auf die – gegenüber der früheren Vorabversion Beta 2 dank umfassenden Kundenfeedbacks immens beschleunigte – Entwicklungsumgebung gehabt. Die ausschließlich englischsprachig verfügbaren Vorabversionen verfügen weiterhin über eine „Go Live“-Lizenz, die den produktiven Einsatz bereits heute erlaubt. Zeitgleich zu Visual Studio 2010 hat auch das grundlegende .NET Framework 4, in den Visual Studio 2010-Installationen bereits enthalten, den RC-Status erreicht und ist von MSDN Online auch separat herunterladbar. Download: Visual Studio 2010 (RC) und .NET Framework (RC) Visual Studio General Manager Jason Zander bittet die geneigten Tester der Release Candidates ein weiteres Mal um ihr wertvolles Feedback und stellt in einem Channel 9-Interview die jüngste Entstehungsgeschichte der Release Candidates vor. Tagesaktuelle Nachrichten rund um Visual Studio finden Sie auch im Visual Studio Developer Center auf MSDN. Im MSDN Forum zu Visual Studio können Sie sich mit der Community austauschen und in der MSDN Mediathek finden Sie zahlreiche weitere Multimediainhalte zu Visual Studio 2010: MSDN Mediathek
Heute kommen die Fans des Windows Explorer voll auf ihre Kosten. Er verfügt im Prinzip über alle wichtigen Funktionen, die man für die Navigation durch Ordner, Netze, Dateien, Bibliotheken und Suchen benötigt. Der Windows Explorer ist das Ergebnis jahrelanger Entwicklungsarbeit und spiegelt dabei die Implementierung vieler Bedürfnisse des Standardbenutzers wieder. Wer dennoch Funktionen braucht, die nicht enthalten sind, oder diese gerne auf andere Art und Weise implementieren möchte, darf dies gerne tun.
Die Funktionen des Windows Explorer stehen jedem Entwickler frei zur Verfügung. Dank des Windows API Code Packs lässt sich der Explorer in Windows Forms- oder Windows Presentation Foundation-Anwendungen integrieren.
Die Funktionen und die Visualisierung steht in Form von Steuerelementen direkt in Visual Studio zur Verfügung. Der Name der Steuerelemente ist sowohl in Windows Forms als auch in WPF ExplorerBrowser.
Die Konfiguration ist ebenfalls sehr leicht über das Eigenschaften-Fenster möglich.
Zwei Referenzimplementierungen sind direkt im Windows API Code Pack enthalten. Sie demonstrieren einfach und kompakt die volle Leistungsfähigkeit und sehen dabei sehr technisch aus. Meine Bitte an Sie, bitte bauen sie so etwas nicht, sondern machen sie es dem Benutzer leicht. J
Die WPF-Variante zum Testen der ExplorerBrowser-Funktionen.
Ein altes Sprichwort sagt: „Wer suchet, der findet.“. Warum lassen wir nicht unsere eigenen Anwendungen suchen? Windows 7 liefert die notwendige Search API dafür mit.
Um die Search API aus .NET-Code ansprechen zu können, ist wirklich nicht viel nötig. Man muss lediglich das Windows API Code Pack einbinden und schon kann in wenigen Zeilen der eigene Suchclient entwickelt werden.
Was man sucht und vor allem wo man sucht, ist jedem Entwickler selbst überlassen. Die Qualität der Suche hängt aber wesentlich von diversen Kriterien ab: So ist es ziemlich sinnlos nach Liedern ihrer Lieblingsband im System-Ordner von Windows zu suchen. Und Bilder vom letzten Firmenfest werden sie nicht in ihren Musikordnern finden. Es sei denn, sie haben eine sehr interessanten Organisationsstil.
Aus gutem Grund bietet die API daher auch die nötigen Konfigurationswerkzeuge für die Suche an. In welchen Typen von Ordner soll gesucht werden? Was für Daten suchen wir? Sollen alle Suchbegriffe oder zumindest ein Suchbegriff im Dokument gefunden werden? Handelt es sich um aktuelle Daten oder vor langer Zeit angelegte Dokumente?
Eine eigene Suchanwendung ist sehr schnell implementiert. Dafür sind lediglich zwei Bibliotheken aus dem Windows API Code Pack notwendig:
// Erzeuge einen ShellSearchFolder ShellSearchFolder searchFolder; if (ShellLibrary.IsPlatformSupported) { searchFolder = new ShellSearchFolder( finalSearchCondition, (ShellContainer)KnownFolders.DocumentsLibrary, (ShellContainer)KnownFolders.PicturesLibrary, (ShellContainer)KnownFolders.VideosLibrary); } else { searchFolder = new ShellSearchFolder( finalSearchCondition, (ShellContainer)KnownFolders.Documents, (ShellContainer)KnownFolders.Pictures, (ShellContainer)KnownFolders.Videos); }
// DataList die die Ergebnisse anzeigt _result.ItemsSource = searchFolder; }
Die Methode GetSearchCondition ist folgendermaßen implementiert:
private SearchCondition GetSearchCondition(string searchText) { // Einzelne Suchbegriffe aus dem Textbilden string[] words = searchText.Split(’ ‘); // Das Suchergebnis ist erstmal leer SearchCondition combinedPropertyCondition = null; // Für jedes Word im Suchtext eine Suchbedingung erzeugen foreach (string word in words) { // Erste Suchbedingung –> Suche nach Dateinamen SearchCondition propertyCondition1 = SearchConditionFactory.CreateLeafCondition( SystemProperties.System.FileName, word, SearchConditionOperation.ValueContains); // Zweite Suchbedingung –> Suche nache Keywords/Tags in Datei SearchCondition propertyCondition2 = SearchConditionFactory.CreateLeafCondition( SystemProperties.System.Keywords, word, SearchConditionOperation.ValueContains); // Wir wollen eine Oder-Bedingung für Tags oder Dateiname SearchCondition tmpCombinedCondition = SearchConditionFactory.CreateAndOrCondition( SearchConditionType.Or, false, propertyCondition1, propertyCondition2);
// Falls es bereits eine Suchbedingung gibt,
// verknüpfe die neue und die alten mit AND if (combinedPropertyCondition != null) { combinedPropertyCondition = SearchConditionFactory.CreateAndOrCondition( SearchConditionType.And, false, combinedPropertyCondition, tmpCombinedCondition); } else { combinedPropertyCondition = tmpCombinedCondition; } } return combinedPropertyCondition; }
Die Suche an sich wird über die Klasse ShellSearchFolder ausgeführt. Die Definition der Suchanfrage erfolgt über die SearchConditions. Welche Ordner durchsucht werden sollen, wird mit Hilfe von „KnownFolders“, so genannten bekannten Ordner definiert.
searchFolder = new ShellSearchFolder( finalSearchCondition, (ShellContainer)KnownFolders.DocumentsLibrary, (ShellContainer)KnownFolders.PicturesLibrary, (ShellContainer)KnownFolders.VideosLibrary);
Das Suchergebnis kann man nun visualisieren wie man möchte. Ich habe mich in diesem Beispiel auf eine einfache Liste beschränkt. Im Windows API Code Pack steht dazu eine vollwertige WPF-Visualisierung zur Verfügung.
Meine Programme stürzen nicht ab! Nein ganz bestimmt nicht! Versprochen! Großes Indianer-Ehrenwort!
Aber falls es doch mal passiert, dass eine Anwendung „abstürzt“, bzw. einfach nicht das tut, was man von ihr erwartet, dann kann man das jetzt stilvoll und mit einem automatischen Neustart der Anwendung geschehen lassen. Hierbei hilft die Restart-And-Recovery-API, die bereits in Windows Vista eingeführt und nun in Windows 7 erweitert wurde.
Jeder von uns war bestimmt schon einmal in der Situation, dass er lange an einem Dokument gearbeitet hat bis die Anwendung plötzlich einfach abgestürzt ist. Die Anwendung reagiert einfach nicht mehr und alle Daten sind verloren. Vielleicht haben sie es auch schon einmal gesehen, dass einige Anwendungen nach einem Absturz anbieten, direkt wieder neu zu starten. Und im Startvorgang werden dann die verloren geglaubten Daten wiederhergestellt. Benutzer solcher Anwendungen können sich glücklich schätzen.
Die Anwendung läuft noch ….
Ups, die Anwendung funktioniert nicht mehr.
Und startet sich von selbst neu.
Eine quasi sich selbst regenerierende Anwendung kann jeder mit Hilfe der Restart-And-Recovery-API erstellen. Es sind nur wenige Schritte dazu notwendig:
Schritt 1: Registrieren der Anwendung für einen Restart
Schritt 4: Prüfen, ob der Benutzer den Restart abgebrochen hat
private void PingSystem() { // Find out if the user canceled recovery. bool isCanceled = ApplicationRestartRecoveryManager.ApplicationRecoveryInProgress();
if (isCanceled) { Console.WriteLine("Recovery has been canceled by user."); Environment.Exit(2); } }
Schritt 5: Daten beim Neustart wiederherstellen
private void RecoverLastSession(string command) { if (!File.Exists(RecoveryFile)) { MessageBox.Show(this, string.Format("Recovery file {0} does not exist", RecoveryFile)); internalLoad = true; textBox1.Text = "Could not recover the data. Recovery data file does not exist"; internalLoad = false; UpdateAppTitle(); return; }
Die Windows 7 Sensor API ist eine neue Programmierschnittstelle für die Steuerung von Sensoren. Bei Sensoren kann es sich um interne und externe Erweiterungen des PCs handeln, die dem Computer Informationen über „äußere“ Zustände vermitteln. Die häufigsten Einsatzszenarien sind derzeit die Erkennung der Umgebungshelligkeit, der Beschleunigung des PCs selbst oder des angeschlossenen Sensors. Darüber hinaus kann man Software-Sensoren erstellen, die bestimmte Werte ermitteln und an die API übergeben und damit unseren Anwendungen bereitstellen.
Was kann man tun, wenn man keine Sensoren installiert hat?
Man muss sich nicht unbedingt einen neuen Rechner mit Sensorhardware kaufen, denn es gibt durchaus Alternativen. Das Windows 7 SDK bringt zum Beispiel einen Sensor für Licht mit. Es handelt es sich um einen Lichtsensor-Emulator, den der User über einen einfachen Schieberegler steuern kann.
Um den Treiber dafür erfolgreich im System zu installieren, muss man wie folgt vorgehen:
Eine Kommandozeile mit administrativen Rechten starten (cmd.exe mit „Run as“-Option)
Wechseln in den Windows SDK Bin-Ordner
Eingabe von pnputil -a VirtualLightSensorDriver.inf
Bei einer Nachfrage, ob der Treiber wirklich installiert werden soll, mit Ja antworten
Warten bis die Meldung erscheint, dass der Treiber erfolgreich installiert wurde
Ausführen des virtuellen Lichtsensors
Starten der Anwendung “VirtualLightSensor.exe” aus dem Windows SDK Bin-Ordner
Bestätigen, dass der Sensor gestartet werden soll
Einen Moment lang wird die Meldung „Waiting“ angezeigt. Der virtuelle Lichtssensor wird in diesem Moment als „Gerät“ installiert. Anschließend kann der Schieberegler verwendet werden, um die Lichtstärke in Lux zu simulieren
Programmieren mit Sensor API
Die Funktionen, um auf die Sensoren im Computer zugreifen zu können, sind über die SensorManager-Klasse erreichbar. Sie ist Bestandteil des Windows API Code Pack und kann über die darin enthaltene Bibliothek „Sensors“ eingebunden werden.
Um generell erkennen zu können, ob sich an den Sensoren etwas ändert (Aktivierung und Deaktivierung), reicht das Ereignis SensorsChanged. Um zu erkennen, welche Sensoren im System enthalten sind, kann die Methode GetAllSensors verwendet werden. Diese liefert alle Sensoren zurück, die im System derzeit aktiv sind. Jedes zurückgelieferte Objekt ist von der Klasse Sensor abgeleitet.
private void InitSensors() { SensorManager.SensorsChanged += new SensorsChangedEventHandler(SensorManager_SensorsChanged);
foreach (var sensor in SensorManager.GetAllSensors()) { sensor.DataReportChanged += new DataReportChangedEventHandler(sensor_DataReportChanged); sensor.StateChanged += new StateChangedEventHandler(sensor_StateChanged); Debug.WriteLine(sensor.FriendlyName); } }
Um mit einem Lichtsensor zu arbeiten, kann man den AmbientLightSensor verwenden. Dieser verfügt über die Eigenschaft CurrentLuminousIntensity, welche die Intensität in Lux zurückliefert. Darüber kann erkannt werden, ob das aktuelle Umgebungslicht hell oder dunkel ist. Das macht besonders dann Sinn, wenn man in wechselnden Umgebungen arbeitet, wie z.B. im ICE (Tunnel, Sonnenlicht, Bahnhof, usw.). Einige Notebookhersteller haben dafür schon Sensoren im Rechner eingebaut und regeln so die Helligkeit des Bildschirms.
SensorList<AmbientLightSensor> alsList = SensorManager.GetSensorsByTypeId<AmbientLightSensor>( ); int ambientLightSensors = 0;
foreach( AmbientLightSensor sensor in alsList ) { // set intial progress bar value sensor.TryUpdateData( ); float current = sensor.CurrentLuminousIntensity.Intensity; pb.Value = Math.Min( (int)current, maxIntensity );
// Set up automatc data report handling. sensor.AutoUpdateDataReport = true; sensor.DataReportChanged += new DataReportChangedEventHandler( DataReportChanged ); ambientLightSensors++; }
if( ambientLightSensors == 0 ) { // No Sensor found } } catch( SensorPlatformException exc) { // This exception will also be hit in the Shown message handler. }
Das Ereignis DataReportChanged wird immer dann ausgelöst, wenn sich am Sensor etwas verändert. Das geschieht asynchron als Hintergrundprozess und muss daher bei Interaktion mit dem UI-Thread wieder mit diesem synchronisiert werden. Die Umsetzung lässt sich sehr einfach mit der folgenden Ereignisbehandlung realisieren:
void DataReportChanged( Sensor sender, EventArgs e ) { AmbientLightSensor als = sender as AmbientLightSensor; BeginInvoke( new MethodInvoker( delegate { float current = als.CurrentLuminousIntensity.Intensity; } ) ); }
Arbeiten mit Bewegungs- bzw. Beschleunigungssensoren
Inzwischen gibt es auch immer mehr Hardware mit so genannten Bewegungssensoren. Diese erkennen Beschleunigung in den drei Bewegungsachsen. Dadurch ergeben sich ganz neue Möglichkeiten der Steuerung.
Ich selbst habe ein externes Sensorboard der Firma Freescale zu Testzwecken an meinem Rechner. Damit verfügt man quasi über einen Joystick, der eine dreidimensionale Steuerung erlaubt.
Um diesen Sensor anzusprechen, benötigt nicht viel mehr Code als für Lichtsensoren.
Das Auslesen der Daten geschieht ebenfalls im DataReportChanged-Ereignis der SensorManager-Klasse:
void sensor_DataReportChanged(Sensor sender, EventArgs e) { Debug.WriteLine(sender.FriendlyName); if (sender is Accelerometer3D) { Dispatcher.BeginInvoke(new Action(delegate { Accelerometer3D accel = sender as Accelerometer3D; MoveBall(accel.CurrentAcceleration[AccelerationAxis.X], accel.CurrentAcceleration[AccelerationAxis.Y], accel.CurrentAcceleration[AccelerationAxis.Z]); })); } }
Die Methode MoveBall macht nichts anderes als einen Ball um die übergebenen X-,Y- und Z-Koordinaten zu verschieben.
Ein schönes Beispiel ist im Windows API Code Pack enthalten. Dieses visualisiert die aktuelle Beschleunigung des Sensors in X-,Y- und Z-Richtung.
Heute möchte ich eine kleine Zusammenfassung für Entwickler bereit stellen – für jeden der schnell und kompakt eine Übersicht über die vielen kostenfreien Angebote von Microsoft haben möchte.
Die folgenden Webseiten bieten kostenfreie Downloads oder Inhalte an, die von jedem genutzt werden dürfen, die sich gerne mit der Windows-Programmierung und im Besonderen mit Windows 7 befassen möchten.
MSDN Online –Microsoft Developer Network
Was kann man bei MSDN Online finden? Im Prinzip ist die Antwort einfach formuliert: Alles! Im Detail heißt das, dass es dort alles zu unseren Programmiersprachen (Visual Basic, Visual C++, Visual C#), unseren Werkzeugen für Entwickler (Visual Studio, Visual Studio Express, Visual Studio Team System) und unseren Betriebssystemen (Windows Client, Windows Server, Windows Mobile, Windows Embedded) zu finden gibt.
Neben Webcasts und Videos, die von Experten auf ihren Gebieten erstellt wurden, finden sich dort auch viele technische Artikel und Downloads. Man kann sich auf MSDN Online aber auch für Newsletter (http://www.microsoft.com/germany/msdn/flash/default.mspx) und RSS-Feeds (http://msdn.microsoft.com/de-de/bb821267.aspx) registrieren, die in regelmäßigen Abständen über aktuelle Themen informieren.
Außerdem findet man dort seit kurzem das sehr spannende und amüsante MSDN TV. Link: http://www.microsoft.com/germany/msdn/msdntv/default.mspx
Wer mehr über die MSDN Subscription erfahren möchte, ist dort ebenfalls hervorragend aufgehoben. Kurz formuliert handelt es sich dabei um ein Abonnement für sämtliche aktuellen und kommenden Microsoft-Produkte und -Technologien, die man uneingeschränkt als Entwickler für sich verwenden kann. Link: http://msdn.microsoft.com/de-de/subscriptions/default.aspx
Beim Microsoft® Windows® SDK handelt es sich um einen Satz von Tools, Codebeispielen, Dokumentationen, Compilern, Headern und Bibliotheken, mit denen Entwickler Anwendungen erstellen können, die unter Microsoft Windows-Betriebssystemen mit systemeigenen (Win32) oder verwalteten (.NET Framework) Programmiermodellen ausgeführt werden.
In den meisten Fällen sollten Sie die neueste Windows SDK-Version verwenden, die mehrere Windows-Betriebssysteme und .NET Framework-Versionen unterstützt
Windows API Code Pack for Microsoft .NET Framework
Das Windows API Code Pack for Microsoft .NET Framework bietet eine Quellcodebibliothek an, die es ermöglicht, die neuen Windows 7 Funktionen in .NET-Anwendungen zu verwenden.
Das Windows 7 Training Kit beinhaltet Präsentationen, Hands-on-labs und Demos, die dafür entwickelt wurden, die neuen Funktionen von Windows 7 verwenden zu können.
1. Windows 7 beinhaltet das .NET Framework 3.5 SP1
Das .NET Framework 3.5 SP1 ist in Windows 7 enthalten. Das sind gute Nachrichten:
Softwareverteilung: Für eine Clientanwendung heißt dies bei der Softwareverteilung, dass das .NET Framework schon auf Windows 7 Computern vorhanden ist und nicht zusätzlich installiert werden muss
Kompatibilität: Da Windows 7 mit dem .NET Framework 3.5 SP1 bereitgestellt wird, kann man sicher sein, dass sehr viele Integrationstests durchgeführt wurden, um das Funktionieren der .NET Runtime und Bibliotheken mit dem OS zu gewährleisten.
2. Visual Studio 2008 funktioniert problemlos mit Windows 7
Ich benutze Visual Studio 2008 zusammen mit Windows 7 auf meinen Notebook und meinem Entwicklungsdesktop und habe keinerlei Probleme. Wie gewohnt, kann man mit Visual Studio 2008 noch .NET 2.0, .NET 3.0 und .NET 3.5 SP1 Anwendungen für andere OS-Versionen, z.B. Windows XP oder Windows Vista, erstellen.
3. Man kann Anwendungen schreiben, die unter Windows XP bis Windows 7 laufen …
und die Features des Gast-Betriebssystems nutzen. Es gibt eine Beispielanwendung „PhotoView“, die demonstriert, wie man eine .NET-Anwendung schreibt, die von XP bis Windows 7 lauffähig ist und die Features der einzelnen Gast-Betriebssysteme optimal ausnutzt. Den Sourcecode und eine Beschreibung der Anwendung gibt’s unter –> http://code.msdn.microsoft.com/XP2Win7.
4. Man kann heute .NET-Anwendungen schreiben, welche die coolen Features von Windows 7 nutzen
Die Multifunktionsleiste wurde neu in Windows 7 integriert und entspricht nahezu der Multifunktionsleiste von Office 2007. Nahezu bedeutet dabei, dass sie konsequent weiterentwickelt wurde.
Windows 7 und die Multifunktionsleiste
Die Multifunktionsleiste ist in einige Klassiker eingeflossen: Paint und WordPad. Schade ist, dass sie es nicht auch in Notepad geschafft hat.
Die Multifunktionsleiste ist ebenso in Windows Live Movie Maker integriert worden. Dieser läuft auch unter Windows Vista und zeigt, dass die Multifunktionsleiste auch auf Vista verfügbar sein wird.
Entwickeln mit der Multifunktionsleiste
Windows 7 führt ein neues natives API für Multifunktionsleisten-basierte Oberflächen ein. Dieses API ist COM-basiert. Das API wird in Zukunft auch für Windows Vista verfügbar sein und nahezu den gleichen Funktionsumfang wie die Office 2007-Multifunktionsleiste haben.
Um als Entwickler die Multifunktionsleiste verwenden zu können, benötigt man das Windows 7 SDK (Link). Im SDK finden Sie unter anderem die Header-Datei (UIRibbon.h), die den Zugriff auf die Multifunktionsleiste bietet.
Die Programmierung der Multifunktionsleiste teilt sich in zwei Bereiche auf: Im Deklarationsteil werden die verschiedenen Elemente, wie z.B. Tabreiter, Gruppierungen oder Kommandos, deklariert und ihr Aussehen beschrieben. Diese Beschreibung kann mit XAML (Extensible Markup Language) geschrieben werden. Die Ausführung der Kommandos und das Wechseln in verschiedene Zustände wird über C++-Code beschrieben, der die Darstellung mit der Anwendungslogik verknüpft, der eigentlichen Anwendungslogik.
Dadurch erhält man eine starke Separation in Model, Sicht und Controller, die den Code und das Markup entkoppelt. Die gesamte C++-API dazu ist sehr kompakt gehalten. Sie ist auf Kommandos fokussiert und nicht auf Steuerelemente oder Darstellungsdetails.
Welche Steuerelemente bringt die Multifunktionsleiste mit
Die Multifunktionsleiste verfügt über ein sehr großes Repertoire an Steuerelementen, die wir bereits aus Paint, WordPad und dem Windows Live Movie Maker her kennen.
Eine Funktion die nicht direkt in der Multifunktionsleiste integriert ist, sondern an beliebigen Stellen in der Anwendung verwendet werden kann, ist das erweiterte Kontextmenü. In WordPad erscheint dies leicht transparent, wenn man einen Text markiert. Darüber kann man dann zum Beispiel den selektierten Text formatieren. Diese Funktion erspart dem Benutzer, größere Strecken mit der Maus zurückzulegen und somit seinen aktuellen Fokus (den Text) zu verlassen.
Markup der Multifunktionsleiste
Der Markup-Code für die Multifunktionsleiste unterteilt sich in zwei Bereiche: Command-Sektion und Views-Sektion.
Die Command-Sektion beinhaltet die einzelnen Command-Elemente: einen Referenznamen, ein Label, eine eindeutige ID, ein Bild (BMP) und einen Tooltip.
Die Views-Sektion legt die Organisation der Kommandos in Tabs, Gruppen, Quick Access-Toolbar und Anwendungsmenü fest. Sie bestimmt außerdem, welches Steuerelement für welches Kommando verantwortlich ist.
Die Multifunktionsleiste unterstützt zwei Arten von “Sichten”: die Multifunktionsleisten-Sicht und die kontextuelle UI-Sicht. Die kontextuelle UI-Sicht bietet ein reicheres Kontextsystem als bisherige Kontextmenüs.
Da es sich bei der Multifunktionsleiste um eine native API handelt, muss aus der XAML-Datei erst einmal eine native Ressource erstellt werden. Dies geschieht mit einem Tool aus dem Windows SDK: UICC.exe. Dieses generiert aus der XAML-Datei eine Ressource, die man wiederum in seine Anwendung einbinden kann und dadurch die Multifunktionsleiste als nativen Code vorliegen hat.
UICC.exe konvertiert XAML in ein binäroptimiertes Format und erstellt eine .rc-Datei, welche den binären “blob” mit den verwendeten Ressourcen enthält. Man sollte einen benutzerdefinierten Build-Step für die Erstellung der .rc-Datei mittels UICC.exe in sein Projekt einbauen, damit dieses automatisch während des Erstellens geschieht. Eine .h-Datei, die die #defines für die diversen Command-IDs enthält, wird ebenfalls generiert.
Anwendungsmodi
Durch Anwendugsmodi lässt sich die Darstellung von Elementen an den aktuellen Anwendungszustand koppeln, denn nicht immer soll alles sichtbar sein. In Microsoft Paint wird z.B. der Text-Tab nur angezeigt wenn man Text bearbeitet. Ansonsten wird diese Funktion nicht benötigt. Im Markup-Code definiert man die Anwendungsmodi, in denen die Elemente sichtbar sein sollen. Der Anwendungsmodus wird auf untergeordnete Steuerelemente automatisch vererbt.
class CApplication : public CComObjectRootEx<CComMultiThreadModel>, public IUIApplication, public IUICommandHandler { public: BEGIN_COM_MAP(CApplication) COM_INTERFACE_ENTRY(IUIApplication) COM_INTERFACE_ENTRY(IUICommandHandler) END_COM_MAP()
Die Taskleiste in Windows 7 hat eine lange Geschichte hinter sich.
Geschichte der Taskleiste
In Windows 1 gab es die Taskleiste noch nicht, es gab lediglich einfache Symbole am unteren Rand. Man konnte die Symbole noch nicht einmal verschieben. Aber der Kenner weiß, dass bereits in dieser Version das „Docking“ der Fenster von Microsoft erfunden wurde. Dieses Feature ist zwar in folgenden Versionen verschwunden, aber in Windows 7 „wieder auferstanden“.
In Windows 2.x konnte man Anwendungen mit Hilfe des Program Managers starten. Man hangelte sich dabei durch verschiedene Fenster, die innerhalb des Program Managers geöffnet und geschlossen werden konnten. Um schneller auf Anwendungen zugreifen zu können, konnte man bereits „Shortcuts“ auf den Desktop legen.
In Windows 95 hielt die Taskleiste und der Start-Knopf Einzug. Erstmals wurden ausgeführte Anwendungen als Symbole in der Taskleiste angezeigt und konnten darüber hinaus minimiert, maximiert und geschlossen werden. Darin hat sich bis zum heutigen Tage auch wenig verändert.
In Windows XP wurde die komplette Taskleiste in ein neues Design überführt.
Mit Windows Vista kam zum ersten Mal die Möglichkeit auf, innerhalb des Startmenüs nach Programmen und Funktionen zu suchen bzw. die Suche über den gesamten Computer zu starten. Dieses Feature wurde auch nötig, da die Programmflut im Startmenü dank vieler Zeitschriften mit CD-Beilagen ins Unermessliche gestiegen war
In Windows 7 wurde Taskleiste visuell sehr „vereinfacht“ und mit vielen neuen Funktionen erweitert. Gestartete Programme werden in der gleichen Leiste angezeigt wie Verknüpfungen. Lediglich das Aussehen unterscheidet nun zwischen den verschiedenen Status der Anwendung.
Bei diversen Benutzerumfragen wurden folgende Fakten festgestellt:
Mehr als 90 % aller Benutzersitzungen haben weniger als 15 gleichzeitig geöffnete Fenster.
Mehr als 70 % aller Sessions haben weniger als 10 Fenster gleichzeitig geöffnet.
Nicht-Standard-Optionen wurden nur von max. 10 % aller Benutzer überhaupt verwendet.
Die Ziele für die Entwicklung der neuen Taskleiste sind daher wie folgt definiert worden:
Eine Startoberfläche für alle Anwendungen und Ziele
Die am meisten benutzten Elemente sollen auf „Fingertipp“ bereitstehen
Einfach kontrollier- und verwaltbar mit einfachsten Mitteln
Sauber, störungsfrei und einfach
Terminologie und Funktionen der neuen Taskleiste
Taskleisten-Schaltflächen Jede Anwendung, jedes Ziel und jede Verknüpfung wird durch ein Symbol auf der Taskleiste dargestellt. Gestartete bzw. geöffnete Anwendungen und Ziele werden als Schaltfläche dargestellt. Sind mehrere Instanzen ein und derselben Anwendungen geöffnet, werden diese kaskadierend dargestellt. Dies kann aber über die Eigenschaften der Taskleiste nach eigenen Wünschen verändert werden.
Die Schaltflächen lassen sich sehr vielseitig anpassen. Folgende Möglichkeiten hat der Benutzer:
Änderung der Darstellung durch Overlays
Darstellung mehrfarbiger Fortschrittsbalken
Ändern des Hintergrunds
Damit hat man die Möglichkeit den Status der Anwendung innerhalb der Startleiste zu visualisieren. Folgende Szenarien wären denkbar: Läuft die Anwendung, behält sie das normale Symbol. Muss der User eine Interaktion durchführen, lässt man das Symbol pulsieren, liegt ein Problem vor, zeigt man zum Beispiel ein rotes Kreuz an.
Sprunglisten, Ziele und Aufgaben Jedes Symbol in der Taskleiste hat eine so genannte Sprungliste. Innerhalb dieser Sprungliste gibt es Elemente die jede Anwendung besitzt: Öffnen, Alle Fenster schließen und an die Taskleiste heften bzw. von dieser entfernen. Darüber hinaus kann eine Sprungliste noch zusätzliche Dinge anzeigen. Ist eine Anwendung z.B. mit einem bestimmten Dateityp assoziiert, wie z.B. Word mit Doc-Dateien, dann werden diese automatisch unter „Zuletzt verwendet“ in der Sprungliste angezeigt. Möchte man dort vielleicht ein Dokument immer wieder öffnen, so kann man dies „anheften“. Dadurch steht es solange in dieser Liste, bis man es wieder entfernt. Diese Funktionen stehen jeder Anwendung sofort aus dem Stand zur Verfügung, ohne dass dazu Code notwendig ist. Zusätzlich lassen sich innerhalb der Sprungliste aber auch noch Aufgaben integrieren. Das können beliebige Tätigkeiten sein. Der Windows Live Messenger macht es vor und bietet die folgenden Aufgaben an: MSN Startseite anzeigen, Postfach öffnen, Sofortnachricht senden, Online, Offline, Abwesend, usw. Das neue Outlook 2010 bietet ähnliche Funktionalitäten, so kann man über die Sprungliste sofort eine Email erstellen, einen Termin planen, direkt den Kalender aufrufen, u.v.m. Wenn man dieses Feature einmal verwendet hat, möchte man es nicht mehr missen.
Thumbnail-Toolbars Ein weiteres neues Feature sind die Thumbnail-Toolbars. Als gutes Beispiel geht der Windows Media Player voran. Geht man mit der Maus über das Symbol des laufenden Mediaplayers, sieht man das aktuelle Video oder Musikcover und zusätzlich die Möglichkeit den Player zu starten, ein Element zurück- oder eines vorzuspringen. Dadurch lässt sich der Player direkt aus der Startleiste steuern, ohne dass man ihn erst einmal in den Vordergrund holen muss.
Auch die Darstellung der Vorschau in der Taskleiste ist individuell anpassbar. Man hat in der Startleiste und deren Vorschau ja nicht beliebig viel Platz. Daher kann man die Darstellung in der Vorschau nach eigenen Wünschen gestalten und nur das Wesentliche anzeigen lassen.
Verwendung von Managed Code
Die einfachste Art und Weise, um auf die Funktionen der Taskleiste zuzugreifen ist das Windows API Code Pack (http://code.msdn.microsoft.com/WindowsAPICodePack). Dieses wurde bereits vor einigen Tagen vorgestellt. Bindet man dieses in sein eigenes Projekt ein, kann man direkt auf die Funktionen der Taskleiste zugreifen.
Um beispielsweise ein Overlay-Symbol über dem Anwendungssymbol einzublenden, ist der folgende Code notwendig.
Bei den Sprunglisten handelt es sich um eine neue Funktionalität, die es ermöglicht, dem Anwendungssymbol zusätzliche Funktionen hinzuzufügen. Einfach auf dem Symbol die rechte Maustaste drücken und schon erscheint die Sprungliste. Standardmäßig sind die Funktionen zum Öffnen, Schließen und Anheften enthalten. Wenn die Anwendung die Funktionen „Zuletzt verwendete Dokumente“ und „Häufig verwendete Dokumente“ unterstützt, so werden diese Dokumente ebenfalls direkt in der Sprungliste angezeigt. Diese Liste der Dokumente kann für eigene Anwendungen sehr leicht angepasst werden.
Für einen einfachen Zugriff empfiehlt sich die Verwendung des Windows API Code Pack (Link kommt hier rein). Verwendet man diese Bibliothek, dann lässt sich die Liste der Dokumente über die folgenden Zeilen Code steuern:
private JumpListCustomCategory category1 = new JumpListCustomCategory("Custom Category 1");
Möchte man eine eigene Aufgabe zur Taskleiste hinzufügen, die dafür sorgt, dass ein bestimmtes Programm geöffnet wird, so geht dies mit den folgenden Zeilen Code.
// Path to Windows system folder string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
Wer gerne Schnellzugriff auf frei konfigurierbare Tools haben möchte, dem kann ich den Jumplist-Launcher empfehlen. Ein kostenfreies Tool, das es hier (Link: http://www.ali.dj/jumplist-launcher/) gibt. Damit lassen sich bis zu 60 Programme frei in der Jumplist konfigurieren.
Das Windows API Code Pack for Microsoft .NET Framework ist eine .NET-Bibliothek für die Nutzung einiger der neuen Windows 7-Features sowie Funktionen aus älteren Betriebssystemen. Diese Bibliothek beinhaltet Funktionen, die so heute noch in keinem .NET Framework enthalten sind. Die nächste Version des .NET Framework wird große Teile dieser Bibliothek übernehmen, allerdings dauert das noch eine Weile. Leider kann aber wegen des Open Source-Charakters momentan keine hundertprozentige Gewährleistung gegeben werden, dass die Bibliotheken im .NET Framework genauso aussehen werden, wie im Code Pack.
Das tolle an diesen Bibliotheken ist, dass sie im Quellcode vorliegen und so von jedem erweitert werden können. Dadurch erhält man die Sicherheit, dass die eigenen Anwendungen auch noch mit späteren Versionen des .NET Framework funktionieren werden.
Das Code Pack gibt es derzeit in der Version 1 und enthält die folgenden Bestandteile:
Windows 7 Taskbar Sprunglisten, Symboloverlays, Fortschrittsbalken, Tabbed Thumbnails und Thumbnail Toolbars.
Windows 7-Bibliotheken, bekannte Ordner, Nicht-Filesystem-Container.
Windows Shell Search API Support, eine Vielzahl von Shell-Funktionen inkl. Drag und Drop für Shell-Objekte (z.B. Dateien).
Explorer Browser Control.
Shell-Eigenschaften.
Windows Vista- und Windows 7-Dateidialoge, einschließlich benutzerdefinierter Steuerelemente.
Windows Vista und Windows 7 Task-Dialoge.
Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs. (DirectWrite und WIC sind derzeit nur teilweise unterstützt)
Sensor Platform APIs
Extended Linguistic Services APIs
Power Management APIs
Application Restart and Recovery APIs
Network List Manager APIs
Command Link Steuerelement und System-Symbole.
Shell Search API support.
Support für Direct3D- und Direct2D-Interoperabilität.
Support von Typographie und Schriftarten für DirectWrite APIs.
Die Anforderungen des Code Pack
.NET Framework 3.5 SP1 Ist mindestens erforderlich
Diese Bibliothek adressiert Windows 7 RTM (bereits verfügbar für alle MSDN Subscriber), einige Features funktionieren allerdings auch auf älteren Windows Betriebssystemen.
DirectX Features benötigen das Windows SDK für Windows 7 RTM. Zusätzlich benötigen einige Direct3D-Beispiele das DirectX SDK (Version August 2009).
Erstellen und Verwenden der Bibliothek
Um die Bibliothek zu erstellen (ausgenommen die DirectX betreffenden Features), benötigt man Visual Studio 2008. Der gesamte Inhalt des Pakets „WindowsAPICodePack.zip“ sollte dafür in einen neuen Ordner entpackt werden. Darin enthalten ist die Datei „WindowsAPICodePack.sln“, die die gesamte Lösung beinhaltet.
Für das Erstellen der DirectX-Features wird“DirectX.sln“ innerhalb des DirectX-Verzeichnisses benötigt. Eine genauere Beschreibung der Anforderungen ist in der einer Hilfedatei im selben Ordner beschrieben
Welche Beispiele sind im Code Pack enthalten?
Das Code Pack beinhaltet neben den Bibliotheken auch einige Beispielanwendungen, die sofort lauffähig sind, um die Verwendung erfolgreich zu demonstrieren. Jedes Beispiel ist sowohl in C# also auch in Visual Basic .NET verfügbar.
Konkret enthalten sind Beispiele für Explorer-, Netzwerk-, Ribbon-, Startleiste-, Sensor- und Dialog-Bibliotheken.
Microsoft bringt für jede Version von Windows ein besonderes Kit für die Entwicklung von Anwendungen heraus. Dieses steht Interessierten kostenfrei zur Verfügung: Das Windows Software Development Kit.
Beim Microsoft Windows SDK handelt es sich um einen Satz von Tools, Codebeispielen, Dokumentationen, Compilern, Headern und Bibliotheken, mit denen Entwickler Anwendungen erstellen können, die unter Windows-Betriebssystemen mit systemeigenen (Win32) oder verwalteten (.NET Framework) Programmiermodellen ausgeführt werden.
Natürlich gibt es dieses SDK auch für Windows 7. Je nach Funktionsumfang ist es zwischen 300 KB und 4 GB groß. Daher kann die Installation je nach Netzwerkverbindung auch mal etwas länger dauern. Im SDK findet sich für jeden Entwickler einiges an hilfreichen Codebeispielen und Werkzeugen für den eigenen Werkzeugkasten.
Hier an der Stelle noch mal der sehr wichtiger Hinweis: Das Windows SDK ist ein Kit an Software-Entwicklungshilfen. Es ist teilweise sehr komplex und umfangreich. Da die Dokumentation teilweise direkt von den Entwicklern kommt, sind alle Bestandteile ausnahmslos im Englisch gehalten. Wäre es ganz einfach, dann könnte es ja jeder .
Möchte man sehen, welche Version des SDKs für welches Betriebssystem installiert ist, kann man das mit dem Configuration Tool ermitteln und einstellen. Ein wichtiger Einstiegspunkt ist die Dokumentation die mitgeliefert wird.
Wer behauptet, dass sich von Windows Vista zu Windows 7 nicht viel getan hat, der darf sich gerne die folgende Liste mit neuen und erweiterten APIs auf der Zunge zergehen lassen:
Active Directory Rights Management Services
Biometric Service API
COM
Core Windows
Enhanced Storage
Enhanced Taskbar
Event Tracing for Windows (ETW)
Extended Linguistic Services
File Server resource Manager
Hardware Counter Profiling
Hyper-V
Internet Explorer
Location API
Mobile Broadband
Native Wifi
Network Share Management
Packaging
Parental Controls
Peer Distribution
Performance Counters
Power Management
Scenic Animation
Sensor API
Virtual Disk Service
Virtual Hard Disk
Volume Shadow Copy Service
Windows Connect Now
Windows Error Reporting
Windows Event Log
Windows Gadget Platform
Windows Installer
Windows Scenic Ribbon
Windows Touch
Windows Troubleshooting Platform
Windows Web Services
XPS Documents
Einige davon, definitiv nicht alle, werden wir hier noch genauer vorstellen.
Was befindet sich im SDK?
Im SDK befinden sich Beispielanwendungen auf „Hallo Welt“-Niveau für erste Schritte in bestimmten Bereichen bis hin zu sehr komplexen Beispielen, die die Technologien tiefer demonstrieren.
Tools für Managed Code
ASPNet_merge.exe (ASP.NET Merge Tool für Assemblies)
SqlMetal.exe (Code Generation Tool für SQL Tabellen in .NET-Klassen)
Xsltc.exe (XSLT Compiler für XSLT-Style Sheets in Assemblies für eine bessere Performance)
Tools für Native (Win32 und COM) Entwicklung
BETest.exe (VSS Backup und Restore Test Tool)
Checkv4.exe (IPv6 Compatibility Check Tool, Hilft IPv4-Code aufzuspüren und gibt Tipps für Anpassung auf IPv6)
Weitere Werkzeuge, die man aus dem SDK nach installieren kann
Background Intelligent Transfer Service (BITS)
CAPICOM (Bietet kryptografische und andere sicherheitsrelevante Dienste an)
Debug Help Library (DbgHelp, Treiber- und Anwendungsdebugger)
Group Policy Management Console (GPMC)
Rights Management Services (RMS)
Microsoft Management Console (MMC)
Windows InstallerWindows Management Instrumentation (WMI)
Windows Remote Management (WinRM)
Windows Update Agent (WUA)
Real-Time Communications (RTC)
Windows Server Update Services (WSUS)
Das Windows SDK wird pro Version übrigens mehr als eine Millionen mal heruntergeladen. Das Team besteht aus 25 Personen und wer könnte da besser das Video des Tages liefern als die Program Managerin Lori Pearce
Haben Sie sich auch schon mal gefragt, was dieses MSDN ist, ob das kostenfrei ist, ob MSDN Online das Gleiche ist wie die MSDN Subscription, ob es die über 800 Webcasts oder beispielsweise über 400 CodeClips mit dazugehörigem technischen Artikel (eine Frage, eine Antwort) wirklich kostenlos gibt? Und dies sogar alles in deutscher Sprache? Wenn Sie wirklich eine dieser Fragen sich schon mal gestellt haben oder generelles Interesse besteht MSDN kennenzulernen, so empfehle ich den Artikel:Was ist MSDN Online Deutschland?
Endlich ist es wieder soweit: Die beliebte Microsoft Webcast-DVD Jahresedition 2009 ist erschienen! Mehr als 150 Webcasts von MSDN und TechNet gebündelt in einem Offline-Archiv – die brandaktuelle Webcast DVD ist eine Sammlung der neuesten Webcasts aus dem Jahr 2009, u.a. zu Windows Server 2008 R2, Server-Virtualisierung, Windows 7, Visual Studio 2010 oder Internet Explorer 8. Bestellen Sie sich jetzt Ihr Exemplar des kompakten Expertenwissens auf DVD für 19,90 EURO inklusive Versand. Besucher der CeBIT 2010 können sich am MSDN & TechNet-Messestand in Halle 4 ihr Exemplar auch kostenlos gegen Vorlage eines Promocodes abholen – kurze Registrierung vorausgesetzt. Wir würden uns freuen, wenn wir Sie auf der CeBIT 2010 in Hannover begrüßen dürften! Weitere Informationen zur Webcast-DVD von Microsoft gibt es auf unserer Bestellwebseite: Hier geht’s zur Bestellung
Im Mittelpunkt der ersten Folge von „msdn tv” im neuen Jahr steht das Thema „PHP”: in ungewohnt frostiger Atmosphäre spricht Moderator Jan Schenk dazu mit Björn Schotte, Chefredakteur der Zeitschrift „PHPmagazin” und Mit-Geschäftsführer des IT-Dienstleisters Mayflower. Im Interview geht’s unter anderem um Microsofts allmähliche Annäherung an PHP, um Open Source und die deutsche PHP-Community. In den Kurznachrichten außerdem Infos zur neuen Kategorie „Embedded Development“ beim „Imagine Cup”-Wettbewerb, zu Silverlight- und Expression-Lehrvideos aus der Community, ’Windows 7’-Seminaren für ISVs und „Windows Azure”-Nutzungsmöglichkeiten für Bezieher der MSDN Premium Subscription.
„msdn tv – Nachrichten für Entwickler“ kommt diesmal aus Berlin und präsentiert u.a. Impressionen und Statements von der „Tech·Ed Europe 2009“. Jan Schenk hatte dort Gelegenheit, als Gesprächspartner Orlando Escalante vor Mikrofon und Kamera zu bekommen, der als „Role Owner“ der Technical Platform Evangelists bei Microsoft mitverantwortlich für die Beratung von IT-Professionals zeichnet. In den Kurznachrichten: Infos zur Beta des ASP.NET MVC Framework 2.0, eine Tutorial-Reihe rund um ‘Expression Studio‘, die Beta 2 Version von Visual Studio 2010 Ultimate und wo man sie kostenlos bekommt, das neue Facebook .NET SDK 3.0 und eine aktuelle MSDN Webcast-Serie zu ‘Powershell’. Sponsorhinweis: Unser Moderator Jan Schenk wird eingekleidet und ausgestattet von Jan Schenk
Alle Jahre wieder treibt der Weihnachtsmann auch bei MSDN sein Unwesen und lädt Entwickler zu einem besinnlichen Online-Live-Meeting ein. Seine Vertreter auf Erden, Bernd Marquardt und Neno Loje, werfen dabei wie immer einen Blick zurück auf einige Technologie-Highlights des abgelaufenen Jahres und auf solche, derer wir noch gemeinsam harren. Und nebenher veranstalten die beiden Experten der „XMAS Presentation Foundation“ natürlich auch diesmal wieder das schon legendäre Weihnachts-Gewinnspiel, bei dem Sie als Teilnehmer live Fragen beantworten und gleich etwas gewinnen können. Verlost werden professionelle Software, viele Bücher und allerlei andere nützliche Pretiosen, die den Entwickleralltag leichter machen. Was genau, wird noch nicht verraten, aber wie spricht schon der Volksmund: „Der Weihnachtsmann sagt ‚Ho, Ho, Ho‘, ich bring‘ Euch Visual …“ (Basic?, C#?)