我自己建立了一个文件类型(扩展名为TTU),
然后在注册表中建立了各个主键,指定了默认图标和打开程序,这些都实现了,工作正常。最后在程序要发布的时候有了麻烦,我的安装程序是用Installshield做的把上述设置添加到注册表中也都没问题,问题就出在这个默认图标上,每次总要在注销或是重启后才能起效,看来是注册表设置并没有实时更新的结果,于是我用了SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0)来重启,但是还是没有用啊,请各位高手指点
然后在注册表中建立了各个主键,指定了默认图标和打开程序,这些都实现了,工作正常。最后在程序要发布的时候有了麻烦,我的安装程序是用Installshield做的把上述设置添加到注册表中也都没问题,问题就出在这个默认图标上,每次总要在注销或是重启后才能起效,看来是注册表设置并没有实时更新的结果,于是我用了SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0)来重启,但是还是没有用啊,请各位高手指点
解决方案 »
- cxgrid主从表 点击+号触发什么事件
- 我想把一个现成的EXE文件加到自己写的程序里。然后我点我程序里的确定按钮就把这个EXE程序释放到当前目录里。如何实现。有点像木马程序!
- 动态复杂表单的数据输入问题
- 请教COMBOBOX的用法
- delphi6的注册?
- 200分了~~主程序调用DLL文件里的FORM,为什么form关闭的时候主程序窗口莫名其妙的最小化阿?
- 如何实现每过一年数据库中的年龄字段自动加1
- 怎样捕捉鼠标是否在一个控件上?
- 现在每个人发言都有个图标是什么意思啊??
- 文件夹加密
- 怎么任意备份Access数据库里面的表?
- 本论坛最简单的问题!怎样让DELPHI进入的时候不自动产生PROGJECT1!
sendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
// 修改注册表代码
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0);
const
KEY_TYPE = HKEY_CURRENT_USER;
KEY_NAME = 'Control Panel\Desktop\WindowMetrics';
KEY_VALUE = 'Shell Icon Size';
var
Reg: TRegistry;
strDataRet, strDataRet2: string; procedure BroadcastChanges;
var
success: DWORD;
begin
SendMessageTimeout(HWND_BROADCAST,
WM_SETTINGCHANGE,
SPI_SETNONCLIENTMETRICS,
0,
SMTO_ABORTIFHUNG,
10000,
success);
end;begin
Result := False;
Reg := TRegistry.Create;
try
Reg.RootKey := KEY_TYPE;
// 1. open HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
if Reg.OpenKey(KEY_NAME, False) then
begin
// 2. Get the value for that key
strDataRet := Reg.ReadString(KEY_VALUE);
Reg.CloseKey;
if strDataRet <> '' then
begin
// 3. Convert sDataRet to a number and subtract 1,
// convert back to a string, and write it to the registry
strDataRet2 := IntToStr(StrToInt(strDataRet) - 1);
if Reg.OpenKey(KEY_NAME, False) then
begin
Reg.WriteString(KEY_VALUE, strDataRet2);
Reg.CloseKey;
// 4. because the registry was changed, broadcast
// the fact passing SPI_SETNONCLIENTMETRICS,
// with a timeout of 10000 milliseconds (10 seconds)
BroadcastChanges;
// 5. the desktop will have refreshed with the
// new (shrunken) icon size. Now restore things
// back to the correct settings by again writing
// to the registry and posing another message.
if Reg.OpenKey(KEY_NAME, False) then
begin
Reg.WriteString(KEY_VALUE, strDataRet);
Reg.CloseKey;
// 6. broadcast the change again
BroadcastChanges;
Result := True;
end;
end;
end;
end;
finally
Reg.Free;
end;
end;