我编写了一个程序来将“Enter”键发送到某个活动窗口。我使用 Timer 暂时获取活动窗口的标题并采取相应措施。我制作了一个错误日志文件,以便跟踪所有错误。这是创建错误的代码:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
try
{
ttl = GetActiveWindowTitle();
if (ttl != null)
{
if (ttl.ToLower() == "xxxxxxxxxxx")
{
SendKeys.SendWait("{ENTER}");
}
}
}
catch (Exception err)
{
Write2ErrLog(err, "OnTimedEvent");
}
}
这是 GetActiveWindowTitle() 方法。
static private string GetActiveWindowTitle()
{
try
{
const int nChars = 256;
IntPtr handle = IntPtr.Zero;
StringBuilder Buff = new StringBuilder(nChars);
handle = GetForegroundWindow();
if (GetWindowText(handle, Buff, nChars) > 0)
{
return Buff.ToString();
}
return null;
}
catch (Exception e)
{
Write2ErrLog(e, "GetActiveWindowTitle");
return null;
}
}
以下是我收到的错误:
2011 年 4 月 19 日下午 12:57:16:System.InvalidOperationException:队列为空。 在 System.Collections.Queue.Dequeue() 在 System.Windows.Forms.SendKeys.SendInput(字节 [] oldKeyboardState,队列 previousEvents) 在 System.Windows.Forms.SendKeys.Send(字符串键,控制控件,布尔等待) 在 System.Windows.Forms.SendKeys.SendWait(字符串键) 在 DataViews_SendKeys.Form1.OnTimedEvent(对象源,ElapsedEventArgs e)OnTimedEvent 2011 年 4 月 19 日下午 1:03:11:System.ArgumentException:目标数组不够长。检查 destIndex 和长度,以及数组的下限。 在 System.Array.Copy(数组 sourceArray,Int32 sourceIndex,数组 destinationArray,Int32 destinationIndex,Int32 长度,布尔可靠) 在 System.Collections.Queue.Clone() 在 System.Windows.Forms.SendKeys.Send(字符串键,控制控件,布尔等待) 在 System.Windows.Forms.SendKeys.SendWait(字符串键) 在 DataViews_SendKeys.Form1.OnTimedEvent(对象源,ElapsedEventArgs e)OnTimedEvent 2011 年 4 月 19 日下午 1:04:00:System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。 在 System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG 和 msg,HandleRef hwnd,Int32 msgMin,Int32 msgMax,Int32 删除) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID,Int32 原因,Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文) 在 System.Windows.Forms.SendKeys.Flush() 在 System.Windows.Forms.SendKeys.Send(字符串键,控制控件,布尔等待) 在 System.Windows.Forms.SendKeys.SendWait(字符串键) 在 DataViews_SendKeys.Form1.OnTimedEvent(对象源,ElapsedEventArgs e)OnTimedEvent
我应该提到的是,我运行这个程序的计算机是一台配备 Intel Xeon 处理器的 HP 服务器计算机,操作系统是 Windows XP。该程序在我的笔记本电脑上运行没有错误,但在服务器计算机上却没有。有什么想法吗?