首页
社区
课程
招聘
[分享]菜鸟用SDK写了个系统锁
发表于: 2012-10-26 10:59 10060

[分享]菜鸟用SDK写了个系统锁

2012-10-26 10:59
10060
曾经不知道在哪个软件上看到了屏幕锁,当时觉得挺好玩的,我也模仿写了一个,希望大家多多指教

本程序仅供参考,使用本程序任何后果都跟作者无关

源码发出来,vc6.0编译通过,在win7和xp下测试通过

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (20)
雪    币: 1242
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好东西,学习了
2012-10-26 17:52
0
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
Thanks for share.
上传的附件:
2012-10-27 06:34
0
雪    币: 71
活跃值: (227)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
XIEXIE
2012-10-27 07:09
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
咋 解 锁 啊
2012-10-27 07:23
0
雪    币: 446
活跃值: (186)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
第一次运行程序的时候会提示你设置密码,然后程序把密码放在c:\windows\win.ini下,第二次运行就不提示设置密码了,直接从上面那个文件里面读取
2012-10-27 07:34
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
//禁用任务管理器
s_hMutex = CreateMutex(0, FALSE, _T("Local\\TASKMGR.879e4d63-6c0e-4544-97f2-1244bd3f6de0"));
这个互斥体能创建成功吗?
2012-10-27 16:08
0
雪    币: 446
活跃值: (186)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
8
当然能,你如果是xp的话就不用创建了,是win7的话,必须创建互斥体,任务管理器才以为已经有一个实例了,就不运行了
2012-10-27 16:21
0
雪    币: 123
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢分享,学习了
2012-10-27 17:31
0
雪    币: 291
活跃值: (164)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错,谢谢分享
2012-10-27 21:09
0
雪    币: 221
活跃值: (2256)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
Comctl32.lib Comctl32.h少二个文件
2012-10-28 22:28
0
雪    币: 156
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
其实不用禁止任务管理器吧。。直接循环置顶。。。
2012-10-29 10:45
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了 。
2012-10-29 10:57
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
14
加几行  禁止Windows 键
	if (pKHS->vkCode == VK_LWIN
		|| pKHS->vkCode == VK_RWIN)
	{
		return TRUE;
	}
2012-10-29 23:24
0
雪    币: 156
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
[QUOTE=blueapplez;1113428]加几行  禁止Windows 键
	if (pKHS->vkCode == VK_LWIN
		|| pKHS->vkCode == VK_RWIN)
	{
		return TRUE;
	}
[/QUOTE]

win7表示还需要禁止ctrl+alt+del。。。
2012-10-30 08:36
0
雪    币: 446
活跃值: (186)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
16
vc6.0自带这几个文件啊
2012-10-31 10:12
0
雪    币: 446
活跃值: (186)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
17
这个真没办法,不知道虚拟机是怎么做的,虚拟机里面按ctrl+alt+del就不管用
2012-10-31 10:13
0
雪    币: 446
活跃值: (186)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
18
[QUOTE=blueapplez;1113428]加几行  禁止Windows 键
	if (pKHS->vkCode == VK_LWIN
		|| pKHS->vkCode == VK_RWIN)
	{
		return TRUE;
	}
[/QUOTE]

不用那么麻烦,要是这样的话还有禁止Alt+Tab键,我是这样做的,源码我也不想改了,就这儿写出来吧,大家把Keyboard_llHookProc还是改成这样
//由虚拟码获取有效字符
BOOL GetCharByVkcode(DWORD vkCode, TCHAR &ch)
{
	int			nPressShift = GetKeyState(VK_SHIFT);
	
	if(vkCode >= '0' && vkCode <= '9')
	{
		if(nPressShift == (-127) || nPressShift == (-128))//shift键被按下
		{
			switch(vkCode)
			{
			case '0':
				ch = ')';
				break;
			case '1':
				ch = '!';
				break;
			case '2':
				ch = '@';
				break;
			case '3':
				ch = '#';
				break;
			case '4':
				ch = '$';
				break;
			case '5':
				ch = '%';
				break;
			case '6':
				ch = '^';
				break;
			case '7':
				ch = '&';
				break;
			case '8':
				ch = '*';
				break;
			case '9':
				ch = '(';
				break;
			}
		}
		else
		{
			ch = (CHAR)vkCode;
		}
	}
	else if(vkCode >= 'A' && vkCode <= 'Z')
	{
		if(!GetKeyState(VK_CAPITAL))
		{
			ch = (CHAR)vkCode + 32;
		}
		else
		{
			ch = (CHAR)vkCode;
		}
	}
	else if( (vkCode >= 186 && vkCode <= 192)||( vkCode >=219 && vkCode <= 222) )
	{
		if( nPressShift == (-127) || nPressShift == (-128) )//shift键被按下
		{
			switch(vkCode)
			{
			case 186:
				ch = ':';
				break;
			case 187:
				ch = '+';
				break;
			case 188:
				ch = '<';
				break;
			case 189:
				ch = '_';
				break;
			case 190:
				ch = '>';
				break;
			case 191:
				ch = '?';
				break;
			case 192:
				ch = '~';
				break;
			case 219:
				ch = '{';
				break;
			case 220:
				ch = '|';
				break;
			case 221:
				ch = '}';
				break;
			case 222:
				ch = '\"';
				break;
			}
		}
		else
		{
			switch(vkCode)
			{
			case 186:
				ch = ';';
				break;
			case 187:
				ch = '=';
				break;
			case 188:
				ch = ',';
				break;
			case 189:
				ch = '-';
				break;
			case 190:
				ch = '.';
				break;
			case 191:
				ch = '/';
				break;
			case 192:
				ch = '`';
				break;
			case 219:
				ch = '[';
				break;
			case 220:
				ch = '\\';
				break;
			case 221:
				ch = ']';
				break;
			case 222:
				ch = '\'';
				break;
			}
		}
	}
	else
	{
		return FALSE;
	}
		
	return TRUE;
}

LRESULT CALLBACK Keyboard_llHookProc(int code, WPARAM wParam, LPARAM lParam)
{ 
	PKBDLLHOOKSTRUCT	pKHS = (PKBDLLHOOKSTRUCT) lParam;
	TCHAR				ch;

	if(code < 0)
		return CallNextHookEx(g_hKeyboardHook, code, wParam, lParam);

	switch(pKHS->vkCode)
	{
	case VK_HOME:
	case VK_END:
	case VK_LEFT:
	case VK_RIGHT:
	case VK_BACK:
	case VK_DELETE:
		break;
	default:
		{
			if(!GetCharByVkcode(pKHS->vkCode, ch))
				return TRUE;
		}
	}

	return CallNextHookEx(g_hKeyboardHook, code, wParam, lParam);
}
2012-10-31 10:20
0
雪    币: 62
活跃值: (810)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
哥们,我想问下,你的那个屏蔽任务管理器的代码,为什么要建一个互斥对象,而且这个对象Local\\TASKMGR.879e4d63-6c0e-4544-97f2-1244bd3f6de0,问下,这个互斥名称是
如何得到的???求解,你是如何知道的。。。。
2012-11-13 09:06
0
雪    币: 14
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
看到win2k里的做法
const TCHAR cszStartupMutex[] = TEXT("NTShell Taskman Startup Mutex");
但原理应该一样.接着Taskmgr就会判断下之前有没有这个互斥

    g_hStartupMutex = CreateMutex(NULL, TRUE, cszStartupMutex);
    if (g_hStartupMutex && GetLastError() == ERROR_ALREADY_EXISTS)
    {
        // Give the other instance (the one that owns the startup mutex) 10
        // seconds to do its thing

        WaitForSingleObject(g_hStartupMutex, FINDME_TIMEOUT);
    }

如果存在了, 就表示自己曾经起来过, 当前的taskmgr会等待10s让其他的taskmgr实例完成初始化操作.
2012-11-13 09:35
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
21
看了楼主的马子,很不错哟!!!
VK_MENU,就是键盘上那个菜单键没屏蔽吧,另外在XP下确实不用创建任务管理器的互斥体也能屏蔽掉CTRL+ALT+DEL,至于WIN7上不晓得了。。。。。。。。。
2012-11-13 09:41
0
游客
登录 | 注册 方可回帖
返回
//