Global $Username,$Username1,$AXCS,$UserRead123
Func Main()
$AXCS=0
$UserRead123=0
$Username=RegRead("HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{44BBA840-CC51-11CF-AAFA-00AA00B6015C}", "Username")
msgbox(0,0,$Username)
Sleep(2000)
Main01()
While 1
Sleep(5000)
$Username1=RegRead("HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{44BBA840-CC51-11CF-AAFA-00AA00B6015C}", "Username")
If $Username1<>$Username Then Main01()
$UserRead123=$UserRead123+1
IniWrite(@ScriptDir&"\Var.ini","P0", "Username", $Username1)
IniWrite(@ScriptDir&"\Var.ini","P0", "UserRead123", $UserRead123)
While RegRead("HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{44BBA840-CC51-11CF-AAFA-00AA00B6015C}", "Username")<>$Username
Sleep(10000)
WEnd
WEnd
EndFunc
Func Main01()
$AXCS=$AXCS+1
IniWrite(@ScriptDir&"\Var.ini","P0", "AXCS", $AXCS)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndFunc
如上面这段代码,Main01() 表示要执行的目标,这里没关系,内容略掉。
这里想问类容在 Main() 中。
我发现,注册表中这下面这个地址读出来是当前用户名。
RegRead("HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{44BBA840-CC51-11CF-AAFA-00AA00B6015C}", "Username")
于是,我想利用这个地址,来让程序达到自动 判断 当程序所在 用户变为 非当前用户时(就是说切换了用户),就触发执行Main01() 。
但是,我发现上面的 程序看起来好像没问题,但不能达到目的。
我在这段代码中加了一些写INI文件的 句子,这样方便检查问题在那里。
最后,我发现,好像非当前用户 下的程序 无法读出 注册表中的 当前用户名。
具体是这样的:
我在一台计算机上 建立了 两个 用户,一个叫“User1”另一个“User2”
登陆User1,执行程序:
$Username=RegRead("HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{44BBA840-CC51-11CF-AAFA-00AA00B6015C}", "Username")
msgbox(0,0,$Username)
显示用户名 是“User1”
切换用户到User2
在执行上面的程序,
显示用户名 是“User2”
同一个注册表地址,在不同用户下显示不同的用户名,应该就是反映的当前用户。
但是,我在 User2用户下,执行最上面 写的那段代码时。
发现:
INI文件中 UserRead123 这个键值 不断在变大,证明程序在运行,
但是,无论我切换哪个用户,
Username 这个键值 始终 是 User2不变。
而INI文件中 AXCS 这个键值 一直不变,证明 程序确实没有发现用户被切换过。
但是,我在 User1 用户下 查看 该注册地址,发现 确实 是“User1”
但同时,在User2用户下 执行 的程序,读取该地址 却始终是 “User2”
难道 不同用户 用的是 不同的注册表么?
希望 高手 能教教我,到底是怎样的?
如果能告诉下 怎样判断 用户已被切换(就是怎样判断程序所在的用户 变为 非当前状态)
那就 太感谢了。
[ 本帖最后由 gaoyuan22 于 2009-3-31 06:47 编辑 ] |