Subclassing the FileOpen dialog in .NET

If you are looking for a way to subclass a standard file open dialog from .NET, take a look at the Vista Bridge Sample Library from Microsoft.

„Subclassing“ (or „Extending“, „Customizing“) refers to adding new controls to the bottom of the standard Windows dialog like following, to extend it:

Although the examples are for WPF, I guess it is rather simple to migrate them to WinForms (.NET 2.0).

Verstopftes Senseo-Sieb säubern

Unsere Senseo-Kaffemaschine hat vor kurzem noch groß gedröhnt und dann beim Kaffee-durch-das-Sieb-Drücken kam nix mehr raus.

Nach kurzem Googlen war das Sieb wohl verstopft. Tipps gingen von neu kaufen, über „mit Nadel durchstechen“ bis hinzu „in Essig-Essenz einlegen“.

Da ich keine Essig-Essenz hatte, habe ich folgende Schritte unternommen:

  1. Aus dem Sieb das innere schwarze Plastikteil mit dem Sieb drin rausdrücken.
  2. Das Sieb über Nacht in Balsamico-Essig einlegen.
  3. Am nächsten Tag den Sieb in eine große Kaffeetasse legen.
  4. Ein Spülmaschinen-Tab hinzugeben.
  5. Entkalkungssalz für Spülmaschinen großzügig in die Tasse geben.
  6. Im Wasserkocher Wasser zum Kochen bringen.
  7. Das kochende Wasser in die Tasse geben.
  8. Gut umrühren.
  9. Eine Stunde ziehen lassen.
  10. Für weitere paar Stunden stehen lassen.
  11. Alles in die Mikrowelle geben, mit einer Untertasse abdecken.
  12. Für 5 Minuten in der Mikrowelle erhitzen.
  13. Gut umrühren.
  14. Nochmals ein paar Stunden ziehen lassen.
  15. Sieb aus der Tasse entnehmen.
  16. Unter fließendem Wasser gut abspülen.
  17. Dabei mit Bürste gut in alle Ecken, damit die Chemie raus geht.
  18. In den Siebhalter einsetzen.
  19. Kaffe durchlassen.

Um es kurz zu machen: Danach hat alles wieder gut funktioniert. Ich hatte ganz zu Beginn schon mit einer Nadel das Sieb gut bearbeitet, hätte ich mir ggf. auch sparen können.

Wohl bekommt’s!

Handling WM_MOVING in Windows Forms

Just a quick snippet:

public class FormWithWmMoving :
    Form
{
    private const int WM_MOVING = 0x0216;

    private static readonly object EVENT_MOVING = new object();

    public event EventHandler Moving
    {
        add { Events.AddHandler(EVENT_MOVING, value); }
        remove { Events.RemoveHandler(EVENT_MOVING, value); }
    }

    public class MovingEventArgs : EventArgs
    {
        private readonly Rectangle _rectangle;

        public MovingEventArgs(
            Rectangle rectangle)
        {
            _rectangle = rectangle;
        }

        public Rectangle Rectangle
        {
            get { return _rectangle; }
        }
    }

    protected virtual void OnMoving(MovingEventArgs e)
    {
        var h = (EventHandler)Events[EVENT_MOVING];
        if (h != null)
        {
            h(this, e);
        }
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_MOVING)
        {
            var r = (Win32NativeMethods.RECT)Marshal.PtrToStructure(m.LParam, typeof(Win32NativeMethods.RECT));
            var rectangle = new Rectangle(r.left, r.top, r.Bounds.Width, r.Bounds.Height);

            var args = new MovingEventArgs(rectangle);
            OnMoving(args);
        }

        base.WndProc(ref m);
    }
}

Hope this is helpful someday to me or others.

Datenbanken zwischen 2 Oracle Express Editionen kopieren

Bei Microsoft SQL Server (Express) geht es ja relativ einfach, Datenbanken zwischen 2 Datenbank-Servern zu verschieben. Z.B.:

  1. Backup erstellen auf Server 1 und später auf Server 2 wiederherstellen. -oder-
  2. Datenbank auf Server 1 detachen (trennen), Dateien auf Server 2 kopieren und später auf Server 2 wieder attachen (anhängen).

Bei Oracle XE ist das auch möglich, allerdings ein bisschen aufwändiger und via Befehlszeile.

Rosenzuechter-sei-Dank weiß ich jetzt, wie das geht:

Exporting and Importing Data

Da ist es sehr ausführlich und Schritt-für-Schritt beschrieben.

Fehlermeldung „Klasse unterstützt keine Automatisierung“ beheben

In einem .NET-Programm (Zeta Producer, logisch) in dem ich Microsoft Active Scripting verwendet habe, kam beim Verwenden einer neuen Klasse (Zugriff aus einem VBScript auf diese Klasse) die Fehlermeldung:

Klasse unterstützt keine Automatisierung

Bzw. in Englisch:

Class does not support Automation

Die Lösung war dann ganz einfach, ich hatte die Klasse als „internal“ markiert, anstatt als „public„.

Falsch:

[ComVisible(true)]
internal sealed class MyClass
{
}

Richtig:

[ComVisible(true)]
public sealed class MyClass
{
}

So einfach ist das, nach nur 4 Stunden habe ich es schon erkannt.

PHP not executing code

Just upgraded my PHP and Apache installation on Windows. After the upgrade, the PHP pages are not executed on the server anymore but the code was sent to the browser.

Doh!

Solution was to add a line to the „httpd.conf“ file:

AddType application/x-httpd-php .php

Seems that the upgrade somehow removed the line from somewhere, maybe in the „mime.types“ file.

The line has to be added inside the „IfModule mime_module“, like in the following excerpt:

<IfModule mime_module>
    AddType application/x-httpd-php .php
</IfModule>

Works well after that. Remember to restart Apache. 🙂

Native Screenshots with Mac OS X

As a Mac newbie I was shocked that I do not have to purchase an additional software to make screenshots of the desktop or windows.

The article „How to capture a screen shot with Mac OS X“ told me how it goes.

Screenshots as PNG files saved to your desktop

  • Cmd + Shift + 3: Entire desktop
  • Cmd + Shift + 4: Select area

Screenshots as PNG files copied to the clipboard

  • Cmd + Ctrl + Shift + 3: Entire desktop
  • Cmd + Ctrl + Shift + 4: Select area

Not the most intuitive way of doing, but it’s free and working and uses PNG instead of TIFF.

TFS 2008 TF30063: You are not authorized to access server

Scenario:

  • VMware with Windows 2003 Server and Team Foundation Server (TFS) 2008. No Windows domain membership, just a stand-alone workgroup server.
  • Connecting from a client in a different AD domain with my own TFS API wrapper or with the „tf.exe“ command line tool to the server.

Error:

TF30063: You are not authorized to access server <servername>

I received the above error message all the time, even when providing a valid user name and password for the server.

Solution:

Seems that the credentials still depend somehow on the logged in user. I therefore created a new user on the TFS that has the same user name and the same password as my currently logged in workstation user.

After that, everything worked. See also this somewhat related blog posting.