void CDialogA::OnInitDialog() { CString pname, key,name; int len; const int len_b1=255; const int len_b2=1000; CArray<int, int> num; int insrt=0; num.RemoveAll(); key="●●●"; HKEY hkey; if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, key ,0,KEY_READ | KEY_EXCUTE, &hkey)==ERROR_SUCCESS){ char szBuffer1[len_b1],szBuffer2[len_b2]; DWORD dwBufferSize1=len_b1; DWORD dwBufferSize2=len_b2; DWORD dwSubkey=0; DWORD dwType=REG_SZ; while(::RegEnumValue(hkey,dwSubKey++, szBuffer1, &dwBufferSize1,NULL,&dwType,(LPBYTE)szBuffer2, &dwBufferSize2)==ERROR_SUCCESS){ IsAdd=TRUE; name=szBuffer1; name=name.Right(name.GetLength()-7); int no=atoi(name); for(int i=0; i<num.GetSize(); i++){ if(num<no) continue; else if(num>no){ IsAdd=FALSE; insrt=i; num.InsertAt(i,no); break; } } (以下略) }
少し長いので聞きたい所だけ取り出しました。このプログラムはレジストリからキーを取得し、エントリを列挙する。
szBuffer1にはレジストリのエントリ名が格納されるバッファ
szBuffer2にはレジストリエントリのデータが格納されるバッファ だとは思うんですがその後がよくわかりません。
>>name=name.Right(name.GetLength()-7); で
レジストリのエントリ名はPositionでデータにはダイアログのサイズが入ってました。
名前 種類 データ
Position REG_SZ 100,100,100,100 など
swBuffer1には定数文字列への32ビットポインタのLPTSTR型ですよね。
長さ-7とかいうのがさっぱり意味わかりません。