0

我喜欢编写一个小应用程序来在我当前的光标位置粘贴/插入一些文本。

例如:我在 Word 中:在这里我喜欢按 CTRL+ALT+1,它会在我的指针位置插入一些文本。或者我有一个打开的 Internet-Explorer 窗口、记事本、Adobe、...或任何其他应用程序

我从使用全局键盘挂钩库收听快捷键开始。

热键事件对我来说效果很好。但是现在我被卡住了,因为我找不到在光标位置粘贴/插入文本的方法。我尝试使用SendMessage/PostMessageSendKeys

SendMessage 的问题在于,如果您将它与键盘挂钩库一起使用,我无法获取每个窗口,并且 SendKeys 会被多次触发......

有什么想法可以继续吗?

热键代码:

namespace Developper_Dashboard
{
    public partial class Form1 : Form
    {
        globalKeyboardHook gkh = new globalKeyboardHook();

        private bool IsADown = false;
        private bool IsBDown = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Hide the MainForm
            this.Opacity = 0;

            // Listening Keys
            gkh.HookedKeys.Add(Keys.LControlKey);
            gkh.HookedKeys.Add(Keys.LMenu);
            gkh.HookedKeys.Add(Keys.NumPad1);
            gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
            gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
        }

        void gkh_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.LControlKey)
            {
                IsADown = false;
            }
            if (e.KeyCode == Keys.LMenu)
            {
                IsBDown = false;
            }
            if (!IsADown | !IsBDown)
            {
                this.Opacity = 0;
            }
            //e.Handled = true;
        }

        void gkh_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.LControlKey)
            {
                IsADown = true;
            }
            if (e.KeyCode == Keys.LMenu)
            {
                IsBDown = true;
            }
            if (IsADown && IsBDown)
            {
                this.Opacity = 1;
            }
            if (IsADown && IsBDown && e.KeyCode == Keys.NumPad1)
            {
                // Here the code for paste/insert...?
            }
        }

    }
}
4

0 回答 0