澳门新萄京:线程-delphi断点无效,自动跳过代码

澳门新萄京:线程-delphi断点无效,自动跳过代码

澳门新萄京 1

delphi断点无效,自动跳过代码
//定义

//十六进制(S)–>>十进制(I)  [重写:Jey]
function hextoint(s: string): Integer; 
begin           //$代表16进制
  Result:=StrToInt(‘$’+s);
end;

此短信平台,帮忙法兰西共和国wavecom短信猫.有VB及DELPHI示例程序

type
PlayerInfo = record //客户端信息
ID: pchar;
GameHwnd: int64; //游戏句柄
ClientHwnd: int64; //dll的窗体句柄
Account: pchar; //账号
PassWord: pchar; //密码
RealmName_1: pchar; //服务器
RealmName_2: pchar;
playername:pchar;
Team:pchar;//队伍
Task:pchar;//功能
CmdCode:pchar;
Gamepath:pchar;
end;
pplayerinfo = ^playerinfo;

//十进制调换为二进制字符串  [重写:Jey]
function inttoBin(i: integer): string;
begin
 while i <>0 do
 begin              //i mod 2取模,再使用format格式化
   result:=Format(‘%d’+result,[i mod 2]);
   i:=i div 2
 end
end;
//二进制(S)–>>十进制(D)    [重写:Jey]
uses Math;
function hextoint(s: string): Double;
begin
  while Length(s) <>0 do
  begin              //2^(长度-1)次方
    if s[1]=’1′ then  Result:=Result+power(2,Length(s)-1);
    s:=Copy(s,2,Length(s));
  end
end;
//十进制(I)–>>十六进制(S)
//D自带函数,Digits长度,一般设4.
function IntToHex(Value: Integer; Digits: Integer): string;

 

var
pplayer: PlayerInfo; {那几个将会已指针的法子传递给线程, 它应该是全局的}
T_Event: 卡德inal = 0; //事件内核

//数据(S)–>>二进制(S)
//任何数据都以以二进制格局储存的! (转)
function conertde(s:string):string;
var
 i:integer;
begin
 for i:=1 to length(s) do
   result:=result+inttohex(ord(s[i]),2);
end; 

荒唐表达
0 成功
-1 连接短信平台倒闭
-2 命令施行倒闭
-3 无可读短信

function LoginGame(ptr: pointer): boolean; stdcall;
//登陆务观戏的线程
var

一、WSAStartup函数
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
使
用Socket的先后在利用Socket在此之前务必调用WSAStartup函数。该函数的第一个参数指明程序伏乞使用的Socket版本,在那之中高位字节指
明副版本、低位字节指明主版本;操作系统利用第三个参数再次来到央求的Socket的版本音信。当叁个应用程序调用WSAStartup函数时,操作系统依据乞求的Socket版本来寻找相应的Socket库,然后绑定找到的Socket库到该应用程序中。现在应用程序就足以调用所乞求的Socket库中的别的Socket函数了。该函数试行成功后再次回到0。
例:假若四个主次要采用2.1版本的Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );

function ConnectToServer(aServerName, aLogID, aPass: pchar): integer;
stdcall;
函数说明:
连年平台的后台数据库
参数表达:
aServerName 平台的后台数据库所在的服务器名称
aLogID 登入数据库服务器所需的用户名
aPass 登录数据库服务器所需的密码

i, c: Integer;
num: integer; //ID
hmodule: thandle;

二、WSACleanup函数
int WSACleanup (void);
应用程序在做到对乞求的Socket库的应用后,要调用WSACleanup函数来扫除与Socket库的绑定并且释放Socket库所攻克的系统财富。

function DisConnectToServer: integer; stdcall;
函数表达:
断开平台的后台数据库连接

installkeyProc: function(hwindow: hwnd): boolean;
gamehprocess, module: Cardinal;

三、socket函数
SOCKET socket(
int af,
int type,
int protocol
);

用程序调用socket函数来创立一个可知进行网络通讯的套接字。第二个参数内定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置
PF_INET;第一个参数钦命要创设的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第多个参数内定应
用程序所运用的通讯协议。该函数假若调用成功就回到新创制的套接字的描述符,假使败北就重返INVALID_SOCKET。套接字描述符是贰个整数品类的
值。每一个进程的历程空间里都有贰个套接字描述符表,该表中寄存着套接字描述符和套接字数据结构的附和关系。该表中有二个字段贮存新创造的套接字的描述符,
另贰个字段寄存套接字数据结构的地址,由此依靠套接字描述符就足以找到其相应的套接字数据结构。每种进度在温馨的长河空间里都有贰个套接字描述符表不过套
接字数据结构都是在操作系统的基础缓冲里。下边是一个创立流套接字的例证:
struct protoent *ppe;
ppe=getprotobyname(“tcp”);
SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);

function CreateIniDb: integer; stdcall;
函数表达:
开头化平台的后台数据库脚本

gameh, childhwnd, filehwnd: int64;
TextFile: TStringList;
filepath: string;
Curp: PlayerInfo; {因为指针参数给的点每23日都在变,
需用线程的一部分变量存起来}
//临时变量
ID: pchar;
GameHwnd: int64; //游戏句柄
ClientHwnd: int64; //dll的窗体句柄
Account: pchar; //账号
PassWord: pchar; //密码
RealmName_1: pchar; //服务器
RealmName_2: pchar;
playername:pchar;
Team:pchar;//队伍
Task:pchar;//功能
CmdCode:pchar;
Gamepath:pchar;
begin
EnterCriticalSection; //步入临界区
try
result := False;
Curp := pPlayerInfo^;

四、closesocket函数
int closesocket(
SOCKET s
);
closesocket
函数用来关闭一个描述符为s套接字。由于种种进程中都有二个套接字描述符表,表中的各种套接字描述符都对应了二个坐落操作系统缓冲区中的套接字数据结构,
因而有很大恐怕有多少个套接字描述符指向同一个套接字数据结构。套接字数据结构中极其有三个字段寄存该组织的被引述次数,即有多少个套接字描述符指向该组织。当
调用closesocket函数时,操作系统先反省套接字数据结构中的该字段的值,假诺为1,就注脚唯有多少个套接字描述符指向它,因而操作系统就先把s在
套接字描述符表中对应的那条表项清除,並且释放s对应的套接字数据结构;假设该字段大于1,那么操作系统仅仅清除s在套接字描述符表中的对应表项,并且把
s对应的套接字数据结构的援引次数减1。
closesocket函数借使实践成功就再次来到0,不然再次来到SOCKET_ERROR。

function SendASms(aPhone, aContent, aremark: pchar): integer; stdcall;
函数表明:
写短信到平台的后台数据库
参数表达:
aPhone 接收短信的人
aContent 短信的内容
aremark 备注

//这里开始往下断点无效,会自动跳过
ID:=Curp.ID;
//那几个createthread传递步入的结构体,参数多了,传递的值会出错
ClientHwnd:=Curp.ClientHwnd;
Account:=Curp.Account;
PassWord:=Curp.PassWord;
RealmName_1:=Curp.RealmName_1;
RealmName_2:=Curp.RealmName_2;
playername:=Curp.playername;
Team:=Curp.Team;
task:=Curp.Task;
//直到这里能够下断点,中间这一块全体跳过
cmdcode:=Curp.CmdCode;
Gamepath:=Curp.Gamepath;
SetEvent; //设置触发
filepath := Gamepath + ‘\data\config.ini’;
if FileExists then
begin
//假若文件存在,则进行改造和丰裕
TextFile := TStringList.Create;
TextFile.LoadFromFile;
for I := 0 to TextFile.Count – 1 do
begin
if Pos(‘SaveAccount’, TextFile[i]) > 0 then
begin
TextFile.Delete;
TextFile.Insert(i, ‘SaveAccount = ‘ + ‘0’);
end;
end;
TextFile.SaveToFile;
if TextFile <> nil then
begin
TextFile.Free;
TextFile := nil;
end;
end;
//参数一:进度路线
//参数二:命令行
//参数八:子进度职业路线
if createprocess(pchar(gamepath+’\asktao.mod’),
pChar(‘des:’+CmdCode),
nil, nil, False,
0,
nil, gamepath, StartupInfo, ProcessInfo) then
begin
gameh := GetHwndFromProcess(ProcessInfo.dwProcessId);
for c := 0 to 60 do
begin
if gameh = 0 then
begin
Sleep;
gameh := GetHwndFromProcess(ProcessInfo.dwProcessId);
end
else
break;
end;
end;
if gameh > 0 then
begin
if KeyHook then
FormMain.Memo1.Lines.Add(‘dll安装成功’);
//安装到位后,客户端窗体会制造一个DLL窗体,类名叫Tform1
//遍历全数进度,跟进度ID一样,並且窗体类名称为Tform1
//则代表dll窗体伊始化成功,能够发送Data告诉她去登录
for c := 0 to 30 do
begin
childhwnd := GetChildwindows(ProcessInfo.dwProcessId);
if childhwnd > 0 then
begin
Break;
end
else
Sleep;
end;
//成功创办窗口,能够初叶发送数据,并让他起来自行登录
//假诺child窗口为0,则表示登录退步,或许creatprocess起先是循环
//退步了再次再开叁个窗口,记得关闭那一个窗口

五、send函数
int send(
SOCKET s,
const char FAR *buf,
int len,
int flags
);

论是客户依然服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送央求,而服务器则平常用send函
数来向客户程序发送应答。该函数的首先个参数钦点发送端套接字描述符;第贰个参数指多美滋(Dumex)个贮存应用程序要发送数据的缓冲区;第多少个参数指明实际要发送的数
据的字节数;第五个参数一般置0。这里只描述同步Socket的send函数的实践流程。当调用该函数时,send先相比待发送数据的长短len和套接字
s的发送缓冲区的长度,如若len大于s的发送缓冲区的尺寸,该函数重回SOCKET_ELX570RORAV4;要是len小于也许等于s的发送缓冲区的尺寸,那么
send先反省协议是还是不是正在发送s的发送缓冲中的数据,固然是就等候协议把数量发送完,如果协商还尚无起来发送s的出殡和埋葬缓冲中的数据依旧s的发送缓冲中没有数据,那么send就相比s的发送缓冲区的剩余空间和len,假诺len大于剩余空间大小send就径直等候协议把s的发送缓冲中的数据发送完,就算len小于剩余空间大小send就独自把buf中的数据copy到剩余空间里(注意并不是send把s的发送缓冲中的数据传到连接的另一端的,而是协议传
的,send仅仅是把buf中的数据copy到s的发送缓冲区的剩下空间里)。如果send函数copy数据成功,就回去实际copy的字节数,借使send在copy数据时出现谬误,那么send就赶回SOCKET_E库罗德RO奥德赛;假诺send在等候协议传送数据时互联网断开的话,那么send函数也返回SOCKET_EEvoqueRO奥迪Q7。要留神send函数把buf中的数据成功copy到s的发送缓冲的剩余空间里后它就赶回了,可是此时那个多少并不一定马上被
传到连年的另一端。若是协商在一连的传递进程中冒出网络错误的话,那么下八个Socket函数就能够再次回到SOCKET_ETiguanROWrangler。(每贰个除send外的
Socket函数在施行的最伊始总要先等待套接字的发送缓冲中的数据被协议传送实现手艺继续,假诺在等候时出现网络错误,那么该Socket函数就回来
SOCKET_ERROR)
在意:在Unix系统下,若是send在守候协议传送数据时网络断开的话,调用send的经过会吸收接纳到一个SIGPIPE复信号,进程对该复信号的默许处理是进程终止。

function ReadASms(var aPhone, aContent, aSendDateTime: pchar): integer;
stdcall;
函数表达:
从平台的后台数据库中读取一条未读短信
参数表明:
aPhone 发送短信的人
aContent 短信的剧情
aSendDate提姆e 短信发送的时刻

end;result := True;Isloading := false;LeaveCriticalSection; //离开临界区ExitThread;

六、recv函数
int recv(
SOCKET s,
char FAR *buf,
int len,
int flags
);

论是客户照旧服务器应用程序都用recv函数从TCP连接的另一端接收数据。该函数的第2个参数钦赐接收端套接字描述符;第四个参数指美赞臣个缓冲区,该缓
冲区用来存放在recv函数接收到的数目;第多个参数指明buf的长短;第多少个参数一般置0。这里只描述同步Socket的recv函数的实施流程。当使用
程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完成,假设协商在传送s的出殡缓冲中的数据时出现网络错误,那么recv函数重返SOCKET_E昂科威RO本田CR-V,假使s的发送缓冲中并未有数量大概数额被协议成功发送达成后,recv先检查套接字s的接收缓冲区,假如s接收缓冲区中绝非数据
只怕协议正在接收数据,那么recv就直接等待,只到和谐把数量接收达成。当协议把数据接受完成,recv函数就把s的接收缓冲中的数据copy到buf
中(注意协议接收到的多少可能大于buf的长短,所以在这种情景下要调用几遍recv函数能力把s的收纳缓冲中的数据copy完。recv函数仅仅是
copy数据,真正的接收数据是研商来成功的),recv函数重返其实际copy的字节数。假使recv在copy时出错,那么它回到
SOCKET_E途乐RO兰德Wrangler;要是recv函数在守候协议接收数据时互联网中断了,那么它重回0。
小心:在Unix系统下,假若recv函数在等候协议接收数据时网络断开了,那么调用recv的历程会收到到叁个SIGPIPE功率信号,过程对该功率信号的私下认可管理是进度终止。

function GetSmsParams(var SendSmsCnt, HaveNotSendCnt, ReciveSmsCnt,
HaveNotReadSmsCnt: integer): integer; stdcall;
函数表达:
获得平台的连锁参数
参数表达:
SendSmsCnt 发件箱的总短信数
HaveNotSendCnt 未发的短信数量
ReciveSmsCnt 收件箱中已选择短信的数目
HaveNotReadSmsCnt 未读短信的数额

except
result := false;
ExitThread;
end;

七、bind函数
int bind(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);

创制了贰个Socket以往,套接字数据结构中有一个私下认可的IP地址和暗中认可的端口号。一个服务程序必须调用bind函数来给其绑定一个IP地址和一个特定
的端口号。客户程序一般不要调用bind函数来为其Socket绑定IP地址和断口号。该函数的第三个参数钦定待绑定的Socket描述符;第三个参数钦赐八个sockaddr结构,该社团是这样定义的:
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
sa_family钦点地址族,对于TCP/IP协议族的套接字,给其置AF_INET。当对TCP/IP协议族的套接字实行绑定期,我们平时选择另一个地址结构:
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

中sin_family置AF_INET;sin_port指明端口号;sin_addr结构体中唯有叁个独一的字段s_addr,表示IP地址,该字段
是二个板寸,一般用函数inet_addr()把字符串格局的IP地址转换来unsigned
long型的整数值后再置给s_addr。有的服务器是多宿主机,至少有多少个网卡,那么运转在如此的服务器上的服务程序在为其Socket绑定IP地址时
能够把htonl(INADDLAND_ANY)置给s_addr,那样做的补益是无论哪个网段上的客户程序都能与该服务程序通讯;要是只给运转在多宿主机上的
服务程序的Socket绑定八个稳住的IP地址,那么就唯有与该IP地址处于同三个网段上的客户程序能力与该服务程序通讯。大家用0来填充
sin_zero数组,目标是让sockaddr_in结构的轻重与sockaddr结构的轻重同等。下边是三个bind函数调用的事例:
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8888);
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(ListenSocket,(struct sockaddr *)&saddr,sizeof(saddr));

 

end;

八、listen函数
int listen( SOCKET s, int backlog );
服务程序能够调用listen函数使其流套接字s处于监听状态。处于监听状态的流套接字s将维护八个客户连接央求队列,该队列最多容纳backlog个客户连接央浼。假如该函数实行成功,则再次来到0;假设奉行倒闭,则赶回SOCKET_ERROR。

procedure TFormMain.Button1Click(Sender: TObject);
var
i: integer;
num: integer;
UserIni: TIniFile;
list: tstringlist;
filepath: string;
sr: TSearchRec;
Section, Key: string; { 分别表示 ini 文件的小节与重大字 }
begin
filepath := ExtractFilePath(Application.ExeName);
filepath := filepath + ‘\区组音讯.ini’;
if not fileExists then
begin
MessageBox(Handle, ‘服务器列表文件遗失’, ‘错误新闻’, 0);
Exit;
end;
for i := 0 to FormMain.listview1.Items.Count – 1 do
begin
if FormMain.ListView1.Items[i].Checked = True then
begin
num := StrToInt(FormMain.ListView1.Items[i].Caption);
pplayer.ID := pchar(inttostr;
pplayer.GameHwnd := 0;
pplayer.ClientHwnd := self.Handle;
pplayer.Account := pchar(FormMain.ListView1.Items[i].SubItems[0]);
pplayer.PassWord :=
pchar(FormMain.ListView1.Items[i].SubItems[1]);
pplayer.RealmName_1 :=
pchar(FormMain.ListView1.Items[i].SubItems[2]);
pplayer.RealmName_2 :=
pchar(FormMain.ListView1.Items[i].SubItems[3]);
pplayer.playername :=
pchar(FormMain.ListView1.Items[i].SubItems[4]);
pplayer.Team:= pchar(FormMain.ListView1.Items[i].SubItems[5]);
pplayer.task:= pchar(FormMain.ListView1.Items[i].SubItems[9]);
pplayer.Gamepath:=pchar(formmain.Edit游戏路线.text);
//依据服务器列表设置
UserIni := TIniFile.Create;
// 剖断文件大小
if FindFirst(filepath, faAnyFile, sr) = 0 then
begin
if sr.size > 0 then
begin
// 假若文件不为空
section:=’DES’;
key:=pplayer.RealmName_1;
pplayer.CmdCode:=pchar(userini.ReadString(section,key,”));

九、accept函数
SOCKET accept(
SOCKET s,
struct sockaddr FAR *addr,
int FAR *addrlen
);

务程序调用accept函数从处于监听状态的流套接字s的客户连接诉求队列中抽取排在最前的八个客户央求,而且创办三个新的套接字来与客户套接字创制连接
通道,假若总是成功,就赶回新创立的套接字的描述符,未来与客户套接字沟通数据的是新创建的套接字;要是失败就再次来到INVALID_SOCKET。该函数
的第一个参数内定处于监听状态的流套接字;操作系统利用第一个参数来回到连接客户的地址结构;操作系统利用第多少个参数来回到地址结构addr的长短。上面是叁个调用accept的事例:
struct sockaddr_in ServerSocketAddr;
int addrlen;
addrlen=sizeof(ServerSocketAddr);
ServerSocket=accept(ListenSocket,(struct sockaddr
*)&ServerSocketAddr,&addrlen);

 end else begin MessageBox(Handle, '服务器列表文件丢失', '错误信息', 0); FindClose; if UserIni <> nil then begin UserIni.Free; UserIni := nil; end; Exit; end; end; //关闭由FindFirstFile函数创建的一个搜索句柄 FindClose; if UserIni <> nil then begin UserIni.Free; UserIni := nil; end; hthread := createthread(nil, 0, @LoginGame, @pplayer, 0, threadid); if WaitForSingleObject(T_Event, INFINITE) = WAIT_OBJECT_0 then ResetEvent; //设置为未触发 CloseHandle; end;end;

十、connect函数
int connect(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);
客户程序调用connect函数来使客户Socket
s与监听于name所钦点的管理器的一定端口上的劳动Socket实行一而再。若是连接成功,connect重临0;假设战败则赶回SOCKET_E宝马X3ROENCORE。下边是二个例子:
struct sockaddr_in daddr;
memset((void *)&daddr,0,sizeof(daddr));
daddr.sin_family=AF_INET;
daddr.sin_port=htons(8888);
daddr.sin_addr.s_addr=inet_addr(“133.197.22.4”);
connect(ClientSocket,(struct sockaddr *)&daddr,sizeof(daddr));

end;

MessageBox对话框是比较常用的三个信息对话框,其不仅可以够定义呈现的音讯内容、音讯提醒Logo,并且能够定义按键组合及对话框的标题,是贰个功效齐全的音信对话框音讯提醒Logo,而且能够定义按键组合及对话框的标题,是二个成效齐全的音信对框。
 1、函数原型及参数
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word):
Integer;
 hWnd:对话框父窗口句柄,对话框展现在Delphi窗体内,可选用窗体的Handle属性,不然可用0,使其向来作为桌面窗口的子窗口。
 Text:欲显示的音信字符串。
 Caption:对话框标题字符串。
 Type:对话框类型常量。
 该函数的重返值为整数,用于对话框开关的甄别。
 2、类型常量
 对话框的系列常量可由开关组合、缺省开关、呈现Logo、运转格局八种常量组合而成。
 (1)按键组合常量
 MB_OK = $00000000;         //三个分明开关
 MB_OKCANCEL = $00000001;      //三个明确按键,八个收回按键
 MB_ABORTRET途观YIGNORE =
$00000002;  //贰个不胜终止按键,二个重试开关,一个忽略按键
 MB_YESNOCANCEL = $00000003;    
//一个是按键,贰个否按钮,三个撤除按键
 MB_YESNO = $00000004;        //贰个是按键,一个否按键
 MB_RET奇骏YCANCEL = $00000005;     //二个重试按键,三个撤消开关
 (2)缺省按钮常量
 MB_DEFBUTTON1 = $00000000;     //第一个按键为缺省按键
 MB_DEFBUTTON2 = $00000100;     //第二个开关为缺省按键
 MB_DEFBUTTON3 = $00000200;     //第四个按键为缺省开关
 MB_DEFBUTTON4 = $00000300;     //首个按键为缺省按钮
 (3)Logo常量
 MB_ICONHAND = $00000010;        //“×”号图标
 MB_ICONQUESTION = $00000020;      //“?”号图标
 MB_ICONEXCLAMATION = $00000030;    //“!”号图标
 MB_ICONASTERISK = $00000040;      //“i”图标
 MB_USEKugaICON = $00000080;        //用户Logo
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
 MB_ICONERROR = MB_ICONHAND;      //“×”号图标
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
 MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
 (4)运营方式常量
 MB_APPLMODAL =
$00000000;    //应用程序格局,在未甘休对话框前也能切换成另一应用程序
 MB_SYSTEMMODAL =
$0000一千;   //系统格局,必须截至对话框后,技术做任何操作
 MB_TASKMODAL =
$00003000;    //职责方式,在未完工对话框前也能切换来另一应用程序
 MB_HELP = $00004000;       //Help Button
 3、函数重返值
 0            //对话框建构退步
 idOk = 1        //按鲜明开关
 idCancel = 2      //按撤废按键
 idAbout = 3       //按非凡终止开关
 idRetry = 4       //按重试开关
 idIgnore = 5      //按忽略开关
 idYes = 6        //按是开关
 idNo = 7        //按否开关

不知道怎么,logingame线程,传递的自定义结构体参数过多,会传递不科学,何况内部有注释的地点会断点无效,运营起来会自动跳过这段代码,求大神解救,多谢。。

◇[DELPHI]转移函数的概念及表达
datetimetofiledate (datetime:Tdatetime):longint;
将Tdatetime格式的日期时间值转变来DOS格式的日龙时间值
datetimetostr (datetime:Tdatetime):string;
将Tdatatime格式变量转变来字符串,即使datetime参数不带有日期值,再次回到字符串日期呈现成为00/00/00,假若datetime参数
中并未有的时候间值,重返字符串中的时间有个别显得成为00:00:00 AM
datetimetostring (var result string;
const format:string;
datetime:Tdatetime);
依据给定的格式字符串调换时间和日期值,result为结果字符串,format为转移格式字符串,datetime为日期时间值
datetostr (date:Tdatetime)
使用shortdateformat全局变量定义的格式字符串将date参数变换到对应的字符串
floattodecimal (var result:Tfloatrec;value:
extended;precision,decimals:
integer); 将浮点数转换到十进制表示
floattostr (value:extended):string
将浮点数value转变到字符串格式,该调换使用普通数字格式,调换的有效位数为13个人。
floattotext (buffer:pchar;value:extended;
format:Tfloatformat;precision,
digits:integer):integer;
用给定的格式、精度和小数将浮点值value调换来十进制表示情势,转变结果寄存于buffer参数中,函数重临值为存款和储蓄到buffer中的字符位数,buffer是非0结果的字符串缓冲区。
floattotextfmt (buffer:pchar;value:extended;
format:pchar):integer
用给定的格式将浮点值value调换来十进制表示方式,调换结果存放于buffer参数中,函数再次回到值为存款和储蓄到buffer中的字符位数。
inttohex (value:longint;digits:integer):
string;
将给定的数值value转变来十六进制的字符串。参数digits给出转变结果字符串包蕴的数字位数。
inttostr (value:longint):string 将整数调换来十进制方式字符串
strtodate (const S:string):Tdatetime
将字符串调换到日期值,S必须包涵多少个合法的格式日期的字符串。
strtodatetime (const S:string):Tdatetime
将字符串S调换来日期时间格式,S必须具备MM/DD/YY
HH:MM:SS[AM|PM]格式,当中国和日本期和时间相隔符与系统时代时间常量设置相关。若无钦命AM或PM音信,表示使用24时辰制。
strtofloat (const S:string):extended;
将给定的字符串调换来浮点数,字符串具有如下格式:
[+|-]nnn…[.]nnn…[<+|-><E|e><+|->nnnn]
strtoint (const S:string):longint
将数字字符串调换到整数,字符串能够是十进制或十六进制格式,假使字符串不是三个官方的数字字符串,系统产生ECONVERTE凯雷德RO宝马X5卓殊
strtointdef (const S:string;default:
longint):longint;
将字符串S变换到数字,借使不可能将S调换来数字,strtointdef函数再次来到参数default的值。
strtotime (const S:string):Tdatetime
将字符串S调换到TDATETIME值,S具有HH:MM:SS[AM|PM]格式,实际的格式与系统的年华相关的全局变量有关。
timetostr (time:Tdatetime):string;
将参数TIME调换来字符串。转变结果字符串的格式与系统的时间相关常量的设置有关。

unit net;

interface
  uses
      sysutils
     ,windows
     ,dialogs
     ,winsock
     ,classes
     ,comobj
     ,wininet;

  //获得本机的局域网ip地址
  function getlocalip(var localip:string): boolean;
  //通过ip重临机器名
  function getnamebyipaddr(ipaddr: string; var macname: string): boolean
;
  //获取互联网中sqlserver列表
  function getsqlserverlist(var list: tstringlist): boolean;
  //获取网络中的全部互联网项目
  function getnetlist(var list: tstringlist): boolean;
  //获取网络中的职业组
  function getgrouplist(var list: tstringlist): boolean;
  //获取专门的学问组中有所Computer
  function getusers(groupname: string; var list: tstringlist):
boolean;
  //获取网络中的财富
  function getuserresource(ipaddr: string; var list: tstringlist):
boolean;
  //映射网络驱动器
  function netaddconnection(netpath: pchar; password: pchar;localpath:
pchar): boolean;
  //检查测量检验互连网状态
  function checknet(ipaddr:string): boolean;
  //检查评定机器是还是不是登录网络
  function checkmacattachnet: boolean;

  //剖断ip协议有没有安装   那几个函数有标题
  function isipinstalled : boolean;
  //检查评定机器是或不是上网
  function internetconnected: boolean;
implementation

{=================================================================
  功  能: 检查测量试验机器是或不是登录网络
  参  数: 无
  返回值: 成功:  true  失败:  false
  备 注:
  版 本:
     1.0  2002/10/03 09:55:00
=================================================================}
function checkmacattachnet: boolean;
begin
  result := false;
  if getsystemmetrics(sm_network) <> 0 then
    result := true;
end;

{=================================================================
  功  能: 重临本机的局域网ip地址
  参  数: 无
  返回值: 成功:  true, 并填充localip   失败:  false
  备 注:
  版 本:
     1.0  2002/10/02 21:05:00
=================================================================}
function getlocalip(var localip: string): boolean;
var
    hostent: phostent;
    ip: string;
    addr: pchar;
    buffer: array [0..63] of char;
    ginitdata: twsadata;
begin
  result := false;
  try
    wsastartup(2, ginitdata);
    gethostname(buffer, sizeof(buffer));
    hostent := gethostbyname(buffer);
    if hostent = nil then exit;
    addr := hostent^.h_addr_list^;
    ip := format(‘%d.%d.%d.%d’, [byte(addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
    localip := ip;
    result := true;
  finally
    wsacleanup;
  end;
end;

{=================================================================
  功  能: 通过ip重回机器名
  参  数:
          ipaddr: 想要获得名字的ip
  返回值: 成功:  机器名   失败:  ”
  备 注:
    inet_addr function converts a string containing an internet
    protocol dotted address into an in_addr.
  版 本:
    1.0  2002/10/02 22:09:00
=================================================================}
function getnamebyipaddr(ipaddr : string;var macname:string): boolean;
var
  sockaddrin: tsockaddrin;
  hostent: phostent;
  wsadata: twsadata;
begin
  result := false;
  if ipaddr = ” then exit;
  try
    wsastartup(2, wsadata);
    sockaddrin.sin_addr.s_addr := inet_addr(pchar(ipaddr));
    hostent := gethostbyaddr(@sockaddrin.sin_addr.s_addr, 4,
af_inet);
    if hostent <> nil then
      macname := strpas(hostent^.h_name);
    result := true;
  finally
    wsacleanup;
  end;
end;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图