BCB 避免程式重複執行
讀寫 ini 檔案






07年九月才開始接觸這個領域,也不太懂。所有程式的概念都是從上學期的 php 學來的。對於 c/c++ 的基本卻是一點都不知道。才會在 coding 的時候出現許多讓人茫然的問題,像是記憶體配置、指標等更是全無概念,對於從沒用過的變數型態更是不知道該怎麼去搞定。變數間的轉換就有一大堆問題.. 所以筆記應該是不可或缺的。



BCB

AnsiString to char *;
AnsiString str;
char * c = str.c_str();


char * to AnsiString
StrPas(unsigned char);

WINAPI
//BOOL CopyFile( IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists);
//ex
char * TP_FN = "C:\\Temp\\tmp";
CopyFile(TP_FN,SaveDialog1->FileName.c_str(),1);

//DWORD GetEnvironmentVariable( IN LPCSTR lpName, OUT LPSTR lpBuffer, IN DWORD nSize);
//ex
int len=256;
char szBuf[len];
GetEnvironmentVariable("PATH", szBuf, len);


在 C++ ,取得系統環境變數的方法除了winapi之外
stdlib.h 中 定義了
char * _RTLENTRY _EXPFUNC getenv(const char * __name);
//ex
char * s;
s = getenv("path");


其他 windows 的環境變數
%ALLUSERSPROFILE% %APPDATA% %COMPUTERNAME% %COMSPEC% %HOMEDRIVE% %HOMEPATH% %PATH% %PATHEXT% %PROGRAMFILES% %PROMPT% %SYSTEMDRIVE% %SYSTEMROOT% %TEMP% and %TMP% %USERNAME% %USERPROFILE% %WINDIR%

在 regedit 裡面可以看到這些設定
HKEY_CURRENT_USER\Environment
HKEY_CURRENT_USER\Volatile Environment
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment



BCB 避免程式重複執行

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE Mutex; //避免程式重複執行之處理
const char ProgramName[] = "ProgramName"; //應用程式名稱
try
{
Mutex = CreateMutex(NULL, true, ProgramName); //設定互斥旗標
if(GetLastError() == ERROR_ALREADY_EXISTS) //系統中已開啟過就不再啟動本程式
{
ReleaseMutex(Mutex);
return 0;
}
Application->Initialize();
Application->HelpFile = "";
Application->CreateForm(__classid(TFormMain), &FormMain);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
ReleaseMutex(Mutex); // 釋放資源
return 0;
}






BCB 讀寫 ini 檔案

#include <IniFiles.hpp>
AnsiString FileName="C:\\s.ini";
TIniFile *ini = new TIniFile(FileName);
Ini->WriteInteger("Int","SR",2);
Ini->WriteString("String","name","Ini");


寫入後的ini內容

[Int]
SR = 2

[String]
name = Ini

讀取
Int i; String s;
i = Ini->ReadInteger("Int","SR",0); //找不到就寫入0(預設值)
s= Ini->ReadString("String","name",NULL);


記錄一些設定還滿好用的感覺

Posted by kjyang at 痞客邦 PIXNET Comments(0) Trackback(0) Hits(715)