(高分求解)如何判断Powerpoint程序打开并正常运行!

子夜1978 2009-10-30 03:03:28
目前我可以通过程序截获PowerPoint是否在打开,但是PowerPoint有一个启动过程,这个过程不能用程序获得执行权限,所以,我想通过程序判断PowerPoint什么时间准备好,然后再执行我的程序~!最好能有点代码~!分数不够继续加~!

之前通过timer已经获得了PowerPoint在运行!

private void timer1_Tick(object sender, EventArgs e)
{
if (!pptopenbool)
{
bool b = false;
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
if (p.ProcessName == "POWERPNT")
{
b = true;

}

if (b)
{
pptopenbool = true;
pptrec();
}
else
{
pptopenbool = false;

}

}

}
...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongwenbo520 2011-09-16
  • 打赏
  • 举报
回复
调用API函数,如下:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long

winhwnd = FindWindow("PP11FrameClass", 0)
If winhwnd = 0 Then
Set pptApp = CreateObject("PowerPoint.Application") '创建POWERPOINT对象
pptApp.Visible = True '显示PowerPoint窗口
pptApp.Presentations.Open (app0 & "\PowerPoint\" & File) '打开PowerPoint文档
Else
For Each doc In Presentations
If doc.Name = File Then Found = True
Next doc
If Found = True Then
MsgBox File & "已运行", vbOKOnly, "提示"
Else
MsgBox File & "未运行", vbOKOnly, "提示"
End If
End If
LutzMark 2009-10-30
  • 打赏
  • 举报
回复
1.Win32API获取窗体句柄
2.搜索进程
 System.Diagnostics.Process[] CurrentProcess = System.Diagnostics.Process.GetProcessesByName("POWERPNT");//好像是这个进程名
for (int i = 0; i < CurrentProcess.Length; i++)
{
if (CurrentProcess[i].MainWindowHandle.ToInt32() == 0)
{
try
{
//...
}
catch
{
}
}
}
lerit 2009-10-30
  • 打赏
  • 举报
回复
呵呵,这代码是我写的那段把?恩,你现在这个要求如果通过判断是否加载完毕,确实很难,我有一个思路:
既然已经判断PowerPoint开始启动可以实现了,那么如果马上调用pptrec(oPptApp = (PowerPoint.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("PowerPoint.Application");应该是这个方法中的语句把??),可能由于没有加载完毕而出现空引用,两个方法,一种就是调用pptrec前让等待几秒钟再执行,当然这个时间你自己要把握好,否则太短了还是会出错:
if (b)
{
pptopenbool = true;
System.Threading.Sleep(5000);//等待五秒
pptrec();
}
另一种方法,就是让循环的获取oPptApp,直到不为空:
//先执行一次
oPptApp = (PowerPoint.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("PowerPoint.Application");
while(oPptApp ==null)
{
oPptApp = (PowerPoint.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("PowerPoint.Application");
}
下面你再使用oPptApp 就一定不是空啦
config_man 2009-10-30
  • 打赏
  • 举报
回复
...
子夜1978 2009-10-30
  • 打赏
  • 举报
回复
我现在是要捕捉PPT播放的内容,所以一定要等PPT运行起来不然
oPptApp = (PowerPoint.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("PowerPoint.Application");,这段会报错!~
bigmingming 2009-10-30
  • 打赏
  • 举报
回复
操作PPT,不一定要打开PPT程序,在后台,象EXCEL一样可以操作,只要判断PPT实例是否起来

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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