C#程序解读 DllImport原理

麻烦解释下该程序怎么运行的,本人刚接触C#,麻烦解释详细点,谢谢了publicclassFullScreenClass{publicconstintSPI_SETWORK... 麻烦解释下该程序怎么运行的,本人刚接触C#,麻烦解释详细点,谢谢了

public class FullScreenClass
{
public const int SPI_SETWORKAREA = 47;
public const int SPI_GETWORKAREA = 48;
public const int SW_HIDE = 0x00;
public const int SW_SHOW = 0x0001;
public const int SPIF_UPDATEINIFILE = 0x01;
[DllImport("coredll.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpWindowName, string lpClassName);
[DllImport("coredll.dll", EntryPoint = "ShowWindow")]
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("coredll.dll", EntryPoint = "SystemParametersInfo")]
private static extern int SystemParametersInfo(int uAction, int uParam, ref Rectangle lpvParam, int fuWinIni);
public static bool SetFullScreen(bool fullscreen, ref Rectangle rectOld)
{
IntPtr Hwnd = FindWindow("HHTaskBar", null);
if (Hwnd == IntPtr.Zero) return false;
if (fullscreen)
{
ShowWindow(Hwnd, SW_HIDE);
Rectangle rectFull = Screen.PrimaryScreen.Bounds;
SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get
SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//set
}
else
{
ShowWindow(Hwnd, SW_SHOW);
SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);
}
return true;
}
}
展开
 我来答
klkucan
2015-07-22 · TA获得超过666个赞
知道小有建树答主
回答量:831
采纳率:66%
帮助的人:408万
展开全部
整体来看这个程序是用C#调用WIN32 API。

public const int SPI_SETWORKAREA = 47;
public const int SPI_GETWORKAREA = 48;
public const int SW_HIDE = 0x00;
public const int SW_SHOW = 0x0001;
public const int SPIF_UPDATEINIFILE = 0x01;
// 以上是变量定义,这些变量从命名方式看就是典型的WIN32 API。

[DllImport("coredll.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpWindowName, string lpClassName);
[DllImport("coredll.dll", EntryPoint = "ShowWindow")]
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("coredll.dll", EntryPoint = "SystemParametersInfo")]
private static extern int SystemParametersInfo(int uAction, int uParam, ref Rectangle lpvParam, int fuWinIni);
// 以上3个方法是C#调用C函数的实现,DllImport是c#调用c或者C++代码的固定实现方式。
//以 [DllImport("coredll.dll", EntryPoint = "FindWindow")]为例就是说使用coredll.dll中的
//FindWindow函数。这些函数的具体功能可以在MSDN去查。 第一个方法的返回值是IntPtr //,这个是C#中的指针类型。

// 以下是一个函数
public static bool SetFullScreen(bool fullscreen, ref Rectangle rectOld)
{
//调用C函数返回一个指针
IntPtr Hwnd = FindWindow("HHTaskBar", null);
// 判断指针是否为空
if (Hwnd == IntPtr.Zero) return false;

if (fullscreen)
{
//调用C函数
ShowWindow(Hwnd, SW_HIDE);
// Screen.PrimaryScreen.Bound这个玩意应该是其它代码中定义的,你贴的也不全
Rectangle rectFull = Screen.PrimaryScreen.Bounds;
//调用C函数
SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get
//调用C函数
SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//set
}
else
{
//调用C函数
ShowWindow(Hwnd, SW_SHOW);
//调用C函数
SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);
}
return true;
}

所以你看看,其实很简单的东西。
追问
回答的很详细,谢谢,请问下coredll.dll这个文件是怎么获得的,我在项目中没找到
追答
coredll.dll这肯定是个c或者C++的DLL,我看了下应该是微软官方出的,这个东西网上有下载的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式