Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение из реестра, запуск файла, указанного в реестре 
V
    Опции темы
ShMary
Дата 30.11.2007, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



Здравствуйте, уважаемые!

просмотрела множество примеров, связанных с чтением из реестра, и попыталась реализовать 
свою программу, но натолкнулась на огромное число препятствий.  smile 
По порядку. В реестр, а именно в HKEY_CURRENT_USER и далее Software\\Microsoft\\MYYSOFTWARE прописываю переменную MyPath и в нее помещаю путь и название необходимого файла.в файле хранятся параметры для расчета. это делаю в Delphi. 
теперь мне в MVС++ нужно открыть именно этот файл и запустить расчеты. 
вот код, который наворотила я. ПОЖАЛУЙСТА помогите! я в MVС++ очень мало работала... 

#define REGEDITH
#include <windows.h>

void main()
  {
HKEY hkey; 
char  Data[256];
DWORD cbData=sizeof(Data), type;

RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\MYYSOFTWARE", &hkey);
memset(Data, 0, cbData);
RegQueryValueEx(hkey,'MyPath',NULL,&type,(LPBYTE)&Data[0],&cbData);
RegCloseKey(hkey);

char fname [20]= FNAME;                 //
FILE *in;                                           //                                                        //
char st[80];                                      //
printf("%s\n", fname);                      //  (*)Так я делала, когда просто в начеле проги  
if ((in = fopen(fname, "rt"))==NULL)  //   объявляла #define FNAME 'd:\chisla.dat' 
  {                                                      //   
  printf("файл не сущ.");                   // 
  getch();                                             //
  }
printf("\n");                                        //

int i=0;
double doubleVar;
while (!feof(in))
{
  fscanf(in, "%s", st);
  sscanf(st, "%lf", &doubleVar);
  printf("Next double variable: %lf\n", doubleVar);
  per[i]=doubleVar;
  i++;
}
  fclose(in);

Полагаю теперь вместо (*) нужно проверять есть ли такой ключ..и файл. Как мне перейти к тому, чтоб открывать указанный в реестре файл?
Заранее ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
PM MAIL   Вверх
JackYF
Дата 30.11.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



ShMary, пользуйся кнопкой "код". Это раз.
Два. Чтение реестра - это не чистый С++, поэтому добро пожаловать в соседние разделы, там, где обсуждается С++-программирование под Винду, в раздел по Visual C++.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 30.11.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: нет
Всего: 93



IMHO, WinAPI smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 30.11.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(archimed7592 @  30.11.2007,  17:46 Найти цитируемый пост)
IMHO, WinAPI

Можно и в винапи. Главное, чтобы не здесь.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 30.11.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



ShMary

M
MAKCim
Модератор: Используйте тег код!




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ShMary
Дата 1.12.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



Все.Хорошо! smile 
 ОБЯЗАТЕЛЬНО БУДУ использовть кнопку "код". и пойду в соседние разделы. Спасибо за совет!  smile 
PM MAIL   Вверх
archimed7592
Дата 1.12.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: нет
Всего: 93



Эээммм, даже не знаю как тебе сказать... Дело в том, что ты и так уже в соседнем разделе smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ShMary
Дата 1.12.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



ммммммда...пролистала вверх и сама увидела!  smile 
только пока легче не стало...проблема-то осталась! smile 
PM MAIL   Вверх
ShMary
Дата 1.12.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



с учетом вышеизложенных советов...
В реестр, а именно в HKEY_CURRENT_USER и далее Software\\Microsoft\\MYYSOFTWARE прописываю переменную MyPath и в нее помещаю путь и название необходимого файла.в файле хранятся параметры для расчета. это делаю в Delphi. 
теперь мне в MVС++ нужно открыть именно этот файл и запустить расчеты. 
вот код, который наворотила я. ПОЖАЛУЙСТА помогите! я в MVС++ очень мало работала... 
Код

#define REGEDITH
#include <windows.h>

void main()
  {
HKEY hkey; 
char  Data[256];
DWORD cbData=sizeof(Data), type;

RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\MYYSOFTWARE", &hkey);
memset(Data, 0, cbData);
RegQueryValueEx(hkey,'MyPath',NULL,&type,(LPBYTE)&Data[0],&cbData);
RegCloseKey(hkey);

char fname [20]= FNAME;                 //
FILE *in;                                           //                                                        //
char st[80];                                      //
printf("%s\n", fname);                      //  (*)Так я делала, когда просто в начеле проги  
if ((in = fopen(fname, "rt"))==NULL)  //   объявляла #define FNAME 'd:\chisla.dat' 
  {                                                      //   
  printf("файл не сущ.");                   // 
  getch();                                             //
  }
printf("\n");                                        //

int i=0;
double doubleVar;
while (!feof(in))
{
  fscanf(in, "%s", st);
  sscanf(st, "%lf", &doubleVar);
  printf("Next double variable: %lf\n", doubleVar);
  per[i]=doubleVar;
  i++;
}
  fclose(in);



Полагаю теперь вместо (*) нужно проверять есть ли такой ключ..и файл. И создать переменную с результатом чтения ключа.Как мне перейти к тому, чтоб открывать указанный в реестре файл? 
Заранее ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО! ПОЖАЛУЙСТА, ДАЙТЕ КОМЕНТАРИЙ ИЛИ СОВЕТ. 

PM MAIL   Вверх
586
Дата 2.12.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define FNAME "D:\\chisla.dat"

int main(int, char**)
{
    HKEY hkey; 
    char  Data[256];
    DWORD cbData=sizeof(Data), type;

    if(RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\MYYSOFTWARE", &hkey) != ERROR_SUCCESS)
    {
        printf("Cant't open key\n");
        getch();
        return 1;
    }

    memset(Data, 0, cbData);
    if(RegQueryValueExA(hkey,"MyPath",NULL,&type,(LPBYTE)Data,&cbData) != ERROR_SUCCESS)
    {
        printf("Can't query value\n");
        strcpy(Data, FNAME);        // другое имя
    }
    RegCloseKey(hkey);

    FILE *in;                                           //                                                        //
                                         //
    printf("%s\n", Data);                      //  (*)Так я делала, когда просто в начеле проги  
    if ((in = fopen(Data, "rt"))==NULL)  //   объявляла #define FNAME 'd:\chisla.dat' 
      {                                                      //   
      printf("File not found\n");                   // 
      getch();                                             //
      return 2;
      }

    printf("\n");
/*
    char fname [20]; 
    char st[80]; 

    int i=0;
    double doubleVar;
    while (!feof(in))
    {
      fscanf(in, "%s", st);
      sscanf(st, "%lf", &doubleVar);
      printf("Next double variable: %lf\n", doubleVar);
      per[i]=doubleVar;
      i++;
    }*/
      fclose(in);
  return 0;
}

PM   Вверх
ShMary
Дата 4.12.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



Здравствуйте!
Спасибо ОГРОМНОЕ за ответ!!!  smile 
код, правда, не совсем такой, какой мне надо было, но ОЧЕНЬ ПОМОГ! немного подправила под себя- и все замечательно! все работает, как надо!
СПАСИБО!!!!!! Движусь дальше, диплом пишется!.. smile 
Этот вопрос можно считать закрытым.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.