// 获得子网掩码
#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);
}
}
// 得到鼠标指针的位置
POINT CurPos;
GetCursorPos(&CurPos);
// 获得端口
#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, 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;
}
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)
{
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;
}
这些都好像在www.chinabcb.com中的吧!
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);
}
]]>
// 显示Windows的关于对话框
void About()
{
ShellAbout(Application->Handle, Application->MainForm->Caption.c_str(),"",Application->Icon->Handle);
}
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;
}
这是别人写的,没测试过
//复制整个目录
void Copy_dir(AnsiString Source, AnsiString Target)
{
SHFILEOPSTRUCT OpStruc;
{
OpStruc.hwnd = Handle;
OpStruc.wFunc = FO_COPY; //FO_COPY, FO_MOVE, FO_DELETE
OpStruc.fFlags = FOF_SIMPLEPROGRESS;
OpStruc.pFrom = Source.c_str();
OpStruc.pTo = Target.c_str();
OpStruc.lpszProgressTitle = "正在复制文件……";
}
SHFileOperation(&OpStruc);
}
收藏!
顶!!!
删除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;
}
//获取某主机的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;
}