Borland C++ FAQ
Страница 8. Программа



Программа

  1. Как сделать, чтобы программа не запускалась второй раз

    // Для чтобы программа не запускалась второй раз надо модифицировать проектный файл (в данном примере это Project1.cpp):
    #include <vcl.h>
    #pragma hdrstop
    USERES("Project1.res");
    USEFORM("Unit1.cpp", Form1);
    const char *NamedMutex= "OneOnly";
    HANDLE CheckInstance(const char *Name)
    {
    HANDLE Mutex = CreateMutex(NULL, true,Name);
    int er = GetLastError();
    if (er) return 0;
    return Mutex;
    }
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    HANDLE Mutex = CheckInstance(NamedMutex);
    if (!Mutex)
    {
    ShowMessage("Уже работает");
    ReleaseMutex(Mutex);
    return 1;
    }
    try
    {
    Application->Initialize();
    Application->CreateForm(__classid(TForm1), &Form1);
    Application->Run();
    }
    catch (Exception &exception)
    {
    Application->ShowException(&exception);
    }
    return 0;
    }

  2. Как сделать, чтобы программа не запускалась второй раз (Вариант 2)

    // Для чтобы программа не запускалась второй раз напишите следующий код:
    BOOL WeAreAlone(LPSTR szName)
    {
    HANDLE hMutex=CreateMutex(NULL,TRUE,szName);
    if (GetLastError()==ERROR_ALREADY_EXISTS)
      {
      CloseHandle(hMutex);
      return false;
      }
    return true;
    }

    //В CreatForm пишишь проверку:
    if (WeAreAlone("Some_Unique_Name_Or_Other"));
      else
      {
      ShowMessage("Такая программа уже работает!");
      exit(0);
      }

     

  3. Как узнать каталог, где находится запускаемая программа

    // Чтобы узнать каталог напишите следющий код:
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    Label1->Caption = Application->ExeName;
    Label2->Caption = ParamStr(0);
    Label3->Caption = GetCurrentDir();// текущая папка (может измениться!)
    char ExeName[MAX_PATH];
    GetModuleFileName(HInstance, ExeName, sizeof(ExeName));
    Label4->Caption=ExeName;
    }

  4. Как убрать иконку приложения с TaskBar-a

    // Напишите следющий код:
    ShowWindow(Application->Handle, SW_HIDE);//Скрыть
    ShowWindow(Application->Handle, SW_SHOW);//Показать

  5. Как сделать, чтобы программа на C++Builder не требовала .bpl, .dll

    Для начала надо зайти Project->Options затем: На вкладке Compiler нажать "Release", на вкладке Packages снять галку с "Build with runtime packages" и на вкладке Linker снять галку с "Use dynamic RTL"

     

  6. Как поменять ICON у моей программы

    Project->Options->Load Icon

     

  7. Как назначить программе другой приоритет

    // Напишите следющий код:
    HANDLE ProcessHandle, ThreadHandle;
    DWORD ProcessID = GetCurrentProcessId();
    ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
    SetPriorityClass(ProcessHandle,HIGH_PRIORITY_CLASS);
    ThreadHandle = GetCurrentThread();
    SetThreadPriority(ThreadHandle,THREAD_PRIORITY_TIME_CRITICAL);


 
« Предыдущая статья