WEB开发网
开发学院软件开发VC 如何从 MFC 应用程序中调用 .NET 框架 阅读

如何从 MFC 应用程序中调用 .NET 框架

 2006-07-20 11:41:42 来源:WEB开发网   
核心提示: 所有发送击键的工作都在 SendString 中进行,它建立 INPUT 数组并调用 SendInput (参见 Figure 3),如何从 MFC 应用程序中调用 .NET 框架(3),SendString 发送一系列 KEYDOWN/KEYUP 的 INPUT 结构对,字符串中的每一个

所有发送击键的工作都在 SendString 中进行,它建立 INPUT 数组并调用 SendInput (参见 Figure 3)。SendString 发送一系列 KEYDOWN/KEYUP 的 INPUT 结构对,字符串中的每一个字符对应一双这样的结构表示按下/弹起。它用 KEYEVENTF_UNICODE 标志将串作为 Unicode 字符发送。Unicode 比较容易处理,因为你不必用 Shift 键合成大写字符。如果不借助 KEYEVENTF_UNICODE 的话,你必须将大写的 E 发送成 <Shift> 后跟 e,每个字符都有一次按下/弹起(down/up)事件, 共有四次击键。感谢微软的人添加了 KEYEVENTF_UNICODE。

如果你用托管 C++ 或 Microsoft .NET 中其它的语言编程,发送击键更容易。有一个框架类叫 SendKeys,其静态函数 Send 使得发送击键易如反掌。你甚至可以用花哨的语法发送专用键。例如用“{F1}{BACKSPACE}A”来发送 F1,Backspace,A。为此我还写了.NET 版本的 Typematic,起名为:Typematic.NET,它使用 SendKeys。这样 SendString 函数变成这样:

#pragma managed
void SendString(LPCTSTR str) {
  SendKeys::SendWait(str);
}   

还有什么比这更容易呢?当我刚开始做的时候,我很自然地用 SendKeys::Send 尝试,而不是 SendWait。为什么我要等待应用程序吃完这些键呢?唉,我尝试的时候 Typematic 惨烈地崩溃了,在 Windows.Forms.dll 的某个地方发生 System.InvalidOperationException 异常。当我启动公共语言运行时(CLR)调试器察看缘由时,Output 窗口显示出下列信息:

“附加信息:由于该应用程序不处理 Windows 消息,SendKeys 无法在该应用程序中运行。要么让该应用程序处理消
息,要么使用 SendKeys.SendWait 方法。”

这就是我所称得友好的出错信息!就让它成为所有人的一个例子吧。但在使用 SendKeys 之前,要提醒你的一件事情是:它不像 SendInput 那样稳定。通过针对不同的应用如:IE、Notepad、MFC 窗体视图或其它熟悉的应用,对 Typematic 和 Typematic.NET 进行测试,你自己就能发现这个结果。处于某些原因,SendKeys 工作并不总是正常。我猜测它是焦点或定时问题——这些键被发送后马上就消失了,因为你认为具有焦点的窗口实际上没有焦点。所以虽然 SendKeys 很容易使用,同时也比 SendInput 更强大,但它在使用过程中的表现不佳,很可惜!也许微软的老大们在下一个版本中能摆平这个问题。

上一页  1 2 3 4 5  下一页

Tags:如何 MFC 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接