在C#中的WndProc方法中发送密钥

时间:2018-12-20 19:19:06

标签: c# winforms

我在Windows窗体中重写WndProc方法并使用SendKeys。

如果布尔值为true,我想发送“ CTRL + N”,如果布尔值为false,我只想发送“ n”。

我的问题在这里,当我发送“ n”时发送无限的“ n”。

有什么办法解决这个问题?

   public ShiledMaker()
   {
        InitializeComponent();
        this.KeyPreview = true;
        RegisterHotKey(Handle, (int)Keys.N, 0, (int)Keys.N);
   }


  protected override void WndProc(ref Message xMessage)
  {
        base.WndProc(ref xMessage);

        if (bool value)
             SendKeys.Send("n");
        else
             SendKeys.SendWait("^n");
  }

1 个答案:

答案 0 :(得分:0)

布尔值被添加到您的类中。如果发送了密钥,则将其更改为true。这样keypress事件仅被调用一次。

class MyClass {

   private bool keySent = false;

   protected override void WndProc(ref Message xMessage)
   {
        if (keySent)
            return;

        base.WndProc(ref xMessage);

        if (bool value)
             SendKeys.Send("n");
        else
             SendKeys.SendWait("^n");

        keySent = true;

   }
}