This page is in Pre Alpha. That means no grammer checks, no editting and speeling mistakes galore! The explanations and the final version will come soon. Check it out at your own risk! register.cpp #define INITGUID #include static const CHAR szDigits[] = "0123456789ABCDEF"; static const BYTE GuidMap[] = { 3, 2, 1, 0, '-', 5, 4, '-', 7, 6, '-', 8, 9, '-', 10, 11, 12, 13, 14, 15 }; DEFINE_GUID(CLSID_CNatCom,0xABABABA2L,0xF5EF,0x11CF,0xBC,0x7E,0x00,0xA0,0xC9,0x13,0xD2,0x02); VOID GUID2StringA(REFGUID rguid, LPSTR lpsz) { int i; LPSTR p = lpsz; const BYTE * pBytes = (const BYTE *) &rguid; *p++ = '{'; for (i = 0; i < sizeof(GuidMap); i++) { if (GuidMap[i] == '-') { *p++ = '-'; } else { *p++ = szDigits[ (pBytes[GuidMap[i]] & 0xF0) >> 4 ]; *p++ = szDigits[ (pBytes[GuidMap[i]] & 0x0F) ]; } } *p++ = '}'; *p = '\0'; } long _stdcall zzz(HWND w,UINT x,UINT y,long z) { HKEY hKey,hKey2,hKey3;DWORD result; char achCLSID[1000],achLIBID[1000],achModulePathName[1000],achCurrentDirectory[1000]; #define GUIDSTR_MAX (1+ 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1) if ( x == WM_LBUTTONDOWN) { //STRINGFROMCLSID GUID2StringA(CLSID_CNatCom,achCLSID) ; // Create HKEY_CLASSES_ROOT\progid\CLSID RegCreateKey(HKEY_CLASSES_ROOT, "ccc",&hKey); RegSetValue(hKey,0, REG_SZ, "ccc",lstrlen("ccc")); RegCreateKey(hKey,"CLSID",&hKey2); RegSetValue(hKey2, NULL, REG_SZ, achCLSID, GUIDSTR_MAX-1); RegCloseKey(hKey); RegCloseKey(hKey2); // Create HKEY_CLASSES_ROOT\CLSID\...create CLSID key RegCreateKey(HKEY_CLASSES_ROOT, "CLSID", &hKey); // create CLSID/GUID key RegCreateKey(hKey, achCLSID, &hKey2); // put in sample description value into CLSID\GUID key RegSetValue(hKey2, NULL, REG_SZ, "ccc", lstrlen("ccc")); // get our path .. // create subkey under CLSID\GUID RegCreateKey(hKey2, "InprocServer32", &hKey3); strcpy(achModulePathName,"C:\\ddays\\sj\\zzz.dll"); RegSetValue(hKey3, NULL, REG_SZ,achModulePathName,lstrlen(achModulePathName)); RegSetValueEx(hKey3,"ThreadingModel",0,REG_SZ,(BYTE*)"Both",sizeof("Both")); RegCloseKey(hKey3); // PROGID RegCreateKey(hKey2, "ccc", &hKey3); RegSetValue(hKey3,0,REG_SZ,"ccc",lstrlen("ccc")); RegCloseKey(hKey3); MessageBox(0,"Registered","Success",0); } if ( x == WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } WNDCLASS a;HWND b;MSG c; int _stdcall WinMain(HINSTANCE i,HINSTANCE j,char *k,int l) { a.lpszClassName="a1";a.hInstance=i;a.lpfnWndProc=zzz; a.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&a); b=CreateWindow("a1","kkk",WS_OVERLAPPEDWINDOW,0,0,0,0,0,0,i,0); ShowWindow(b,3); while ( GetMessage(&c,0,0,0)) DispatchMessage(&c); }