找回密码
 加入
搜索
查看: 1153|回复: 4

注册表读取 时碰到一个问题,求教。

[复制链接]
发表于 2009-3-24 03:11:35 | 显示全部楼层 |阅读模式
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 编辑 ]
发表于 2009-3-25 04:36:38 | 显示全部楼层
@UserName
 楼主| 发表于 2009-3-26 19:36:31 | 显示全部楼层
@UserName?
楼上的朋友,什么意思肯不明白啊,
能说得详细点么?
谢谢啊。
发表于 2009-3-26 19:38:15 | 显示全部楼层
返回当前用户名
 楼主| 发表于 2009-3-27 23:15:06 | 显示全部楼层
谢谢 楼上的朋友,但是这个不是我想要的。

@UserName 读出来的 是程序所处的用户 的用户名
无论 怎样切换 用户,这个变量的 值是不变的。

如果不修改用户名,这个值 其实是个常量。

我所想要的东西 是反映 程序所处的用户 是否 为当前用户。

也就是说用户被切换后,能反映出变化。

而这个 命令达不到这个目的。

比如:一台电脑有 2个用户,名字为 U1 和 U2.

在U1 下运行程序,程序 用这个命令 读用户名,不断的读,
之后 再切换 用户到 U2,
但是,
在U1下运行的程序 用这个命令读出的用户名 是不会变的,永远是U1.
无法得知 用户已被切换。

我想找的,就是能判断 用户是否被切换了的方法。

我想是不是 在注册表里,应该有个地址,能反映 当前用户的名字。
我找了,但没找到。

[ 本帖最后由 gaoyuan22 于 2009-3-27 23:16 编辑 ]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-19 14:29 , Processed in 0.069719 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表