如何从MFC应用程序中调用.NET框架2009-12-28 MSDN 如何发送击键到其它应用程序?关于如何通过编程来发送 Ctrl+Alt+Del 击键?如何从 MFC 应用程序中调用 .NET 框架?我想编写一个应用程序,它能通过击键将信息写到另外一个应用程序的窗体中。我是不是应该发送 WM_KEYDOWN 和 WM_KEYUP 消息?有没有更好的办法?发送 WM_KEYDOWN 和 WM_KEYUP 消息也许能行得通,但 SendInput 是专门被设计用于此目的的 API 函数。它通过 INPUT 结构数组参数来合成包括击键和鼠标事件在内的输入,每个 INPUT 结构数组元素对应一个输入事件——击键或鼠标动作。INPUT 结构含有一个联合类型,其成员为 MOUSEINPUT,KEYBDINPUT (或 HARDWAREINPUT,仿真面包烤箱)。对于击键来说其 KEYBDINPUT 结构如下:
struct KEYBDINPUT {
WORD wVk; // virt key code
WORD wScan; // hw scan code
DWORD dwFlags; // flags—see doc
DWORD time; // time stamp, 0 = dflt
ULONG_PTR dwExtraInfo; // app-defined
};
所以向另外一个应用程序发送击键其实就是建立一个 INPUT 数组,每一个数组元素对应一次击键(弹起和按下),然后调用 SendInput 函数。为了示范其实际使用方法,我编写了一个叫 Typematic 的小程序,你只要按下一个热键,便可以快速将姓名、地址、电话号码或其它信息敲入窗体中。这对于网上购物者们来说是件很理想的事情。当你第一次运行 Typematic 时,显示的对话框如 Figure 1 所示:

Figure 1 Typematic 的初始对话框按 “OK”按钮后进入隐藏状态。其后你可以按 <WinKey>+T 来重新激活 Typematic,显示如 Figure 2 所示的对话框:

Figure 2 重新被激活得 Typematic此时可以看到对话框里显示出了一列缩写信息。敲入“n”代表姓名,“a”代表地址,Typematic 发送相应的字符串到当前窗体或应用程序。这些缩写信息定义在一个静态表中,你可以将它们改为自己的信息:
struct ABBREV {
TCHAR key;
LPCTSTR text;
} MYABBREVS[] = {
{ _T(""n""),_T("Elmer Fudd") },
{ _T(""a""),_T("1 Bunny Way") },
...
{ 0,NULL}
};