Использование приложения из других программ

Определение того, что приложение Склонение по падежам установлено на компьютере

Для этого необходимо убедиться, что в реестре Windows есть определённый ключ [SOFTWARE\AAP Software\DeclinationByCase]



TRegistry *reg=new TRegistry();                        //Создали обьект reg класса TRegistry

reg->RootKey=HKEY_CURRENT_USER;          //Как и при записи указываем раздел с которым будем работать

if (reg->OpenKeyReadOnly("SOFTWARE\\AAP Software\\DeclinationByCase")) ShowMessage("Программа [Склонение по падежам] найдена!");

else ShowMessage("Программа [Склонение по падежам] не установлена!");

reg->CloseKey();                                  //Закрываем ключ

delete reg;                                              // Освобождаем память


Запуск приложения Склонение по падежам

Читаем из указанной выше ветки значение строкового параметра Path и выполняем запуск этого EXE-файла.



TRegistry *reg=new TRegistry();                        //Создали обьект reg класса TRegistry

reg->RootKey=HKEY_CURRENT_USER;          //Как и при записи указываем раздел с которым будем работать

if (reg->OpenKeyReadOnly("SOFTWARE\\AAP Software\\DeclinationByCase")) {

       UnicodeString ExePath;                    //Строка в которую мы занесем значение параметра из реестра

       ExePath=reg->ReadString("Path");           // Читаем путь, где лежит EXE-файл

       ShellExecute(Handle,L"open",ExePath.w_str(),NULL,NULL,SW_SHOWNORMAL);

}

else ShowMessage("Программа [Склонение по падежам] не установлена!");

reg->CloseKey();                                  //Закрываем ключ

delete reg;                                              //Освобождаем память


Передача слова для склонения в приложение

Для выполнения этого задания понадобятся две вспомогательные функции, которые описаны ниже checkProgRun и WriteToMapFile.

Задаём слово для склонения, проверяем запущена ли наша программа и передаём ей строку через разделяемую память.



//---------------------------------------------------------------------------

// Проверяем запущен ли EXE-файл pname

//---------------------------------------------------------------------------

bool checkProgRun(UnicodeString pname) {

       UnicodeString fname;

       int l;

       bool flag=false;

       ::PROCESSENTRY32 prj;

       prj.dwSize = sizeof(::PROCESSENTRY32);

       HANDLE hss;

       pname=pname.UpperCase();

       hss=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

       if (((int)(hss))==(-1)) return(false);

       try {

               for (bool loop=Process32First(hss, &prj);loop;loop=Process32Next(hss,&prj)) {

                       fname=UnicodeString(prj.szExeFile).Trim().UpperCase();

                       fname=get_file_name(fname); // Только имя файла

                       l=fname.Length();

                       if (fname==pname) flag=true;

               }

       }

       catch (...) {  }

       CloseHandle(hss);

       return(flag);

}

//---------------------------------------------------------------------------

// Пишем в разделяемую память MapName значение data

//---------------------------------------------------------------------------

bool WriteToMapFile(UnicodeString MapName,UnicodeString data) {

       bool res=false;

       HANDLE hMapFile;

       LPCTSTR pBuf;

       hMapFile = OpenFileMapping(

                          FILE_MAP_ALL_ACCESS,   // read/write access

                          FALSE,                 // do not inherit the name

                          MapName.w_str()); // name of mapping object

       if (hMapFile!=NULL) {

               pBuf = (LPTSTR) MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,1000);

               if (pBuf!=NULL) {

                       CopyMemory((PVOID)pBuf,data.w_str(),data.Length()*2+2); // Копируем в общую память

                       UnmapViewOfFile(pBuf); // Снимаем мэппинг

                       res=true;

               }

               CloseHandle(hMapFile); // Закрываем дескриптор

       }

       return(res);

}

//---------------------------------------------------------------------------


s="наше тестовое слово";

if (checkProgRun("DeclinationByCase.exe")) { // Если запущен, то передаем параметры через Shared memory

       WriteToMapFile("AAP_PADEZHI_DATA",s);

}

else { // Если не запущен, то запускаем с параметрами

       ShellExecute(Handle,L"open",ExePath.w_str(),NULL,NULL,SW_SHOWNORMAL);

}



Created with the Personal Edition of HelpNDoc: Full-featured Help generator