全屏ppt所发现的问题,肯请帮忙(急)

lzjdlsl 2010-04-26 04:13:23
我当前焦点在ppt上,我按一个键盘的键CreateProcess方式执行一个程序A,在程序A中想全屏“当前有焦点”的ppt。
keybd_event(VK_SHIFT,0, 0,0);
keybd_event(VK_F5,0, 0,0);
keybd_event(VK_F5,0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0, KEYEVENTF_KEYUP,0);
但是全屏不了。
是否是焦点问题啊。当然我可以遍历窗体来获得ppt的窗体,但是我不知道ppt的名字如果有多个ppt的话不能正确全屏当前有焦点的ppt.请问如何才可以全屏呢。
...全文
357 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
谢谢各位的帮组。成功解决。因为我的需求是全屏当前浏览的ppt
POINT pt;
GetCursorPos(&pt);
hWndppt = WindowFromPoint(pt);
在全屏时
if (hWndppt!=NULL)
{

PostMessage(hWndppt,WM_KEYDOWN,VK_SHIFT,0);
PostMessage(hWndppt,WM_KEYDOWN,VK_F5,0);
PostMessage(hWndppt,WM_KEYUP,VK_F5,0);
PostMessage(hWndppt,WM_KEYUP,VK_SHIFT,0);
}
多谢各位

lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
EnumWindows(EnumWindowsProc,0);
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
WCHAR lpWinText[MAX_PATH];
::GetWindowText(hwnd,lpWinText,MAX_PATH-1);
WCHAR *lpPPt =L"Microsoft PowerPoint";
LPWSTR szFind =wcsstr(lpWinText,lpPPt);
if (szFind != NULL)
{
。。。。。。。。
}
。。。。。。
}
这个有时候会找不到正确的ppt文件啦。
恩,对的。焦点关键是焦点如何弄到以前拥有焦点的ppt上。
而且有的机器有时候又可以。奇怪
尹成 2010-04-26
  • 打赏
  • 举报
回复
PostMessage( WM_KEYDOWN, VK_SHIFT, 0 ,0);
PostMessage( WM_KEYDOWN, VK_F5, 0 ,0);
PostMessage( WM_KEYUP, VK_F5, 0 ,0);
PostMessage( WM_KEYUP, VK_SHIFT, 0,0 );
这不是一样的吗。关键问题是焦点
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lzjdlsl 的回复:]
我以前是通过找ppt窗口的。不过如果有多个ppt在窗体中。我不能判断哪个是他按键前在看的ppt啊
[/Quote]

我觉得你还是应该用spy++看看全屏的时候ppt到底是怎么处理的消息
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
我以前是通过找ppt窗口的。不过如果有多个ppt在窗体中。我不能判断哪个是他按键前在看的ppt啊
Eleven 2010-04-26
  • 打赏
  • 举报
回复
你是跨进程???EnumWindows()找到ppt窗口的HWND,然后发送消息。。。
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
我用的win32的程序。所以不用::的。hWndppt = GetForegroundWindow();倒是不为空,不过
PostMessage(hWndppt,WM_KEYDOWN,VK_SHIFT,0);
PostMessage(hWndppt,WM_KEYDOWN,VK_F5,0);
PostMessage(hWndppt,WM_KEYUP,VK_F5,0);
PostMessage(hWndppt,WM_KEYUP,VK_SHIFT,0);
还是全屏不了啊。郁闷
踏实每一步 2010-04-26
  • 打赏
  • 举报
回复
试下::GetActiveWindow
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
一样是0我是在A程序生成窗体前写的。GetActiveWindow
踏实每一步 2010-04-26
  • 打赏
  • 举报
回复
GetForegroundWindow
踏实每一步 2010-04-26
  • 打赏
  • 举报
回复
呵呵,用这个GetActiveWindow
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
hWndppt = GetFocus(); 为什么获得句柄为0呢。ppt的窗口句柄HWND我可以找不过如果打来多个的话我不就不知道哪个才是他当前有焦点的ppt了吗。还请几位再看看。谢谢
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
根据两位的提示,我想可以这样来弄。在A显示窗体前获得当前具有焦点的窗体句柄。保存下来。等要全屏的时候我发消息给这个句柄的窗体。如何获得具有焦点的窗体句柄。GetTopWindow好像不大对把
Eleven 2010-04-26
  • 打赏
  • 举报
回复
同上,你的ppt的窗口句柄HWND找了吗?
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lzjdlsl 的回复:]
PostMessage( WM_KEYDOWN, VK_SHIFT, 0 ,0);
PostMessage( WM_KEYDOWN, VK_F5, 0 ,0);
PostMessage( WM_KEYUP, VK_F5, 0 ,0);
PostMessage( WM_KEYUP, VK_SHIFT, 0,0 );
这不是一样的吗。关键问题是焦点
[/Quote]

你给ppt发消息为什么不指定句柄啊?
踏实每一步 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lzjdlsl 的回复:]
不对窗体还没销毁。我要在这个程序里面来执行全屏的。现在是如何保存和设置焦点的问题了
[/Quote]

再A跳出窗口前,先GetTopWindow得到ppt窗口句柄
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
PostMessage( WM_KEYDOWN, VK_SHIFT, 0 ,0);
PostMessage( WM_KEYDOWN, VK_F5, 0 ,0);
PostMessage( WM_KEYUP, VK_F5, 0 ,0);
PostMessage( WM_KEYUP, VK_SHIFT, 0,0 );
这不是一样的吗。关键问题是焦点
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lzjdlsl 的回复:]
不对窗体还没销毁。我要在这个程序里面来执行全屏的。现在是如何保存和设置焦点的问题了
[/Quote]

组合键是这么发的么?
为什么不直接发消息
这种加速键肯定是有相应消息的
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
不对窗体还没销毁。我要在这个程序里面来执行全屏的。现在是如何保存和设置焦点的问题了
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
恩。对啊。不过我是在窗口销毁后按keybd_event(VK_SHIFT,0, 0,0);
keybd_event(VK_F5,0, 0,0);
keybd_event(VK_F5,0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0, KEYEVENTF_KEYUP,0);的啊。照理说应该回来了啊。而且窗体销毁后我手动后按shift+f5可以全屏的啊,我如何才能将按前的焦点保存然后窗体销毁后获得原来保存的焦点。指向ppt呢?
加载更多回复(4)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧