0

这可能是一个糟糕的标题,但我不知道如何表达它。所以这就是我所拥有的。

我有一个充当键盘钩子的程序。它捕获 F13-F24,以便人们可以分配这些键来执行一些不同的任务。

它可以打开的程序之一是我们自己制作的屏幕键盘。

这两个程序我都有源代码,但我没有制作任何一个,而是从其他人那里继承了它们。当我审查代码以修复其中的一些错误时,我注意到第一个程序以一种奇怪的方式调用第二个程序。一种我不喜欢的方式。

        IntPtr hWnd = new IntPtr();
        currentoggle = true;
        currentmultiple = false;

        System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("CustomOsk");
        if (p.Length > 0)
        {
            Globals.trace.TraceInformation("OSK loaded");

            string window = "";
            switch (currentparms.ToLower()[0])
            {
                case 's':
                    window = "Custom OSK AN";
                    break;
                case 'e':
                    window = "Custom OSK EK";
                    break;
                case 'n':
                    window = "Custom OSK NP";
                    break;
                default:
                    window = "";
                    break;
            }

            if (!string.IsNullOrEmpty(window))
            {
                hWnd = User32.FindWindow(null, window);
                if (hWnd != IntPtr.Zero)
                {
                    User32.PostMessage(hWnd, WM_TOGGLEONOFF, IntPtr.Zero, IntPtr.Zero);
                    Globals.trace.TraceInformation("ProcessKeyboard()-");
                    return true;
                }
            }
        }
        Globals.trace.TraceInformation("OSK Start");
        System.Diagnostics.Process.Start(System.Windows.Forms.Application.StartupPath + "\\CustomOsk.exe", currentparms);
        Globals.trace.TraceInformation("ProcessKeyboard()-");

我只是不认为我应该查看我的所有进程来查看当我拥有源代码时我们的自定义 OSK 是否已打开。我认为我也应该能够以某种形式直接拨打电话。所以我想,如果我可以使用 Mutex 语句,也许我可以尝试找到那个 Mutex 指针,然后向该指针发送一条消息以更改我的自定义 OSK 的状态......但后来我想可能如果我想在将来使任何一个程序变得更复杂,那么效果就不太好了。

在这一点上,我认为最好四处询问并询问什么是一个好的解决方案?

我的另一个想法是,将 OSK 变成一个库会很愚蠢,然后我可以在我的键盘挂钩程序中引用该库。为了保留它以便人们可以将屏幕上的程序作为一个单独的程序打开,我可以制作另一个非常简单的程序来再次调用这个库。这对我来说似乎是最好的,但我想知道是否有针对我已有的解决方案的不同解决方案。你的想法

为明确问题而进行了编辑

4

0 回答 0