这可能是一个糟糕的头衔,但我不知道如何用它来表达它。所以这就是我所拥有的。
我有一个程序充当键盘钩子。它捕获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
为明确问题而编辑