public bool RegisterNewInstance()
        {
            // Get guid of the executing assembly
             Assembly assembly = Assembly.GetExecutingAssembly();
             GuidAttribute guidAttribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0];
             string guid = guidAttribute.Value;

             // Create mutext
             this.mutex = new Mutex(false, guid);

             // Register notify message
             if (notifyInstanceMessage == 0) {
            notifyInstanceMessage = User32Interop.RegisterWindowMessage(notifyMessageName);
             }

             // Wait on the mutext, false return value means that another instance is running
             if (!this.mutex.WaitOne(0, false)) {
            if (notifyInstanceMessage != 0) {
               User32Interop.PostMessage((IntPtr)User32Interop.HWND_BROADCAST, notifyInstanceMessage, 0, 0);
            }
            return false;
             }

             // Create a window to receive notifications
             if (this.siWindow == null) {
            this.siWindow = new SIWindow(this);
             }
             return true;
        }
 public HotKeyManager()
 {
     this.registredKeys = new Dictionary<Keys, int>();
      this.window = new HotKeyWindow(this);
 }