本来今天平安夜,我是要来写点东西的,结果发现上回的文章(Desktop控制第一部分)没有人注意,
也没有人有留言, 故信心大减.
但我还是把: Desktop背景图设置整理一下.
另外再讲一下: Hook Desktop 后的方便, 以及Hook Desktop 的实现原理.
1. Desktop背景图设置
由于上一篇文章没有讲的很细致, 这回补充说明一下.
下面的代码是基于VC6 MFC的. 额外使用类: CDVReg 设置注册表健值, 这个大家可以自己实现. 这里不再提供.
BOOL SetBackImage(LPCTSTR lpszImage)
{
if ( ! lpszImage || 0 == lstrlen( lpszImage ) )
return TRUE;
CString strSubKey = "" ;
// 下面代码找到当前用户的KEY值, 如: S-1-5-21-329068152-1788223648-839522115-500
HKEY keyUsers = NULL;
for ( int i = 0 ; i < 24 ; i ++ )
{
DWORD dwRet = RegEnumKey( HKEY_USERS,
i,
strSubKey.GetBuffer( 256 ),
256 );
strSubKey.ReleaseBuffer();
if ( ERROR_SUCCESS == dwRet )
{
CString strCheck = strSubKey + " /Software/Microsoft/Internet Explorer/Desktop/General " ;
HKEY hKeySub = NULL;
if ( ERROR_SUCCESS == RegOpenKey( HKEY_USERS, strCheck, & hKeySub ) )
{
RegCloseKey( hKeySub );
break ;
}
}
else
{
strSubKey = "" ;
break ;
}
strSubKey = "" ;
}
if ( strSubKey.IsEmpty() )
return FALSE;
CString strWallPaper = lpszImage;
CString WallpaperStyle = " 2 " ; // 风格
// 1.
CString strPath = " Control Panel/Desktop " ;
CString strField =
{
if ( ! lpszImage || 0 == lstrlen( lpszImage ) )
return TRUE;
CString strSubKey = "" ;
// 下面代码找到当前用户的KEY值, 如: S-1-5-21-329068152-1788223648-839522115-500
HKEY keyUsers = NULL;
for ( int i = 0 ; i < 24 ; i ++ )
{
DWORD dwRet = RegEnumKey( HKEY_USERS,
i,
strSubKey.GetBuffer( 256 ),
256 );
strSubKey.ReleaseBuffer();
if ( ERROR_SUCCESS == dwRet )
{
CString strCheck = strSubKey + " /Software/Microsoft/Internet Explorer/Desktop/General " ;
HKEY hKeySub = NULL;
if ( ERROR_SUCCESS == RegOpenKey( HKEY_USERS, strCheck, & hKeySub ) )
{
RegCloseKey( hKeySub );
break ;
}
}
else
{
strSubKey = "" ;
break ;
}
strSubKey = "" ;
}
if ( strSubKey.IsEmpty() )
return FALSE;
CString strWallPaper = lpszImage;
CString WallpaperStyle = " 2 " ; // 风格
// 1.
CString strPath = " Control Panel/Desktop " ;
CString strField =