Lost in the matrix

C/C++/C#/Java, Multithreading

using System.Reflection;

public sealed class AssemblyInfo
{
    #region Ctors

    static AssemblyInfo()
    {
    }

    private AssemblyInfo()
    {
        PortableExecutableKinds peKind;
        ImageFileMachine machine;

        Assembly.GetCallingAssembly().ManifestModule.GetPEKind(out peKind, out machine);
        this.Kind = peKind;
        this.Machine = machine;
    }

    #endregion

    #region Public Methods

    public bool Is(PortableExecutableKinds kind)
    {
        return ((this.Kind & kind) != 0);
    }

    public bool Is(ImageFileMachine machine)
    {
        return ((this.Machine & machine) != 0);
    }

    #endregion

    #region Properties

    public static AssemblyInfo Instance
    {
        get
        {
            return (AssemblyInfo._instance);
        }
    }

    public PortableExecutableKinds Kind { get; private set; }

    public ImageFileMachine Machine { get; private set; }

    #endregion

    #region Fields

    private static readonly AssemblyInfo _instance = new AssemblyInfo();

    #endregion
}
Exemple d'utilisation:
if (AssemblyInfo.Instance.Is(PortableExecutableKinds.Required32Bit))
{
}

Voici une méthode pour envoyer un évènement "KeyPress" à un
contrôle C#. Elle ne nécessite pas d'avoir le "focus" sur
l'élément visé.
---------------------------------------------------------------
using System;
using System.Windows.Forms;
using System.Reflection;

namespace Test
{
public sealed class KeyEventSender
{
private KeyEventSender()
{
}

// WM_CHAR est définit dans l'API de windows
// notification d'un événement clavier
internal static readonly int WM_CHAR = 258;

public static void Send(Control control, char c)
{
Message m = new Message();
m.HWnd = (IntPtr)control.Handle; // "Handle" du contrôle.
m.Msg = KeyEventSender.WM_CHAR; // type de l'évènement windows
m.LParam = IntPtr.Zero; // pas d'option
m.WParam = (IntPtr)c; // valeur de caractère
// on récupère la définition de la méthode par réflexion
// car la méthode n'est pas publique
MethodInfo dynMethod = control.GetType().GetMethod("ProcessKeyEventArgs",
BindingFlags.NonPublic BindingFlags.Instance);
// on invoque la méthode.
dynMethod.Invoke(control, new object[] { m });
}

public static void Send(Control control, KeyPressEventArgs e)
{
KeyEventSender.Send(control, e.KeyChar);
}
}
}