Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2011, 16:58   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

надо проверять успешность операции вообще то.(она же проверка на ошибки)

да и где вы выделили память под буфер?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.08.2011, 17:13   #12
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Alkagolik

Результат не впечатляет (результат, записанный в файл). получилась строка длиной 256 символа 'M', видимо от Microsoft.

Потому что говнокод, вот результат и не впечатляет.

- неинициализированные переменные
- нет проверок на ошибки
- неправильная запись результата
- использование WinAPI вместо классов
- отсутствие RAII
Rififi вне форума Ответить с цитированием
Старый 23.08.2011, 18:00   #13
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Alkagolik
Потому что говнокод
не спорю конечно. на данном этапе задача получить результат. Моя привычная среда редактор, bash, POSIX, all is file, pthread.h, errno.h. Я вообще-то пытаюсь понять что это за такое чудо реестр, зачем он нужен и как наконец закончить эту лабуду и вернуться в свою привычную среду. Если рисовать окошки можно было при помощи winedev, то с файлом.рег такие штуки посложнее будут, сходу не осилить. Какие-то типы... DWORD, LPCSTR, HKEY, HWND "нерусские", какие-то нотации Венгерские, эстетика, оформление и исключения после сделаю. Исключения я вообще планирую вынести в отдельный класс для экономии места, и так уже 500 строк. Пока что нужно "кровь из носа" чтобы работало. Кстати, после запуска программы падает сеть, точнее сеть есть, а пинга нет, что в конечном итоге с практической точки зрения равнозначно.
Alkagolik вне форума Ответить с цитированием
Старый 23.08.2011, 19:23   #14
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

ну пока что так, боюсь линковать, чтобы не напортачить ничего. Не закончено еще, но наверняка и тут хватает ошибок.
Код:
        HANDLE hFile=INVALID_HANDLE_VALUE;
	
	hFile = CreateFile("reg.txt", GENERIC_READ | GENERIC_WRITE,
	0, NULL, CREATE_ALWAYS, 0, NULL);
	if (hFile==INVALID_HANDLE_VALUE){
		MessageBox(NULL,"!CreateFile", "Ошибка!", MB_OK);
		return -2;
	}
	DWORD BufferSize = 4096;
        DWORD cbData;
        DWORD dwRet;
	DWORD dwCount;

	PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
        cbData = BufferSize;
 
	dwRet = RegQueryValueEx( HKEY_LOCAL_MACHINE,
                             TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
                             NULL,
                             (LPDWORD)KEY_READ,
                             (LPBYTE) PerfData,
                             &cbData );
	while( dwRet == ERROR_MORE_DATA )
        {
        // Get a buffer that is big enough.

        BufferSize += 1024;
        PerfData = (PPERF_DATA_BLOCK) realloc(PerfData, BufferSize );
	сbData = BufferSize;

	dwRet = RegQueryValueEx( HKEY_LOCAL_MACHINE,
                          TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
                           NULL,
                           (LPDWORD)KEY_READ,
                           (LPBYTE) PerfData,
                            &cbData );
	WriteFile(hFile, PerfData, cbData,&dwCount, NULL);
	}

	if(!CloseHandle(hFile)){
		MessageBox(NULL,"!CloseHandle(hFile)", "Ошибка!", MB_OK);
		return -2;
	}

Последний раз редактировалось Alkagolik; 23.08.2011 в 19:25.
Alkagolik вне форума Ответить с цитированием
Старый 23.08.2011, 20:57   #15
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
наверняка и тут хватает ошибок
В этом трудно не согласиться с тобой.

lpValueName

Points to a null-terminated string containing the name of the value to be queried.

А ты что туда тычешь вместо name of the value ?
А тычешь ты туда name of the key/

Может отложить на время бурный писательский порыв и почитать хоть что-нибудь о том чем ключ виндового реестра отличается от значения в ключе ?)
mss вне форума Ответить с цитированием
Старый 23.08.2011, 21:37   #16
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

Цитата:
Может отложить на время бурный писательский порыв и почитать хоть что-нибудь о том чем ключ виндового реестра отличается от значения в ключе ?)
С таким же успехом можно мусорить себе голову и бульварными романами после книг Гоголя, например. Задача одноразовая, результата по прежнему нет
Код:
        HKEY hKey;
	LPCSTR lpSubKey = "SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\0";

	RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, NULL, KEY_READ, &hKey);
	HANDLE hFile=INVALID_HANDLE_VALUE;
	
	hFile = CreateFile("reg.txt", GENERIC_READ | GENERIC_WRITE,
	0, NULL, CREATE_ALWAYS, 0, NULL);
	if (hFile==INVALID_HANDLE_VALUE){
		MessageBox(NULL,"!CreateFile",
			"Ошибка!", MB_OK);
		return -2;
	}
	DWORD BufferSize = 4096;
        DWORD cbData;
        DWORD dwRet;
	DWORD dwCount;

	PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
        cbData = BufferSize;
 
	dwRet = RegQueryValueEx(hKey, TEXT(""), NULL, (LPDWORD)KEY_READ,
		(LPBYTE) PerfData, &cbData );

	while( dwRet == ERROR_MORE_DATA )
       {
        // Get a buffer that is big enough.

                BufferSize += 1024;
                PerfData = (PPERF_DATA_BLOCK) realloc(PerfData, BufferSize );
		cbData = BufferSize;

		dwRet = RegQueryValueEx(hKey, TEXT(""),  NULL, (LPDWORD)KEY_READ,
			(LPBYTE) PerfData, &cbData );
		WriteFile(hFile, PerfData, cbData,&dwCount, NULL);
	}
	free (PerfData);
	RegCloseKey(hKey);

	if(!CloseHandle(hFile)){
		MessageBox(NULL,"!CloseHandle(hFile)",
			"Ошибка!", MB_OK);
		return -2;
	}
Alkagolik вне форума Ответить с цитированием
Старый 23.08.2011, 22:01   #17
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
результата по прежнему нет
Потому что "бульварный роман", как и книга Гоголя, тоже писан для чтения, а не для "одноразового подтирания".

Если таки заглянуть в "бульварный роман" с целью почитать про RegQueryValueEx, то в нем написано:

Return Values

If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is a nonzero error code defined in WINERROR.H. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.

Remarks

The key identified by hKey must have been opened with KEY_QUERY_VALUE access
mss вне форума Ответить с цитированием
Старый 23.08.2011, 23:39   #18
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Потому что "бульварный роман", как и книга Гоголя, тоже писан для чтения, а не для "одноразового подтирания".

Если таки заглянуть в "бульварный роман" с целью почитать про RegQueryValueEx, то в нем написано:

Return Values

If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is a nonzero error code defined in WINERROR.H. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.

Remarks

The key identified by hKey must have been opened with KEY_QUERY_VALUE access
товарищ, не утруждайся, каждому свое. Если ты думаешь что общаешься с дебилом, который не заглянул в msdn, то вынужден разочаровать. Я тоже могу и ссылки и цитаты вставить, только от этого легче не станет. А вместо того чтобы бравировать своим гением, можно было изначально указать на то что ключа такого НЕТ. А дальше уже плясать по ситуации. Например если так
Код:
RegOpenKeyEx(
        HKEY_LOCAL_MACHINE,
        L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", //default "значение не присвоено"
        0, KEY_READ, &hKeyResult
    );
то дальше так
Код:
RegQueryValueEx(
        hKeyResult, L"ProductName", //второй параметр
        NULL, NULL, pBuff, &dwBuffSize
    );
а потом уже разбираться со всем остальным: исключения, память и прочее. Спасибо всем за участие.
а вот эту фразу
Цитата:
Потому что "бульварный роман", как и книга Гоголя, тоже писан для чтения, а не для "одноразового подтирания".
готов оспаривать с пеной у рта. И утверждаю что бульварный роман создан именно для подтирания, а не для чтения.
Alkagolik вне форума Ответить с цитированием
Старый 24.08.2011, 10:43   #19
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
который не заглянул в msdn, то вынужден разочаровать
Туда не заглядывать нужно, а читать и внимательно изучать/осознавать прочитанное.

Цитата:
можно было изначально указать на то что ключа такого НЕТ
А я почем знею есть он у тебя или нет его ?

И мало того - даже если он есть, значение в ключе ты не прочитаешь, потому что

key identified by hKey must have been opened with KEY_QUERY_VALUE access
mss вне форума Ответить с цитированием
Старый 24.08.2011, 19:11   #20
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

Цитата:
Туда не заглядывать нужно, а читать и внимательно изучать/осознавать прочитанное.
товариСЧ, собственных детей учите что нужно, а что нет. Я, слава Богу, справляюсь и со своими обязанностями, и со своими детьми.
Alkagolik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти и открыть файл... взять значение из файла и вывести klukva200808 Microsoft Office Excel 2 23.05.2011 02:36
Взять значение ячейки не открывая файл и kzld Microsoft Office Excel 17 25.01.2011 07:01
значение из реестра Smagulov85 Общие вопросы Delphi 6 29.03.2010 01:48
Как считать значение из реестра? (делфи) zotox Помощь студентам 7 26.09.2008 12:38
Cохранить в файл значение заданного имени, тип REG_BINARY. Работа с реестром Windows. DelphiFun Общие вопросы Delphi 9 01.08.2007 21:36