C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[53325] 다시 또 자답입니다. 약간 수정했구여 되긴 되는데 헷갈리네요;; 어설픕니다
번외편 [wifemylove] 1784 읽음    2008-05-02 09:58
Memo2 부분에는 하위 폴더가 보여지고 Label34부분에는 데이터값이 보여집니다.
어찌저찌 찾아서 수정을 해서 되긴 했는데.. 뭔가가 -_-;; 원래는 while 문으로 하는건데
왜 전 while문으로 해서 돌리면 제대로 동작을 안하는지 모르겠군여 ㅡㅡㅋ;;
원본 소스도 올려드립니다. 데브피아 펌이구여 윗부분은 제가 수정한거고여
아래쪽은 원본입니다.
제가 수정한게 많이 어설프니깐 정 필요하신분만 가져다 쓰시는게 좋으실듯 하구여;;
다른분께서 원본을 수정해서 올려주셨으면 하네요

이젠 레지스트리값 가지고 비교해서 원하는 랜카드를 쓸수 있도록 해야겠군여;;

----------------------------------------------------------------------------------------------

        int i;
        LONG    Result;
        LONG    Result2;
        HKEY    hkey;

        DWORD   dwType;
        DWORD   dwBytes=100;

        char    buffer[100];
        int     index=0;

        char Address[] = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards";
        char Name[] = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-        08002BE10318}\\{AA30449A-C71A-4EC7-B48D-413F26A95A0F}\\Connection";

        RegCreateKeyEx( HKEY_LOCAL_MACHINE, Address, NULL, NULL, NULL, KEY_ENUMERATE_SUB_KEYS, NULL, &hkey ,NULL);

        for(i=0;i<sizeof(buffer);i++)
        {
                unsigned long subkeysize=sizeof buffer;

                Result=RegEnumKeyEx(hkey, index++, buffer, &subkeysize, NULL, NULL, NULL, NULL);

                if (Result == ERROR_SUCCESS)
                {
                          //Label31->Caption=buffer;
                          Memo2->Lines->Add(buffer);
                }
                else
                {
                         Label31->Caption="Register Read Error";
                }
        }

        // open Regstry Key
        RegOpenKeyEx(HKEY_LOCAL_MACHINE, Name, 0, KEY_ALL_ACCESS, &hkey);

        Result2=RegQueryValueEx(hkey, "name", 0, &dwType, (LPBYTE)buffer, &dwBytes);

        // Read Regstry Key

        if(Result2 == ERROR_SUCCESS)
        {
                Label34->Caption=buffer;
        }
        else
        {
                Label34->Caption="Register Read Error";
        }

        RegCloseKey(hkey);




---------------------------------------------------------------------------------------------

    #define MAX_KEY_SIZE 255

    #define MAX_BUFFER_SIZE 1024

    CRegKey     subKey;

    CRegKey     subKey2;

    CString     strWebkey="Software\\";        //서브키 경로

    int         index = 0;
    long        retVal;
    int         index2 = 0;
    long        retVal2;

    TCHAR       subKeyName[MAX_KEY_SIZE];
    ULONG       bufferSize = MAX_KEY_SIZE;
    TCHAR       keyValBuffer[MAX_BUFFER_SIZE];
    ULONG       keyBuffSize = MAX_BUFFER_SIZE;

    ZeroMemory(keyValBuffer, keyBuffSize);

    if(subKey.Open(HKEY_CURRENT_USER, strWebkey) == ERROR_SUCCESS)

    {

            retVal = RegEnumKeyEx(subKey.m_hKey, index, subKeyName, &bufferSize, NULL, NULL, NULL, NULL);

            while(retVal != ERROR_NO_MORE_ITEMS)

            {

                AfxMessageBox(subKeyName);

                ZeroMemory(keyValBuffer, keyBuffSize);

                index2=0;

                if(subKey2.Open(HKEY_CURRENT_USER, strWebkey+subKeyName) == ERROR_SUCCESS)

                {

                    retVal2 = RegEnumValue(subKey2.m_hKey, index2, subKeyName, &bufferSize, NULL, NULL, NULL, NULL);
     
                    while (retVal2 != ERROR_NO_MORE_ITEMS)

                    {

                        AfxMessageBox(subKeyName);

                        index2++;

                        ZeroMemory(keyValBuffer, keyBuffSize);

                        keyBuffSize = MAX_BUFFER_SIZE;

                        ZeroMemory(subKeyName, MAX_KEY_SIZE);

                        bufferSize = MAX_KEY_SIZE;

                        retVal2 = RegEnumValue(subKey2.m_hKey, index2, subKeyName, &bufferSize, NULL, NULL, NULL, NULL);

                    }

                }

                subKey2.Close();

                index++;

                ZeroMemory(keyValBuffer, keyBuffSize);

                keyBuffSize = MAX_BUFFER_SIZE;

                ZeroMemory(subKeyName, MAX_KEY_SIZE);

                bufferSize = MAX_KEY_SIZE;

                retVal = RegEnumKeyEx(subKey.m_hKey, index, subKeyName, &bufferSize, NULL, NULL, NULL, NULL);


            }

            subKey.Close();

    }

----------------------------------------------------------------------------------------------

키를 열거하는 함수입니다.

LONG RegEnumKey(
  HKEY hKey,     // handle to key to query
  DWORD dwIndex, // index of subkey to query
  LPTSTR lpName, // buffer for subkey name
  DWORD cbName   // size of subkey name buffer
);

값을 열거하는 함수입니다.

LONG RegEnumValue(
  HKEY hKey,             // handle to key to query
  DWORD dwIndex,         // index of value to query
  LPTSTR lpValueName,    // value buffer
  LPDWORD lpcValueName,  // size of value buffer
  LPDWORD lpReserved,    // reserved
  LPDWORD lpType,        // type buffer
  LPBYTE lpData,         // data buffer
  LPDWORD lpcbData       // size of data buffer
);

+ -

관련 글 리스트
53315 레지스트리 정보 불러오기 질문드립니다 번외편 1526 2008/04/30
53320     자답 그리고 또 질문이요 번외편 1503 2008/04/30
53325         다시 또 자답입니다. 약간 수정했구여 되긴 되는데 헷갈리네요;; 어설픕니다 번외편 1784 2008/05/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.