我可以让我的程序从另一个程序中显示出来

时间:2013-02-11 15:44:41

标签: c# shared-libraries mutex

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

我有一个程序充当键盘钩子。它捕获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是否已打开。我认为我应该能够以某种形式直接打电话。那么我想,好吧 IF 我可以使用Mutex语句,也许我可以尝试找到Mutex指针,然后向该指针发送一条消息来改变我的自定义OSK的状态......但是我觉得如果我想让将来的任何一个项目变得更加复杂,那可能效果不会很好。

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

我遇到的另一个问题是,将OSK变成库是愚蠢的,然后我可以在我的键盘钩子程序中引用该库。为了保持一个人可以打开屏幕程序作为一个单独的程序,我可以制作另一个非常简单的程序,再次调用这个库。这对我来说似乎是最好的,但我想知道我已经有了不同的解决方案。你的thouoghts

为明确问题而编辑

0 个答案:

没有答案