我取出注册表中HKEY_USERS\.DEFAULT\Keyboard Layout\Preload下1的值,为00000804我把这个值作为参数,准备再取HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000804中Layout Text的值。可是程序出错了。程序如下:
var
hKey1:HKEY;
size:cardinal;
value,value3:array[0..255]of char;
str:string;
begin
RegOpenKeyEx(HKEY_USERS,'.DEFAULT\Keyboard Layout\Preload',0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'1',nil,nil,@value,@size);
RegCloseKey(HKey1);
str:='SYSTEM\CurrentControlSet\Control\Keyboard Layouts\'+string(value);
p:=pchar(str);
regOpenKeyEx(HKEY_LOCAL_MACHINE,p,0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'Layout Text',nil,nil,@value3,@size);
memo7.Lines.Add(value3);
regclosekey(HKey1);
end;
可是当我直接读取HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000804的值的时候,又没有什么问题,代码如下:
regOpenKeyEx(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000804',0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'Layout Text',nil,nil,@value3,@size);
memo7.Lines.Add(value3);
regclosekey(HKey1);
我比较过我取得的value的值,和‘00000804’是一样的,只不过用变量转换了一下,怎么就读取不出来了,太奇怪了!请高手指点。
var
hKey1:HKEY;
size:cardinal;
value,value3:array[0..255]of char;
str:string;
begin
RegOpenKeyEx(HKEY_USERS,'.DEFAULT\Keyboard Layout\Preload',0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'1',nil,nil,@value,@size);
RegCloseKey(HKey1);
str:='SYSTEM\CurrentControlSet\Control\Keyboard Layouts\'+string(value);
p:=pchar(str);
regOpenKeyEx(HKEY_LOCAL_MACHINE,p,0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'Layout Text',nil,nil,@value3,@size);
memo7.Lines.Add(value3);
regclosekey(HKey1);
end;
可是当我直接读取HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000804的值的时候,又没有什么问题,代码如下:
regOpenKeyEx(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000804',0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'Layout Text',nil,nil,@value3,@size);
memo7.Lines.Add(value3);
regclosekey(HKey1);
我比较过我取得的value的值,和‘00000804’是一样的,只不过用变量转换了一下,怎么就读取不出来了,太奇怪了!请高手指点。
解决方案 »
- 急!使用DataMoudle时总是报错
- 关于用odac连接oracle数据库的问题,为什么提示oci.dll找不到指定模块?(在线)
- 为什么Delphi写的ActiveForm,被delphi调用时,Tab等DialogKey无效
- 怎么在MEMO控件中输出定宽文本 [A B C] 马上结帖!
- 天太热了,请大家来喝点可乐,呵呵
- 关于NetUserEnum()的用法,能否请各位给出详细的Delphi源代码?
- 怎样用Rave5使数据分组显示,并统计分组的数据?
- 大家帮帮忙,关于报表的问题!
- %%%%%%%%%如何用OLE的文件流来读一个WORD文档(万分紧急啊) %%%%%%%%%%%%
- 控制光驱
- 今天被CRC16算法弄糊涂了,请大家帮帮忙
- GDI+用PNG图片做半透明异型窗口
lpcbDataPoints to a variable that specifies the size, in bytes, of the buffer pointed to by the lpData parameter. When the function returns, this variable contains the size of the data copied to
lpData. If the buffer specified by lpData parameter is not large enough to hold the data, the function returns the value ERROR_MORE_DATA, and stores the required buffer size, in bytes, into the variable pointed to by lpcbData.
If lpData is NULL, and lpcbData is non-NULL, the function returns ERROR_SUCCESS, and stores the size of the data, in bytes, in the variable pointed to by lpcbData. This lets an application determine the best way to allocate a buffer for the value key's data. If the data has the REG_SZ, REG_MULTI_SZ or REG_EXPAND_SZ type, then lpData will also include the size of the terminating null character.
The lpcbData parameter can be NULL only if lpData is NULL.
程序修改为下面即可:
==========================
begin
size:=255;RegOpenKeyEx(HKEY_USERS,'.DEFAULT\Keyboard Layout\Preload',0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'1',nil,nil,@value,@size);
RegCloseKey(HKey1);
str:='SYSTEM\CurrentControlSet\Control\Keyboard Layouts\'+string(value);
p:=pchar(str);size:=255;
regOpenKeyEx(HKEY_LOCAL_MACHINE,p,0,KEY_READ,HKey1);
RegQueryValueEx(HKey1,'Layout Text',nil,nil,@value3,@size);
memo7.Lines.Add(value3);
regclosekey(HKey1);end;