gpt4 book ai didi

c# - 将 Powerpoint 演示嵌入到 C# 应用程序中

转载 作者:太空狗 更新时间:2023-10-29 22:27:36 27 4
gpt4 key购买 nike

我希望能够将 powerpoint 演示文稿嵌入到 C# 窗体 (WinForms) 中。基本上我们有一个 52' 的显示器,我们的想法是在一个角落循环播放 PPT,然后其他 3 个角落将显示来自程序本身的信息。

我原以为这很简单,但看来我错了。

有人建议我使用 WebBrowser 控件,但这不起作用,而是将 powerpoint 文件视为下载,即给我一个“保存,打开”对话框。

有什么建议吗?

AK

最佳答案

您可以只运行 PowerPoint,获取窗口句柄,并使用 SetParent 设置新的父窗口。功能。


您只需要 PowerPoint 窗口的窗口类的名称,但感谢 Spy++ ,这没什么大不了的。

spy++


这是在自定义应用程序“内部”运行的 PowerPoint 屏幕截图:

PowerPoint


完整示例(取自 here 并针对 PowerPoint 进行了修改):

public partial class Form1 : Form
{
public Form1()
{
this.Size = new System.Drawing.Size(800, 600);
this.TopMost = true;
this.Text = "My Application";
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
Func<bool> run = () =>
Window.Find(hwnd =>
{
var cn = Window.GetClassName(hwnd);
var res = (cn == "PPTFrameClass");
if (res)
{
this.Controls.Clear();
Window.SetParent(hwnd, this.Handle);
Window.SetWindowPos(hwnd, new IntPtr(0), -8, -30, this.Width + 10, this.Height + 37, 0x0040);
}
return res;
});

new Button { Parent = this, Text = "Start" }
.Click += (s, e) =>
{
if (run() == false)
MessageBox.Show("Open PowerPoint");
};
}
}

public static class Window
{
public static bool Find(Func<IntPtr, bool> fn)
{
return EnumWindows((hwnd, lp) => !fn(hwnd), 0) == 0;
}
public static string GetClassName(IntPtr hwnd)
{
var sb = new StringBuilder(1024);
GetClassName(hwnd, sb, sb.Capacity);
return sb.ToString();
}
public static uint GetProcessId(IntPtr hwnd) // {0:X8}
{
uint pid;
GetWindowThreadProcessId(hwnd, out pid);
return pid;
}
public static string GetText(IntPtr hwnd)
{
var sb = new StringBuilder(1024);
GetWindowText(hwnd, sb, sb.Capacity);
return sb.ToString();
}

delegate bool CallBackPtr(IntPtr hwnd, int lParam);

[DllImport("user32.dll")]
static extern int EnumWindows(CallBackPtr callPtr, int lPar);

[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

[DllImport("User32", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);

[DllImport("user32.dll", SetLastError = true)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int W, int H, uint uFlags);
}

关于c# - 将 Powerpoint 演示嵌入到 C# 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com