本帖最后由 Tr0j4n 于 2010-07-15 10:50:44 编辑

解决方案 »

  1.   

    托盘显示不是都用Shell_NotifyIcon的吗?
    以前是用的什么方法?
      

  2.   

    怕大家看不懂VB代码,我来解释下吧。首先从Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify的IconStreams里面把那些字节读出来,分别转换成16进制,放到数组中
    也就是myRegistryKeyAsByte现在遍历转换后的十六进制数组
    定义一个临时字符串
    如果数组的某位为空,就前面写2个0,然后加到临时数组上,如果位数为1,就前面添1个0,加到临时数组上;如果为2,就直接加到临时数组上。当然了,其实这就是个字符串好了,现在取你的程序的路径,假设放到了一个临时字符串myTempAppPathAsByte,转成字节
    遍历程序的路径字符串
    再定义个myAppPathAsByte,长度弄成myTempAppPathAsByte的2倍If x Mod 2 = 0 Then
    myAppPathAsByte(x) = myTempAppPathAsByte(CInt(x / 2))
    Else
    myAppPathAsByte(x) = 0
    End If
    这个应该大家看的懂,Cint函数就是转int,其实就是C里面的(int)强制转换一样的作用,x是位数
    因为转一次填0一次,所以自然长度是2倍还记得前面的myRegistryKeyAsByte么?很好,现在去myRegistryKeyAsByte里面找myAppPathAsByte的位置myPosition。C++的字符串查找大家应该会myRegistryKeyAsByte(CInt(myPosition / 2 - 20)) = WhenToShow
    这个很关键也就是位置除以2-20那个字节就是确定显示的方法了,让他等于 WhenToShow
    前面注释说了
    16 (Dec) for always (verified), 17 (dec) for never 
    写回注册表重启Explorer
      

  3.   

    HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
    HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
    HKEY_USERS\S-1-5-21-1528055943-2021473337-2693976397-500\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
    HKEY_USERS\S-1-5-21-1528055943-2021473337-2693976397-500_Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify找到这几个含有IconStreams的表象