用VC修改了注册表后,如何使修改的内容起作用??

xsilver 2003-08-12 11:55:10
我通过VC修改了桌面的背景,但是需要重新启动才能看到效果,有什么办法可以立即看到效果的?
...全文
47 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsilver 2003-08-13
  • 打赏
  • 举报
回复
倒,给客户用的东西还让他们自己去"直接结束了,Explorer.exe的进程,然后再启动Explorer.exe"
那我就要回家放暑假了,呵呵。

不行的话只好自动重启计算机
lonkil 2003-08-13
  • 打赏
  • 举报
回复
直接结束了,Explorer.exe的进程,然后再启动Explorer.exe。不就行了?
xsilver 2003-08-13
  • 打赏
  • 举报
回复
杀掉explorer.exe 再启动它 怎么用代码实现,没法子了,只能用这个再试一次了。
xsilver 2003-08-13
  • 打赏
  • 举报
回复
寒;不知道是什么原因就是无效,唉,可能我改的壁纸是html格式的缘故(其实就是一flash),用了大家提到的4种方法都没用,不能立即看到新的背景,唉。杀掉explorer.exe 再启动它我还没试过,不过这个破坏力太强了,呵呵,谢谢各位了。
xsilver 2003-08-13
  • 打赏
  • 举报
回复
寒,我也是2000,server版的。
volcary 2003-08-13
  • 打赏
  • 举报
回复
不会吧,我在2000下是绝对有效的,你可以自己改变一下分辨率来确定一下
杀进程的代码就不给你了,自己到网上找吧N多
dhyuser10 2003-08-12
  • 打赏
  • 举报
回复
马上起作用哦
volcary 2003-08-12
  • 打赏
  • 举报
回复
动态改变一下屏幕的分辨率,应当会导致explorer重新LOAD背景
volcary 2003-08-12
  • 打赏
  • 举报
回复
改变分辨率再恢复
DEVMODE DevMode;
DWORD DoldWidth,DoldHeight;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS, &DevMode);
DoldWidth=DevMode.dmPelsWidth;
DoldHeight=DevMode.dmPelsHeight;
if(DevMode.dmPelsWidth>640)
{
DevMode.dmPelsWidth=640;
DevMode.dmPelsHeight=480;
}
else
{
DevMode.dmPelsWidth=800;
DevMode.dmPelsHeight=600;
}
ChangeDisplaySettings(&DevMode,0);
DevMode.dmPelsWidth=DoldWidth;
DevMode.dmPelsHeight=DoldHeight;
ChangeDisplaySettings(&DevMode,0);
可以立即看到新的背景

还有一种方法是杀掉explorer.exe 再启动它,也可以实现相似效果
daydreamer21 2003-08-12
  • 打赏
  • 举报
回复
up
visualabc 2003-08-12
  • 打赏
  • 举报
回复
http://www.vctop.com/View.Asp?ID=231&CateID=1
xsilver 2003-08-12
  • 打赏
  • 举报
回复
to skink:
我就是照着,你们得方法写的,可是没反应。难死我了,我用的是VC++.net

看看哪里不对??
LPTSTR lpBuffer;

UINT uSize;

HANDLE hHeap;

uSize=(GetCurrentDirectory(0,NULL))*sizeof(TCHAR);

hHeap=GetProcessHeap();

lpBuffer=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,uSize);

GetCurrentDirectory(uSize,lpBuffer);

CString currentFlash=lpBuffer;
CString currentExe=lpBuffer;

currentFlash.Append("\\calinda.html");
currentExe.Append("\\DemoIce.exe");
//lpBuffer=lpBuffer+(LPTSTR)"/calinda.html";

//LPBYTE asddsa=(LPBYTE)lpBuffer+(LPBYTE)"/calinda.html";

HKEY hKEY;
CString strDispType="0";
LPCTSTR strRegPathFlash1="Control Panel\\Desktop";

LPCTSTR strRegPathFlash2="Software\\Microsoft\\Internet Explorer\\Desktop\\General";
LPCTSTR strRegPathexe="Software\\Microsoft\\Windows\\CurrentVersion\\Run";

RegOpenKeyEx(HKEY_CURRENT_USER,strRegPathFlash1,0,KEY_WRITE,&hKEY);
//LPCTSTR strRegPathFlash=".DEFAULT\\Control Panel\\Desktop";
//RegOpenKeyEx(HKEY_USERS,strRegPathFlash,0,KEY_WRITE,&hKEY);

LPBYTE owner_Set=(LPBYTE)strDispType.GetString();
LPBYTE flash_Set=(LPBYTE)currentFlash.GetString();
LPBYTE exec_Set=(LPBYTE)currentExe.GetString();

DWORD type_1=REG_SZ;
DWORD cdData_0=currentFlash.GetLength()+1;
DWORD cdData_1=strDispType.GetLength()+1;
DWORD cdData_2=currentExe.GetLength()+1;

//RegSetValueEx(hKEY,"Wallpaper",NULL,type_1,(LPBYTE)" ",1);
RegSetValueEx(hKEY,"Wallpaper",NULL,type_1,flash_Set,cdData_0);

RegSetValueEx(hKEY,"TileWallpaper",NULL,type_1,owner_Set,cdData_1);
RegCloseKey(hKEY);

RegOpenKeyEx(HKEY_CURRENT_USER,strRegPathFlash2,0,KEY_WRITE,&hKEY);
RegSetValueEx(hKEY,"Wallpaper",NULL,type_1,flash_Set,cdData_0);

RegSetValueEx(hKEY,"TileWallpaper",NULL,type_1,owner_Set,cdData_1);
RegCloseKey(hKEY);


SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)(LPCTSTR),currentFlashSPIF_SENDWININICHANGE );
BSRONG 2003-08-12
  • 打赏
  • 举报
回复
up
skink 2003-08-12
  • 打赏
  • 举报
回复
sorry,:)没看清bcpl的函数全貌,其实和我写的第一个一样,我想一定是你写的有点问题,肯定可一的。
skink 2003-08-12
  • 打赏
  • 举报
回复
bcpl(从来就没有什么救世主,也不靠神仙皇帝) 的方法要等到下次启动才会有效,如果要立即生效,这样写:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\path\file.ext", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE )
此外如果只有本次使用Windows时改变桌面图片(下次开机时还原原状),则应该这样写:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\path\file.ext", SPIF_SENDWININICHANGE )
xsilver 2003-08-12
  • 打赏
  • 举报
回复
to bcpl:
照你的方法试了,毫无反应。
bcpl 2003-08-12
  • 打赏
  • 举报
回复
CString sPicture = "c:\\test.bmp";
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
(PVOID)(LPCTSTR)sPicture,
SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE);
flinming 2003-08-12
  • 打赏
  • 举报
回复
应该是在让系统调用这个参数,也就是刷新下
xsilver 2003-08-12
  • 打赏
  • 举报
回复
??
怎么通过VC代码实现

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧