如何使用windows api向ms office或ms ppt发送击键

如何使用windows api向ms office或ms ppt发送击键,api,winapi,sendmessage,postmessage,findwindow,Api,Winapi,Sendmessage,Postmessage,Findwindow,我想通过使用windows api发送击键,通过代码控制ms power point演示文稿或word文件 首先,为了简单起见,我找到了运行ppt或word文件的句柄。现在,我一次只运行一个瞬间。这里是我的代码,用于查找运行应用程序的句柄 win_han is a handle win_han1 := FindWindow('OpusApp', nil) ; win_han2 := FindWindow('PP12FrameClass', nil) ; opusApp是ms w

我想通过使用windows api发送击键,通过代码控制ms power point演示文稿或word文件

首先,为了简单起见,我找到了运行ppt或word文件的句柄。现在,我一次只运行一个瞬间。这里是我的代码,用于查找运行应用程序的句柄

win_han  is a handle 
win_han1 := FindWindow('OpusApp', nil) ;   
win_han2 := FindWindow('PP12FrameClass', nil) ;   
opusApp
是ms word的类名
PP12FrameClass
ms ppt的类名称

然后我发送击键

PostMessage(win, WM_KEYDOWN, VK_RIGHT, 0);
Sleep(10);
PostMessage(win, WM_KEYUP, VK_RIGHT, 0);

但它不起作用。我是否做错了什么,或者我是否可以通过其他方式实现这一点。

也许您可以通过com查看互操作。像这样的话题有好几个。查看SendMessage()。@EvanCarslake这不会解决问题;发布/发送消息不是发送输入的正确方式。我的下一条评论正确地讨论了这一点。直接发布消息不是发送输入的正确方式。首先,您肯定想看看是否可以自动化该过程;请参考@silvesthu链接的内容,或查找“office interop”或其他内容(我会链接它,但找不到非.net示例)。还可以查看一些UI自动化工具包(MSAA或UI自动化)是否可以实现您想要的功能。如果您真的没有选择,那么
SendInput()
函数是发送输入的正确方法,但只有在绝对必要时才这样做。旧代码
void MouseClick(INPUT*buffer){buffer->mi.dwFlags=(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN)
void MouseSetup(INPUT*buffer){buffer->type=INPUT\u MOUSE;buffer->mi.dx=(0*(0xFFFF/WindowWidth));buffer->mi.dy=(0*(0xFFFF/WINDOW\u HEIGHT));buffer->mi.mouseData=0;buffer->mi.dwFlags=MOUSEEVENTF_ABSOLUTE;buffer->mi.time=0;buffer->mi.dwextranfo=0;}
SendInput(1,buffer,sizeof(INPUT));Sleep(10);buffer->mi.dwFlags=(MOUSEEVENTF|ABSOLUTE | MOUSEEVENTF|左起);SendInput(1,buffer,sizeof(INPUT));