.net 在winform中使用windows计算器

nbewdwxp  于 2023-01-14  发布在  .NET
关注(0)|答案(3)|浏览(130)

这些代码将把windows计算器设置为windows窗体应用程序。但问题是如何使用第三行中的NativeMethods.SetParent。它有特殊的命名空间吗?

System.Diagnostics.Process p = System.Diagnostics.Process.Start("calc.exe");
p.WaitForInputIdle();
NativeMethods.SetParent(p.MainWindowHandle, this.Handle);

请帮助我使用第三行中的NativeMethods。
任何帮助都将不胜感激

omtl5h9j

omtl5h9j1#

我假设您正在尝试将计算器“嵌入”到WinForm中?如果是这样,请查看以下pinvoke方法:

[DllImport("user32.dll")]
    internal static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

http://www.pinvoke.net/default.aspx/user32.setparent
要将计算器窗口嵌入到WinForm(或其他控件,如Panel)中,只需将Control.Handle作为第二个参数传递。

arknldoa

arknldoa2#

NET中没有公共的NativeMethods类。将调用放在NativeMethods类中被认为是一种很好的做法,因此这可能就是您所看到的。
您需要使用P/Invoke来调用Win32 API函数。请参见this tutorial

ycl3bljg

ycl3bljg3#

斯塔克斯评论说得很有道理:
一个明显的出发点是研究这行代码的原始源代码。您从哪里复制它的?您能在原始源代码中找到NativeMethods.SetParent的声明吗?(不需要回答,这意味着我会在这种情况下做什么的建议。)
这正是你解决这类问题所需要的方法。
问题中显示的代码片段实际上是copied from here。不,当您将其复制并粘贴到您的项目中时,它不会编译。它从未打算编译。我并不试图编写一个完整的演示,而是提供了一个简短的草图,说明所需的代码 * 可能 * 看起来像是您自己编写的。
你必须阅读整个答案,而不仅仅是浅灰色背景的部分。我知道我们都是程序员,所以我们经常认为我们可以通过查看代码来理解一切,但这是一个不幸的谎言。您必须阅读文档,了解函数的作用,然后编写P/Invoke声明,以便可以从C#代码中调用它。
Like Kendall says时,对本机Win32函数的调用被放置在一个名为NativeMethods的静态类中,这既有约定,也有.NET设计指南(由StyleCop等工具强制执行)的明确建议。我的示例遵循了这一常见做法,因为我假设对Win32互操作感兴趣的.NET开发人员熟悉这一约定,并在编写P/Invoke定义时遵循它。
As Nate alludes,有些人发现网站http://pinvoke.net/是为Win32函数编写P/Invoke定义时的一个有用的资源。它通常是这样的。但是你必须确保你不仅仅是从那里复制和粘贴代码,我在他们提供的样本中看到了惊人数量的错误(我回答了很多人提出的Stack Overflow问题,他们的应用程序在使用从该网站复制的错误代码时崩溃了)。你需要了解你使用的代码在做什么,以及它应该如何工作。这不仅可以确保您能够捕获它可能包含的任何错误,而且还可以防止您在应用程序中引入严重的bug或更糟的安全漏洞。

相关问题