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;
}
} 展开
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;
}
} 展开
展开全部
整体来看这个程序是用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;
}
所以你看看,其实很简单的东西。
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,我看了下应该是微软官方出的,这个东西网上有下载的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询