首页
社区
课程
招聘
[求助]如何在驱动里判断出当前键盘的输入焦点在哪个窗口上?
发表于: 2009-2-26 10:01 10135

[求助]如何在驱动里判断出当前键盘的输入焦点在哪个窗口上?

2009-2-26 10:01
10135
RT,就是想在用驱动记录键盘输入的时候,可以判断出是不是感兴趣的输入.

请大牛们帮帮忙,指点一下.

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

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
GDI线程好像有个THREADINFO、W32THREAD结构,你在这里面找找。看看nt4的ntos\w32\ntuser\下的代码也许有帮助
2009-2-26 12:18
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
ntusergetfxxxxwindow
2009-2-26 13:25
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
MJ太强大了,看到你说出来我才恍然大悟~
2009-2-26 14:20
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
NtUserGetForegroundWindow~我也明白了~~还是MJ强大
2009-2-26 17:12
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
恩,我也明白了.
可是光有 NtUserGetForegroundWindow 这一个函数
想判断出用户输入的内容应不应该记录下来
感觉还是信息太少了

谁有好办法?
比如要记录下qq的密码
在驱动里面怎么判断当前输入的内容是不是密码
2009-2-26 17:23
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7
原来是个做马的…叫警察叔叔来~
2009-2-27 10:06
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
教主是我,
技术研究而已,绝不搞伤天害理\破坏社会持续之事

请相信我的RP
2009-2-28 03:30
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
又有了一些思路,补充上来

既然可以用NtUserGetForegroundWindow

那么还可以用NtUserGetClassName来补充一些信息
2009-2-28 03:34
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
10
对于DirectUI就不能这样了
2009-2-28 05:34
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
11
哦,是huhu0013?
2009-2-28 06:33
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
12
以前在看雪注册的帐号(huhu0013)忘了密码了

所以就...:3
2009-2-28 20:11
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
13
DirectUI是??
直接界面??
2009-2-28 20:16
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
14
敲了几天的代码

现在终于可以调用到NtUserGetForegroundWindow了

可是返回的句柄总是0

怎么回事呢?

自己想不出来,请大牛给看看.

我的代码是这样
	KeAttachProcess( CsrEProcess );

	while(TRUE) {

		int ret;
		HWND hwnd;
		WCHAR ClassNameBuffer[64];
		UNICODE_STRING ustrClassName;

		KeDelayExecutionThread(
						KernelMode,		// IN KPROCESSOR_MODE  WaitMode,
						FALSE,			// IN BOOLEAN  Alertable,
						&interval		// IN PLARGE_INTEGER  Interval
						);

		hwnd = NtUserGetForegroundWindow();

		KdPrint(( " Keyboard: NtUserGetForegroundWindow return hwnd = %d\n", hwnd ));

		ustrClassName.MaximumLength = 64 * sizeof(WCHAR);
		ustrClassName.Buffer = ClassNameBuffer;

		ret = NtUserGetClassName(
							hwnd,
							TRUE,
							&ustrClassName
							);

		KdPrint(( " Keyboard: NtUserGetClassName return value = %d\n", ret ));
		KdPrint(( " Keyboard: Foregrouond Window's Class Name = %wZ\n", &ustrClassName ));


WinDbg输出的调式信息如下

-------------------------------------------------->8---------------------------------------

Keyboard: NtUserGetForegroundWindow return hwnd = 0
Keyboard: NtUserGetClassName return value = 0
Keyboard: Foregrouond Window's Class Name =

-------------------------------------------------->8---------------------------------------

请大牛帮我看看是怎么回事
2009-3-2 10:04
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
15
顶一顶

按照大牛指示调用的NtUserGetForegrouondWindow

为何总是调用失败呀
2009-3-3 03:24
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
哈哈,原来是huhu0013啊。嘎嘎\
我是菜鸟,我帮不上什么别的。就帮顶吧
我也想知道这个杂用
2009-3-10 14:24
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
调用这个函数,首先你自己必须是GDI线程
2009-3-22 14:49
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
vxk老大说了,要把prevmode换成user mode
current thread的xx换成user mode
另外不能Att Csrss,要Att到一个真的有GUI的进程,否则不能XX
2009-3-30 23:52
0
游客
登录 | 注册 方可回帖
返回
//