[求助]怎么在程序中解除屏幕保护 环境:windows2000SP4 VC6.0前提条件:2000屏幕保护程序已经运行(知道密码),请教:怎么在程序中定时解除. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //禁用屏保LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){ switch( message ) { case WM_SYSCOMMAND: switch( LOWORD(wParam) ) { case SC_SCREENSAVE: return 0; //禁用屏保 } break; } return DefWindowProc( hWnd, message, wParam, lParam );}解除屏保动一下鼠标或键盘就可以了,可用mouse_event和keybd_event函数模拟。 谢谢楼上回答! 我的意思可能没说明白,不是禁止屏幕保护程序.是要在屏幕保护程序启动了以后,设定一个时间解除,并返回到正常状态.mouse_event 确实可以去掉屏保,但随后出现了登录框(带密码),在已经知道密码的情况下,怎么进入系统呢?也就是说怎么登录呢? 请指教! 这个是登陆的问题了,用写注册表的方法让系统自动登陆,VC怎样读写注册表不用我说了吧。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下加: AutoAdminLogon REG_SZ 1 AutoForceLogon REG_SZ 1 DefaultUserName REG_SZ 用户名 DefaultPassword REG_SZ 密码 登录是由winlogon进程负责的,登录桌面跟普通用户桌面不在同一个winsta里面,你必须切换到登录的winsta里才能控制登录 先设置HKEY_CURRENT_USER\Control Panel\Desktop下ScreenSaverIsSecure为0, 然后模拟按键,屏保取消后再恢复ScreenSaverIsSecure look here from vckbase.屏幕保护是运行在专门的桌面当中,这个桌面叫做"Screen-saver"。你用GetActiveWindow 或者 GetForegroundWindow函数是找不到屏幕保护窗口的,因为它运行在另外的桌面里。要获得屏保窗口,你必须打开这个专门的桌面,列举其中的所有窗口,判断窗口是不是屏幕保护窗口,如果保护窗口可见,则发送WM_CLOSE消息。详细代码如下(或者参见MSDN KB 文章Q140723):BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam){ if(IsWindowVisible(hwnd)) PostMessage(hwnd, WM_CLOSE, 0, 0); return TRUE;}// 打开屏保专用桌面"Screen-saver"//HDESK hdesk = OpenDesktop(TEXT("Screen-saver"), 0, // flags FALSE, // new processes inherit handle? DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); // access/////////////////// 用专门的"close"函数列举窗口并关闭桌面。//if (hdesk) { EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0); CloseDesktop(hdesk);} 要个SYS 下钩子来弄了.将程序运行为SYSTEM权限来模拟键盘操作,应该是可行的.因为没装2000. 不知具体怎么去做了. 直接把屏保进程杀掉得了获取屏保窗口,GetWindowProcessID得到进程ID,杀掉或者枚举当前进程,进程名的扩展名为.scr,杀掉。 你这个方法我觉得应该可以.怎么运行在SYSTEM权限下呢? vs2008MFC程序用什么扩展库做界面美化比较方便比较流行? 窗口最大化、最小化代码是什么啊 哪里有VC下载?或者VC++ 怎样修改一个按钮是否可用? 在工程中加入自定义的结构,编译出现错误! LNK4084问题 为什么这段代码创建不了Static? 手机短信息尽在(http://times-china.51.net) MFC中添加好了C语言编写的文件,调用函数和变量有问题,求教!! 高手:我用Atl开发的控件,到放到网上时候,在另外一台机器上...... 大家好,请教图片放大拖动的问题 在一个View视图上逐个显示5万个点(一个航迹数据),速度越来越慢,怎么解决啊?急急急,谢谢...
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{ case WM_SYSCOMMAND:
switch( LOWORD(wParam) )
{
case SC_SCREENSAVE:
return 0; //禁用屏保
}
break;
} return DefWindowProc( hWnd, message, wParam, lParam );
}解除屏保动一下鼠标或键盘就可以了,可用mouse_event和keybd_event函数模拟。
AutoAdminLogon REG_SZ 1
AutoForceLogon REG_SZ 1
DefaultUserName REG_SZ 用户名
DefaultPassword REG_SZ 密码
屏保取消后再恢复ScreenSaverIsSecure
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam)
{
if(IsWindowVisible(hwnd))
PostMessage(hwnd, WM_CLOSE, 0, 0);
return TRUE;
}
// 打开屏保专用桌面"Screen-saver"
//
HDESK hdesk = OpenDesktop(TEXT("Screen-saver"),
0, // flags
FALSE, // new processes inherit handle?
DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); // access/////////////////
// 用专门的"close"函数列举窗口并关闭桌面。
//
if (hdesk) {
EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);
CloseDesktop(hdesk);
}
将程序运行为SYSTEM权限来模拟键盘操作,应该是可行的.
因为没装2000. 不知具体怎么去做了.
获取屏保窗口,GetWindowProcessID得到进程ID,杀掉
或者枚举当前进程,进程名的扩展名为.scr,杀掉。
你这个方法我觉得应该可以.
怎么运行在SYSTEM权限下呢?