http://topic.csdn.net/t/20040701/10/3136787.html
只是把所有的帖子整合在一起,并没有测试过
// 获得计算机名
AnsiString GetComputerName()
{
char name[MAX_COMPUTERNAME_LENGTH + 1];
DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
if(GetComputerName(name,&size))
return AnsiString(name);
return "";
}
// 获得当前用户名
AnsiString GetUserName()
{
char username[MAX_COMPUTERNAME_LENGTH + 1];
DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
if(GetUserName(username,&size))
return AnsiString(username);
return "";
}
//
Windows
文件夹
AnsiString GetWindowsDir()
{
String path;
path.SetLength(MAX_PATH);
path.SetLength(GetWindowsDirectory(path.c_str(),path.Length()));
return path;
}
// System 文件夹
AnsiString GetSystemDir()
{
String path;
path.SetLength(MAX_PATH);
path.SetLength(GetSystemDirectory(path.c_str(),path.Length()));
return path;
}
// Temp 文件夹
AnsiString GetTempDir()
{
String path;
path.SetLength(MAX_PATH);
path.SetLength(GetTempPath(MAX_PATH,path.c_str()));
return path;
}
// 当前文件夹
AnsiString GetCurrDir()
{
String path;
path.SetLength(MAX_PATH);
path.SetLength(GetCurrentDirectory(MAX_PATH,path.c_str()));
return path;
// return ExtractFilePath(Application->ExeName);
// return ExtractFilePath(ParamStr(0));
}
// 获得IE 版本
AnsiString GetIEVersion()
{
AnsiString strReturn;
LPCTSTR Data_Set = "SOFTWARE//Microsoft//Internet Explorer//";
HKEY hKEY;
long ret0 = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, // root key
Data_Set, //要访问的键的位置;
0, //必须为0;
KEY_READ, //以查询的方式访问注册表;
&hKEY); //hKEY保存此函数所打开的键的句柄。
if(ret0 != ERROR_SUCCESS)
return "Unavailable";
else
{
char ver[MAX_COMPUTERNAME_LENGTH + 1];
DWORD type = REG_SZ;
DWORD cbData = 40;
long ret1 = ::RegQueryValueEx(hKEY, //所打开的键的句柄
"Version", //要查询的键值名
NULL,
&type, //查询数据的类型
ver, //保存所查询的数据
&cbData); //预设置的数据长度
if(ret1 != ERROR_SUCCESS)
return "Unavailable";
else
strReturn = AnsiString(ver);
}
::RegCloseKey(hKEY);
return strReturn;
}
void Jpg2Bmp(String JpgFile, String BmpFile) //将Jpg文件转换为Bmp文件
{
TJPEGImage *MyJPEG = new TJPEGImage;
try
{
MyJPEG->LoadFromFile(JpgFile); //图片位置
Graphics::TBitmap *MyBMP = new Graphics::TBitmap;
MyBMP->Assign(MyJPEG);
MyBMP->SaveToFile(BmpFile); //保存路径
delete MyBMP;
}
__finally
{
delete MyJPEG;
}
}
void Bmp2Jpg(String BmpName, String JpgName) //将bmp文件转换为jpg文件
{
Graphics::TBitmap *MyBMP = new Graphics::TBitmap;
try
{
MyBMP->LoadFromFile(BmpName); //图片位置
TJPEGImage *MyJPEG = new TJPEGImage;
MyJPEG->Assign(MyBMP);
MyJPEG->CompressionQuality = 60; //压缩比例 1..100
MyJPEG->Compress();
MyJPEG->SaveToFile(JpgName); //保存路径
delete MyJPEG;
}
__finally
{
delete MyBMP;
}
}
// DirectX 版本
AnsiString GetDirectXVersion()
{
AnsiString strReturn;
LPCTSTR Data_Set = "SOFTWARE//Microsoft//DirectX//";
HKEY hKEY;
long ret0 = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, // root key
Data_Set, //要访问的键的位置;
0, //必须为0;
KEY_READ, //以查询的方式访问注册表;
&hKEY); //hKEY保存此函数所打开的键的句柄。
if(ret0 != ERROR_SUCCESS)
return "Unavailable";
else
{
char ver[MAX_COMPUTERNAME_LENGTH + 1];
DWORD type = REG_SZ;
DWORD cbData = 40;
long ret1 = ::RegQueryValueEx(hKEY, //所打开的键的句柄
"Version", //要查询的键值名
NULL,
&type, //查询数据的类型
ver, //保存所查询的数据
&cbData); //预设置的数据长度
if(ret1 != ERROR_SUCCESS)
return "Unavailable";
else
strReturn = AnsiString(ver);
}
::RegCloseKey(hKEY);
return strReturn;
}
// 开机后自动运行程序设置
#include <Registry.hpp>
void __fastcall AutoRunFromStart(bool Set,AnsiString Title, AnsiString ExeFile)
{
TRegistry *Reg;
Reg = new TRegistry();
Reg->RootKey = HKEY_LOCAL_MACHINE;
if(Set)
{
if(Reg->OpenKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run",false))
Reg->WriteString(Title,ExeFile);
delete Reg;
}
else
{
if(Reg->OpenKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run",false))
Reg->WriteString(Title,"; " + ExeFile);
}
delete Reg;
}
// 根据窗口句柄获得窗口的Caption
AnsiString GetWndCaption(HWND hWnd)
{
AnsiString strCaption;
if(hWnd)
{
int Length = (int)SendMessage(hWnd,WM_GETTEXTLENGTH,0,0);
if(Length)
{
char *buf = new char[Length+2];
buf[Length] = '/0';
buf[Length+1] = '/0';
SendMessage(hWnd,WM_GETTEXT,Length+1,(LPARAM)buf);
strCaption = AnsiString(buf);
delete buf;
}
}
return strCaption;
}
// 根据窗口句柄获得窗口的类名
AnsiString GetWndClassName(HWND hWnd)
{
char buffer[256];
GetClassName(hWnd,buffer,255);
return AnsiString(buffer);
}
// 窗口位于最上
void __fastcall SetStayOnTop(bool Set,void *Handle)
{
if(Set)
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
else
SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
}
// 是否显示在任务栏
void __fastcall ShowOnTaskbar(bool Set,void *Handle)
{
if(Set)
ShowWindow(Handle,SW_SHOW);
else
ShowWindow(Handle,SW_HIDE);
}
// 获得子网掩码
#include <Registry.hpp>
AnsiString GetSubnetMask()
{
AnsiString SubnetMask;
TRegistry *reg = new TRegistry;
DWORD Version = GetVersion();
if(Version < 0x80000000) //WindowsNT
{
reg->RootKey = HKEY_LOCAL_MACHINE;
if(reg->OpenKeyReadOnly("SYSTEM//CurrentControlSet//Services//Tcpip//Linkage"))
{
int BuffLength = reg->GetDataSize("Bind");
char *Buff = new char[BuffLength+1];
reg->ReadBinaryData("Bind",Buff,BuffLength);
AnsiString Interface = (AnsiString)Buff;
Interface = Interface.SubString(9,Interface.Length()-8);
delete [] Buff;
reg->CloseKey();
if(reg->OpenKeyReadOnly("SYSTEM//CurrentControlSet//Services//"+Interface+"//Parameters//Tcpip"))
{
BuffLength = reg->GetDataSize("SubnetMask");
Buff = new char[BuffLength+1];
reg->ReadBinaryData("SubnetMask",Buff,BuffLength);
SubnetMask = (AnsiString)Buff;
delete [] Buff;
}
}
}
else //Windows9X
{
int i;
reg->RootKey = HKEY_LOCAL_MACHINE;
TStringList *ent = new TStringList;
if(reg->OpenKeyReadOnly("System//CurrentControlSet//Services//Class//NetTrans"))
reg->GetKeyNames(ent);
reg->CloseKey();
for(i=0;i<ent->Count ;i++)
{
reg->CloseKey();
if(reg->OpenKeyReadOnly("System//CurrentControlSet//Services//Class//NetTrans//" +ent->Strings[i]))
{
AnsiString ip = reg->ReadString("IPAddress");
AnsiString node = reg->ReadString("NodeType");
if(ip != "0.0.0.0" && ip != "" && node == "1")
{
SubnetMask = reg->ReadString("IPMask");
if(SubnetMask != "" && SubnetMask != "0.0.0.0")
break;
}
}
}
delete ent;
}
delete reg;
return SubnetMask;
}
#include<winsock.h>
AnsiString GetLocalIP()
{
//Start up WinSock
WORD wVersionRequested = MAKEWORD(1,1);;
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData);
hostent *p;
char s[128];
char *p2;
gethostname(s,128);//获取指定计算机的名字
p = gethostbyname(s);
p2 = inet_ntoa(*((in_addr *)p->h_addr)); //获取指定计算机的IP地址
WSACleanup();
return p2;
}
// 打开、关闭光驱
#include "mmsystem.h"
void CDRomOpen(BOOL bOpenDrive,TCHAR cDrive)
{
MCI_OPEN_PARMS open;
MCI_STATUS_PARMS status;
DWORD flags;
TCHAR szDriveName[4];
strcpy(szDriveName,"?:");
::ZeroMemory(&open,sizeof(MCI_OPEN_PARMS));
open.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_CD_AUDIO;
szDriveName[0] = cDrive;
open.lpstrElementName = szDriveName;
flags = MCI_OPEN_TYPE + MCI_OPEN_TYPE_ID + MCI_OPEN_ELEMENT + MCI_OPEN_SHAREABLE;
if(!mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&open))
{
status.dwItem = MCI_STATUS_READY;
if(bOpenDrive)
mciSendCommand(open.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0);
else
mciSendCommand(open.wDeviceID,MCI_SET,MCI_SET_DOOR_CLOSED,0);
mciSendCommand(open.wDeviceID,MCI_CLOSE,MCI_WAIT,0);
}
}
---------------------
// 获得端口
#include <Registry.hpp>
void __fastcall GetPort(TStrings *List)
{
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("HARDWARE//DEVICEMAP//SERIALCOMM",true);
reg->GetValueNames(List);
List->BeginUpdate();
for(int i=0;i<List->Count;i++)
List->Strings[i] = reg->ReadString(List->Strings[i]);
List->EndUpdate();
delete reg;
}
// 判断操作系统
enum CWin32Type{wt3X, wtNT3, wt95, wt98, wtME, wtNT4, wt2000, wtXP, /*wtNS,*/ wtUnknown};
CWin32Type getWindowsVersion()
{
CWin32Type Result;
OSVERSIONINFO info;
info.dwOSVersionInfoSize = sizeof(info);
GetVersionEx(&info);
switch(info.dwPlatformId)
{
case VER_PLATFORM_WIN32s: Result = wt3X; break;
case VER_PLATFORM_WIN32_WINDOWS:
{
if(info.dwMajorVersion == 4)
{
if(info.dwMinorVersion == 0)
Result = wt95;
else if(info.dwMinorVersion == 10)
Result = wt98;
else if(info.dwMinorVersion == 90)
Result = wtME;
}
break;
}
case VER_PLATFORM_WIN32_NT:
{
if(info.dwMajorVersion == 3) // && info.dwMinorVersion == 51)
Result = wtNT3;
else if(info.dwMajorVersion == 4) // && info.dwMinorVersion == 0)
Result = wtNT4;
else if(info.dwMajorVersion == 5)
{
if(info.dwMinorVersion == 0)
Result = wt2000;
else if(info.dwMinorVersion == 1)
Result = wtXP;
/*else if(info.dwMinorVersion ==)
Result = wtNS;*/
}
break;
}
}
return Result;
}
// 结束一个进程
void __fastcall ProcessKill(int pPid)
{
HANDLE ps = OpenProcess(1,false,pPid);
if(ps && TerminateProcess(ps,-9))
{
MessageBox(Handle,"中止成功!","信息",MB_OK|MB_ICONINFORMATION);
}
else
{
MessageBox(Handle,"中止失败!","信息",MB_OK|MB_ICONWARNING);
}
}
String __fastcall TfrmTest::GetVersionInfo(String FileName)
{
/**************************************************************
函数名:GetVersionInfo
用途:返回指定文件的版本信息
**************************************************************/
FileName=ExtractFilePath(Application->ExeName)+FileName;
if(!FileExists(FileName))
{
//将要更新的文件不存在
return 0;
}
//首先获得版本信息资源的长度
DWORD dwHandle,InfoSize;
String strVer;
InfoSize = GetFileVersionInfoSize(FileName.c_str(),&dwHandle);
//将版本信息资源读入缓冲区
char *InfoBuf = new char[InfoSize];
GetFileVersionInfo(FileName.c_str(),0,InfoSize,InfoBuf);
//获得生成文件使用的代码页及字符集信息
char *pInfoVal;
unsigned int dwInfoValSize;
try
{
VerQueryValue(InfoBuf,"//VarFileInfo//Translation",&((void *)pInfoVal), &dwInfoValSize);
AnsiString V = "//StringFileInfo//" +IntToHex(*((unsigned short int *) pInfoVal),4) +IntToHex(*((unsigned short int *) &pInfoVal[2]),4)+ "//FileVersion";
//获得具体的版本号
VerQueryValue(InfoBuf, V.c_str(),&((void *)pInfoVal),&dwInfoValSize);
strVer=AnsiString(pInfoVal).SetLength(dwInfoValSize-1);
delete InfoBuf;
}
catch(...)
{
return 0;
}
if(strVer.Length()>10)
{
return 0;
}
String TmpStr;
//截取.
for (int i=1;i<=strVer.Length();i++)
{
if(strVer.SubString(i,1)!=".")
{
TmpStr=TmpStr+strVer.SubString(i,1);
}
else if((strVer.SubString(i,1)==".")&&(i==2))
{
TmpStr=TmpStr+strVer.SubString(i,1);
}
}
//截取,
if(strVer.Pos(",")!=0)
{
TmpStr="";
for (int i=1;i<=strVer.Length();i++)
{
if((strVer.SubString(i,1)!=",")&&(strVer.SubString(i,1)!=" "))
{
TmpStr=TmpStr+strVer.SubString(i,1);
}
else if((strVer.SubString(i,1)==",")&&(i==2))
{
TmpStr=TmpStr+".";
}
}
}
strVer=TmpStr;
return strVer;
}
//---------------------------------------------------------------------------
// 改变分辨率
void DynamicResolution(int x,int y,int c,int h)
{
DEVMODE CurMode;
CurMode.dmPelsWidth = x;
CurMode.dmPelsHeight = y;
CurMode.dmBitsPerPel = c;
CurMode.dmDisplayFrequency = h;
CurMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
if(ChangeDisplaySettings(&CurMode, CDS_UPDATEREGISTRY) == DISP_CHANGE_SUCCESSFUL)
MessageBox(Handle,"设置成功!","信息",MB_OK|MB_ICONINFORMATION);
else
MessageBox(Handle,"设置失败!","信息",MB_OK|MB_ICONINFORMATION);
}
// 显示信息,要返回其他类型的改改就可以了
String get1() // 获得分辨率
{
TDeviceMode lpDevMode;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&lpDevMode);
return String(lpDevMode.dmPelsWidth) + " x " + String(lpDevMode.dmPelsHeight));
}
String get2() // 刷新率
{
TDeviceMode lpDevMode;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&lpDevMode);
return String(lpDevMode.dmDisplayFrequency) + " Hz");
}
String get3() // 颜色
{
TDeviceMode lpDevMode;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&lpDevMode);
switch(lpDevMode.dmBitsPerPel)
{
case 2: return " 4 色 ";
case 4: return " 16 色 ";
case 8: return " 256 色";
case 16: return " 16 位增强色";
case 24: return " 24 位真彩色";
case 32: return " 32 位真彩色";
default: break;
}
}
//关闭应用程序
bool CloseApp(String ClassName)
{
HWND ExeHandle = FindWindow(ClassName.c_str(),0);
if(ExeHandle)
{
PostMessage(ExeHandle, WM_QUIT, 0, 0);
return true;
}
return false;
}
window 2000/XP 下窗口置前台!!!
void __fastcall SetForegroundWindowEx()
{
if(IsWindowVisible(Handle)==0)
Application->Restore();
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
POINT xy;
GetCursorPos(&xy);
ShowCursor(false);
static int clickThis;
if(clickThis==100)
clickThis=105;
else
clickThis=100;
SetCursorPos(Left+clickThis,Top+Height-ClientHeight-4);
mouse_event(MOUSEEVENTF_ABSOLUTE |MOUSEEVENTF_LEFTUP|MOUSEEVENTF_LEFTDOWN,0,0,0,0);
SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetCursorPos(xy.x,xy.y);
ShowCursor(true);
}
void SetEditCell(TStringGrid *sg,int x,int y)
{
//任一CELLS获得焦点,并可直接使用键盘输入
TGridRect myRect;
myRect.Left = x;
myRect.Top = y;
myRect.Right = x;
myRect.Bottom = y;
sg->Selection = myRect;
sg->Options<<goEditing;
SendMessage(sg->Handle,WM_LBUTTONDOWN,0,0);
}
//------------------------------------------------------------------------
void DeleteRow(TStringGrid *sg,int x) // 删除第x行(0...)
{
for (int y=0;y<sg->ColCount;y++)
{
TStringList *ss=new TStringList();
ss->AddStrings(sg->Cols[y]);
ss->Add("");
ss->Delete(x);
sg->Cols[y]=ss;
delete ss;
}
删除c:/temp/a/ 这个目录和其子目录
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SHFILEOPSTRUCT OpStruc;
{
OpStruc.hwnd = Handle;
OpStruc.wFunc = FO_DELETE; //FO_COPY, FO_MOVE, FO_DELETE,FO_RENAME
OpStruc.fFlags = FOF_NOCONFIRMATION;//设置自动确认,这样就可以不出现对话框了
char From[]="c://temp//a/0/0"; // 删除c:/temp/a/ 这个目录和其子目录
OpStruc.pFrom =From; //设置源文件或目录
OpStruc.pTo =NULL; //设置目标文件或目录这里是删除文件所以可以忽略
//另外还有其他,在这里可以不设
}
//执行函数
SHFileOperation(&OpStruc);
}
//---------------------------------------------------------------------------
int CopyFilesFun(String SourceDir,String DestDir)
{
TSHFileOpStruct *Dir;
String strTemp;
Dir = (TSHFileOpStruct*)malloc(sizeof(TSHFileOpStruct));
try
{
Dir->hwnd = Application->Handle;
Dir->wFunc = FO_COPY;
strTemp=SourceDir+"*.*"+'/0';
Dir->pFrom =strTemp.c_str();
Dir->pTo = DestDir.c_str();
Dir->fFlags = FOF_NOCONFIRMMKDIR+FOF_SILENT;
SHFileOperation(Dir);
}
catch(...){if(Dir!=NULL){free(Dir);}}
if(Dir!=NULL){free(Dir);}
return 0;
}
//---------------------------------------------------------------------------
int DeleteFileFun(String FileDir)
{
TSHFileOpStruct *Dir;
String strTemp;
Dir = (TSHFileOpStruct*)malloc(sizeof(TSHFileOpStruct));
try
{
Dir->hwnd = Application->Handle;
Dir->wFunc = FO_DELETE;
strTemp=FileDir+"*.*"+'/0';
Dir->pFrom =strTemp.c_str();
Dir->pTo = FileDir.c_str();
Dir->fFlags = FOF_NOCONFIRMMKDIR+FOF_SILENT+FOF_NOCONFIRMATION;
SHFileOperation(Dir);
}
catch(...){if(Dir!=NULL){free(Dir);}}
if(Dir!=NULL){free(Dir);}
return 0;
}
//---------------------------------------------------------------------------
关于AnsiSting的使用大全(1)
arrow:
Ansistring 转 char
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "哈哈";
char *chr = Test.c_str();
}
char转Ansistring
代码:
#include <windef.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString str = "Sample";
char chr[MAX_PATH];
strcpy( chr , str.c_str() );
}
ansistring转int
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "123";
int i = StrToInt( Test );
}
int转ansistring
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i = 123;
AnsiString str = IntToStr( i );
}
ansisting转double
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "123";
long double d = StrToFloat( Test );
}
double转ansistring
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double d = 123.456;
AnsiString str = FloatToStr( d );
}
double转ansistring并四舍五入
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
long double d = 123.456121212;
AnsiString str = FloatToStrF( d , ffFixed ,5 , 4 );
//说明FloatTostrF里5代表从第几个数字的后一位开始四舍五入,4代表取4位小数。
//执行后得到str是123.4600。:roll:
}
double转ansistring使用类似vb的format函数
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double d = 123.456;
AnsiString str = FormatFloat( "000000.00" , d );
}
//得到 000123.45,当然你可以使用"# . , ; E+ E- xx"等符号,你自己试试 :wink:
ansi转Tclor型(从现在开始AnsiSting简称ansi
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "0x00FF8080";
TColor Col = StringToColor( Test );
}
Tclor转ansi
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TColor Col = 0x00FF8080;
AnsiString str = ColorToString( Col );
}
ansi的一部分消除,哈哈,类似vb里的mid函数,不过是反的~
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
int First = 3; // 消除制定开头
int Length = 2; // 消除制定长度
AnsiString Dstr = Test.Delete( First , Length );
}//得到ABEF
ansi的一部分插入
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
AnsiString Ins = "12345"; // 插入串
int Pos = 3; // 在哪插
AnsiString Istr = Test.Insert( Ins , Pos );
//得到AB12345CDEF
}
取得ansi某一位字符
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
AnsiString Npos = Test[3];//得到C
}
取得ansi里最后一个字符
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
char *Lstr = Test.AnsiLastChar();//得到F
}
取出ansi字符,这才是vb的mid函数!
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
int First = 3; // 3开始取
int Length = 2; // 取2位
AnsiString Getstr = Test.SubString( First , Length );
//得到CD
}
ansi的字母 是否相同比较
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
AnsiString Sample = "abcdef";
int Result = Test.AnsiCompare( Sample );
返回1,不同!分大小写。
}
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
AnsiString Sample = "abcdef";
int Result = Test.AnsiCompareIC( Sample );
//返回0,相同!没有分大小写,哈哈
}
在ansi中寻找字符
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
AnsiString Sample = "E";
int Result = Test.Pos( Sample );
//返回5,如果你写Sample="haha",就返回0,找不到,哈哈
}
在ansi中找字符串,和上一个类似
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCDEF";
AnsiString Sample = "EF";
int Result = Test.Pos( Sample );
//返回5,即E字符的位置
}
判断字符串长度,类似vb的len
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "拿金币来";
int Len = Test.Length();
//返回8
}
取得字符串,类似vb的left
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "小苹果然看了这篇文章";
AnsiString SLstr = Test.SetLength(6);
}//得到“小苹果”
检测双字节字串
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString ChkStr = "你好";
int ChkPos = 1 ;
if ( ByteType( ChkStr , ChkPos ) == mbSingleByte ){
Edit1->Text="0";
}
else{
Edit1->Text="1";
}//返回1,如果你写ChkStr="fxxk",就返回0
}
检测空字符串
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "";
bool chk = Test.IsEmpty();
if (chk )
Edit1->Text="1";//返回1
}
全部便小写vs全部便大写
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCdef";
AnsiString Lstr = Test.LowerCase();
}
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = "ABCdef";
AnsiString Ustr = Test.UpperCase();
}
类似vb中Trim 的去空格函数
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = " ABCDEF ";
AnsiString TLstr = Test.TrimLeft();
AnsiString TRstr = Test.TrimRight();
AnsiString Tstr = Test.Trim();
}
但是,这个处理不了全角的空格 怎么办ni~
代码:
AnsiString __fastcall TForm1::TrimStr( AnsiString Tm , AnsiString LR )
{
// LR … L:左除去 R:右除去 B:dou除去
int len;
// 左除去
if ( LR == "L" || LR == "B" ){
len = Tm.Length();
while ( Tm.SubString(1,1) == " " || Tm.SubString(1,2) == " "){
// 半角除去
if ( Tm.SubString(1,1) == " " ){
Tm = Tm.SubString(2,len);
len = Tm.Length();
}
// 全角除去
else if ( Tm.SubString(1,2) == " " ){
Tm = Tm.SubString(3,len);
len = Tm.Length();
}
}
}
// 右除去
if ( LR == "R" || LR == "B" ){
len = Tm.Length();
while ( Tm.SubString(len,1) == " " || Tm.SubString(len-1,2) == " " ){
// 半角除去
if ( Tm.SubString(len,1) == " " ){
len = Tm.Length();
Tm = Tm.SubString(1,len-1);
len = Tm.Length();
}
// 全角除去
else if ( Tm.SubString(len-1,2) == " " ){
len = Tm.Length();
Tm = Tm.SubString(1,len-2);
len = Tm.Length();
}
}
}
return Tm;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Test = " 拳脚 ";
AnsiString Ret = TrimStr(Test,"B")
}
相同字符重复输入
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Soc = AnsiString::StringOfChar( '*' , 100 );
Edit1->Text=Soc ;//显示100个*
}
关于AnsiSting的使用大全(2)
字符串替换
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Str = "Borland C++ Builder is free";
AnsiString From = "C++ Builder";
AnsiString To = "Delphi";
AnsiString Result;
Result = StringReplace( Str, From, To, TReplaceFlags() <<
rfReplaceAll << rfIgnoreCase );
//<<后是参数,得到Borland Delphi is free
}
全角变半角
代码:
AnsiString Zen = "1234567890";
int Len = Zen.Length();
char buf[MAX_PATH];
ZeroMemory( buf, sizeof( buf ) );
LCMapString( GetUserDefaultLCID(), LCMAP_HALFWIDTH, Zen.c_str(), Len, buf, sizeof( buf ) );
AnsiString Han = AnsiString( buf );
Edit1->Text=Han;
半角变全角
代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Han = "1234567890";
int Len = Han.Length();
char buf[MAX_PATH];
ZeroMemory( buf, sizeof( buf ) );
LCMapString( GetUserDefaultLCID(), LCMAP_FULLWIDTH, Han.c_str(), Len, buf, sizeof( buf ) );
AnsiString Zen = AnsiString( buf );
}
设置日期格式为YYYY-MM-DD
DateSeparator = '-';
ShortDateFormat = "yyyy-mm-dd";
让控件随窗口尺寸更改而更改(by jishiping)
用 ScaleBy(int M, int D); 函数就可以了。例如窗口放大到125%: ScaleBy(125, 100);
{=========================================================================
功 能: 得到硬盘序列号
参 数:
返回值: 硬盘序列号
备 注: 此函数在95,98下要将system下的smartvsd.vxd先复制到Windows
的IOSUBSYS目录下,重新启动后才可以使用。===========================================================================}
function GetIdeDiskSerialNumber : String;
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array[0..7] of Char;
Timeout : ULONG;
ControlCode : ULONG;
ReturnCode : ULONG;
Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;
TIDERegs = packed record
bFeaturesReg : Byte; // Used for specifying SMART "commands".
bSectorCountReg : Byte; // IDE sector count register
bSectorNumberReg : Byte; // IDE sector number register
bCylLowReg : Byte; // IDE low order cylinder value
bCylHighReg : Byte; // IDE high order cylinder value
bDriveHeadReg : Byte; // IDE drive/head register
bCommandReg : Byte; // Actual IDE command.
bReserved : Byte; // reserved. Must be zero.
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;
TSendCmdInParams = packed record
cBufferSize : DWORD;
irDriveRegs : TIDERegs;
bDriveNumber : Byte;
bReserved : Array[0..2] of Byte;
dwReserved : Array[0..3] of DWORD;
bBuffer : Array[0..0] of Byte;
end;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;
TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[0..2] of Word;
sSerialNumber : Array[0..19] of Char;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[0..7] of Char;
sModelNumber : Array[0..39] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : ULONG;
wMultSectorStuff : Word;
ulTotalAddressableSectors : ULONG;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of Byte;
end;
PIdSector = ^TIdSector;
const
IDE_ID_FUNCTION = $EC;
IDENTIFY_BUFFER_SIZE = 512;
DFP_RECEIVE_DRIVE_DATA = $0007c088;
IOCTL_SCSI_MINIPORT = $0004d008;
IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
hDevice : THandle;
cbBytesReturned : DWORD;
pInData : PSendCmdInParams;
pOutData : Pointer; // PSendCmdOutParams
Buffer : Array[0..BufferSize-1] of Byte;
srbControl : TSrbIoControl absolute Buffer;
procedure ChangeByteOrder( var Data; Size : Integer );
var ptr : PChar;
i : Integer;
c : Char;
begin
ptr := @Data;
for i := 0 to (Size shr 1)-1 do
begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2);
end;
end;
begin
Result := '';
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000
// Get SCSI port handle
hDevice := CreateFile( '//./Scsi0:',
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move('SCSIDISK',srbControl.Signature,8);
srbControl.Timeout := 2;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer)
+SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,
@Buffer, BufferSize, @Buffer, BufferSize,
cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end
else
begin // Windows 95 OSR2, Windows 98
hDevice := CreateFile( '//./SMARTVSD', 0, 0, nil,
CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := @pInData^.bBuffer;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,
pInData, SizeOf(TSendCmdInParams)-1, pOutData,
W9xBufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+16)^ do
begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
end;
end;
//获取某主机的IP地址,如果主机名为空,则返回本机的名和IP地址---------
AnsiString TForm1::gethostip(AnsiString & host)
{
WSADATA wsaData;
AnsiString IP;
WSAStartup(MAKEWORD(2,0),&wsaData);
if(host.IsEmpty())
{
char hostname[128];
if(gethostname(hostname,128)!=0) return AnsiString("");
host=hostname;
}
try
{
struct hostent *hp=gethostbyname(host.c_str());
if(WSAGetLastError()==WSAHOST_NOT_FOUND)
{
IP="";
return IP;
}
else
IP=inet_ntoa(*(struct in_addr*)hp->h_addr_list[0]);
}
catch(...)
{
IP="";
}
WSACleanup();
return IP;
}
//用中文解释GetLastError返回的错误代码:
#include <stdio.h>
inline void __fastcall GetError(long iErr)
{
LPVOID lpMsgBuf;
int Result;
char* cMsg;
if(iErr==-1)
{
iErr = GetLastError();
}
Result = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM|
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
iErr, //此处iErr参数可以换成GetLastError()。
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //使用默认语言。
(LPTSTR)&lpMsgBuf,
0,
NULL);
if(!Result) return;
//错误的内容放在lpMsgBuf中,这是一个void*指针。要用(char*)强制转换后才能显示。
Result = strlen((char*)lpMsgBuf);
cMsg = new char[Result+50]; //更新缓冲区的大小。
sprintf(cMsg, "Error Code: %d /r/n", iErr);
strcat(cMsg, (char*)lpMsgBuf);
MessageBox( NULL, cMsg, "Error", MB_OK | MB_ICONINFORMATION );
//Edit1 -> Text = cMsg;
//MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
//Edit1 -> Text = (char*)lpMsgBuf;
delete[] cMsg;
LocalFree( lpMsgBuf ); //清空缓冲区。
}
Unicode和ANSI字符串的转换
前面两个是输入字符串和它的长度(用 strlen/wcslen 获得),
后面两个是输出字符串,和它的缓冲区大小。
返回值是成功转换的字符个数。
如果输出字符串的缓冲区大小为 0,则返回需要的输出字符串缓冲区大小。
如果返回值是0,则表示出错(很可能是输出字符串缓冲区太小),
可以用 GetLastError() 获得进一步错误信息。
#include <winnls.h> //如果需要的话
//---------------------------------------------------------------------------
inline int Unicode2Ansi(wchar_t* wStr, int wcs, char* cStr, int mbs)
{
if(mbs == 0) wcs = -1;
int i = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, wStr, wcs, cStr, mbs, NULL, NULL);
if(mbs != 0) cStr[i] = 0x00;
return i;
}
//---------------------------------------------------------------------------
inline int Ansi2Unicode(char* cStr, int mbs, wchar_t* wStr, int wcs)
{
if(wcs == 0) mbs = -1;
int i = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, cStr, mbs, wStr, wcs);
if(wcs != 0) wStr[i] = 0x0000;
return i;
}
//---------------------------------------------------------------------------
//获得所有的用户名、所有的以登录用户名、所有的组名。
void __fastcall GetAllUserName(TObject *Sender)
{
LPUSER_INFO_0 pBuf = NULL;
LPUSER_INFO_0 pTmpBuf;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
NET_API_STATUS nStatus;
do
{
//获得所有的用户名
nStatus = NetUserEnum(NULL, 0, FILTER_NORMAL_ACCOUNT,
(LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH,
&dwEntriesRead, &dwTotalEntries, NULL);
/*//获得所有的组名
nStatus = NetLocalGroupEnum(NULL, 0, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH,
&dwEntriesRead, &dwTotalEntries, NULL);
*/
/* //获得所有的已登录的用户名
nStatus = NetWkstaUserEnum(NULL, 0, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH,
&dwEntriesRead, &dwTotalEntries, NULL);
*/
if((nStatus==NERR_Success)||(nStatus==ERROR_MORE_DATA))
{
if(pBuf != NULL)
{
pTmpBuf = pBuf;
for(int i=0; i<dwEntriesRead; i++)
{
ListBox1 -> Items -> Add(pTmpBuf->usri0_name);//pTmpBuf->usri0_name就是用户名。
pTmpBuf++;
}
}
}
if(pBuf != NULL)
{
NetApiBufferFree(pBuf);
pBuf = NULL;
}
}while(nStatus == ERROR_MORE_DATA);
if(pBuf != NULL)
{
NetApiBufferFree(pBuf);
}
}