Const SPI_SCREENSAVERRUNNING = 97 Private Declare Function SystemParametersInfo Lib "user32" Alias _ "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _ lpvParam As Any, ByVal fuWinIni As Long) As Long 使用: '禁止 Dim pOld As Boolean Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0) '开启 Dim pOld As Boolean Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)我看人家VB是这么实现的,不知道能不能转换成C#
我发消息给你了.来取DLL吧.哈~~
你给的那个VB的代码是不能实现的.至少在XP系统上是无效的.
谢谢你提供的资料,但是你的Dll有两个问题,代码如下:. (1)设置为False的时候,不能解除屏蔽; (2)点击两次就会报出异常,说Dll里面的托管代码正在运行,需要结束程序才能再次运行! public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("Kernel32")] public static extern int GetProcAddress(int handle, String funcname); [DllImport("Kernel32")] public static extern int LoadLibrary(String funcname); [DllImport("Kernel32")] public static extern int FreeLibrary(int handle); public delegate bool FuckSysKey(bool enAble); private static Delegate GetAddress(int dllModule, string functionname, Type t) { int addr = GetProcAddress(dllModule, functionname); if (addr == 0) return null; else return Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t); } private void button1_Click(object sender, EventArgs e) { int huser32 = 0; huser32 = LoadLibrary("native.dll"); FuckSysKey mykey = (FuckSysKey)GetAddress(huser32, "FuckSysKey", typeof(FuckSysKey)); mykey(false); FreeLibrary(huser32); } private void button2_Click(object sender, EventArgs e) { int huser32 = 0; huser32 = LoadLibrary("native.dll"); FuckSysKey mykey = (FuckSysKey)GetAddress(huser32, "FuckSysKey", typeof(FuckSysKey)); mykey(true); FreeLibrary(huser32); } }
{
return base.ProcessKeyEventArgs (ref m);
}
参考下这个
(1)用键盘钩子是不能屏蔽Ctrl+Alt+Delete热键的.
(2)用KeyEventArgs是检测不了Delete这样的热键的.
期待高手指点!
我同意这个说法!!
Const SPI_SCREENSAVERRUNNING = 97
Private Declare Function SystemParametersInfo Lib "user32" Alias _
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
lpvParam As Any, ByVal fuWinIni As Long) As Long
使用:
'禁止
Dim pOld As Boolean
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
'开启
Dim pOld As Boolean
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)我看人家VB是这么实现的,不知道能不能转换成C#
谢谢你提供的资料,但是你的Dll有两个问题,代码如下:.
(1)设置为False的时候,不能解除屏蔽;
(2)点击两次就会报出异常,说Dll里面的托管代码正在运行,需要结束程序才能再次运行!
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("Kernel32")]
public static extern int GetProcAddress(int handle, String funcname);
[DllImport("Kernel32")]
public static extern int LoadLibrary(String funcname);
[DllImport("Kernel32")]
public static extern int FreeLibrary(int handle); public delegate bool FuckSysKey(bool enAble); private static Delegate GetAddress(int dllModule, string functionname, Type t)
{
int addr = GetProcAddress(dllModule, functionname);
if (addr == 0)
return null;
else
return Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t);
}
private void button1_Click(object sender, EventArgs e)
{
int huser32 = 0;
huser32 = LoadLibrary("native.dll");
FuckSysKey mykey = (FuckSysKey)GetAddress(huser32, "FuckSysKey", typeof(FuckSysKey));
mykey(false);
FreeLibrary(huser32);
}
private void button2_Click(object sender, EventArgs e)
{
int huser32 = 0;
huser32 = LoadLibrary("native.dll");
FuckSysKey mykey = (FuckSysKey)GetAddress(huser32, "FuckSysKey", typeof(FuckSysKey));
mykey(true);
FreeLibrary(huser32);
}
}
{
InitializeComponent();
}
[DllImport(@"native.dll", EntryPoint = "FuckSysKey")]
private extern static bool FuckSysKey(bool enAble); private void button1_Click(object sender, EventArgs e)
{
FuckSysKey(false);
}
private void button2_Click(object sender, EventArgs e)
{
FuckSysKey(true);
}
http://download.csdn.net/source/1311907