免费短信平台函数表明必发365

必发365 1

必发365 1

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

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

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

//10进制调换为二进制字符串  [重写: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;
//10进制(I)–>>十6进制(S)
//D自带函数,Digits长度,一般设肆.
function IntToHex(Value: Integer; Digits: Integer): string;

 

 

//数据(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 成功
-一 连接短信平台停业
-二 命令试行倒闭
-叁 无可读短信

荒唐表达
0 成功
-一 连接短信平台破产
-二 命令实行停业
-三 无可读短信

一、WSAStartup函数
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
使
用Socket的程序在使用Socket在此以前务必调用WSAStartup函数。该函数的率先个参数指明程序请求使用的Socket版本,个中高位字节指
明副版本、低位字节指明主版本;操作系统利用第3个参数再次来到请求的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 登录数据库服务器所需的密码

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

二、WSACleanup函数
int WSACleanup (void);
应用程序在成功对请求的Socket库的选拔后,要调用WSACleanup函数来清除与Socket库的绑定并且释放Socket库所占用的系统能源。

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

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

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

用程序调用socket函数来创制1个力所能及实行互连网通讯的套接字。第2个参数钦命应用程序使用的通讯协议的协议族,对于TCP/IP协议族,该参数置
PF_INET;第壹个参数钦命要创制的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第三个参数钦赐应
用程序所运用的通讯协议。该函数假诺调用成功就回到新创制的套接字的描述符,要是失败就再次来到INVALID_SOCKET。套接字描述符是二个整数品种的
值。各个进度的经过空间里都有二个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的附和关系。该表中有叁个字段存放新创造的套接字的描述符,
另三个字段存放套接字数据结构的地址,因而根据套接字描述符就可以找到其相应的套接字数据结构。各样进程在友好的历程空间里都有1个套接字描述符表可是套
接字数据结构都以在操作系统的水源缓冲里。上面是三个创立流套接字的事例:
struct protoent *ppe;
ppe=getprotobyname(“tcp”);
SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);

function CreateIniDb: integer; stdcall;
函数表明:
初阶化平台的后台数据库脚本

function CreateIniDb: integer; stdcall;
函数表明:
先导化平台的后台数据库脚本

四、closesocket函数
int closesocket(
SOCKET s
);
closesocket
函数用来关闭2个描述符为s套接字。由于各种进程中都有三个套接字描述符表,表中的各样套接字描述符都对应了2个位居操作系统缓冲区中的套接字数据结构,
由此有希望有多少个套接字描述符指向同叁个套接字数据结构。套接字数据结构中特意有三个字段存放该协会的被引述次数,即有多少个套接字描述符指向该组织。当
调用closesocket函数时,操作系统先反省套接字数据结构中的该字段的值,借使为一,就表明只有3个套接字描述符指向它,由此操作系统就先把s在
套接字描述符表中对应的这条表项清除,并且释放s对应的套接字数据结构;假若该字段大于一,那么操作系统仅仅清除s在套接字描述符表中的对应表项,并且把
s对应的套接字数据结构的引用次数减壹。
closesocket函数若是试行成功就再次回到0,不然再次来到SOCKET_ERROR。

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

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

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

论是客户依然服务器应用程序都用send函数来向TCP连接的另1端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则常常用send函
数来向客户程序发送应答。该函数的首先个参数钦定发送端套接字描述符;第3个参数指Bellamy个存放应用程序要发送数据的缓冲区;第四个参数指明实际要发送的数
据的字节数;第多少个参数1般置0。那里只描述同步Socket的send函数的施行流程。当调用该函数时,send先比较待发送数据的长短len和套接字
s的发送缓冲区的长短,假诺len大于s的发送缓冲区的长度,该函数再次来到SOCKET_E库罗德RO奔驰M级;要是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哈弗ROENCORE;要是send在守候协议传送数据时网络断开的话,那么send函数也再次回到SOCKET_E牧马人RO昂Cora。要专注send函数把buf中的数据成功copy到s的出殡缓冲的多余空间里后它就回来了,然而此时那么些数据并不一定立刻被
传到连年的另一端。若是协商在两次三番的传递进度中冒出互连网错误的话,那么下二个Socket函数就会回去SOCKET_E奔驰M级ROENVISION。(每三个除send外的
Socket函数在试行的最初叶总要先等待套接字的出殡和埋葬缓冲中的数据被协议传送完结本事持续,如若在等候时现身网络错误,那么该Socket函数就回来
SOCKET_ERROR)
在意:在Unix系统下,尽管send在等候协议传送数据时互联网断开的话,调用send的历程会吸收到一个SIGPIPE随机信号,进程对该时域信号的暗中同意处理是经过终止。

function ReadASms(var aPhone, aContent, aSendDateTime: pchar): integer;
stdcall;
函数表明:
从平台的后台数据库中读取一条未读短信
参数表达:
aPhone 发送短信的人
aContent 短信的始末
aSendDateTime 短信发送的时间

function ReadASms(var aPhone, aContent, aSendDateTime: pchar): integer;
stdcall;
函数说明:
从阳台的后台数据库中读取一条未读短信
参数表明:
aPhone 发送短信的人
aContent 短信的剧情
aSendDateTime 短信发送的年月

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

论是客户照旧服务器应用程序都用recv函数从TCP连接的另一端接收数据。该函数的首先个参数钦赐接收端套接字描述符;首个参数指雅培(Karicare)个缓冲区,该缓
冲区用来存放recv函数接收到的数量;第4个参数指明buf的长度;第多个参数1般置0。那里只描述同步Socket的recv函数的执行流程。当使用
程序调用recv函数时,recv先等待s的出殡缓冲中的数据被协议传送完结,假如协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数再次回到SOCKET_E安德拉RO奥迪Q5,借使s的出殡缓冲中未有多少照旧数额被协议成功发送完结后,recv先检查套接字s的接收缓冲区,假设s接收缓冲区中并未有数据
或许协议正在接收数据,那么recv就径直等候,只到协和把数据接受完结。当协议把数量接收完结,recv函数就把s的收取缓冲中的数据copy到buf
中(注意协议接收到的数目或许大于buf的长短,所以在那种状态下要调用四次recv函数技术把s的接受缓冲中的数据copy完。recv函数仅仅是
copy数据,真正的接收数据是说道来造成的),recv函数重返其实际copy的字节数。假诺recv在copy时出错,那么它回到
SOCKET_EKoleosRO汉兰达;要是recv函数在等候协议接收数据时互联网中断了,那么它重临0。
在意:在Unix系统下,假诺recv函数在伺机协议接收数据时网络断开了,那么调用recv的长河会吸收到二个SIGPIPE复信号,进度对该实信号的暗许处理是经过终止。

function GetSmsParams(var SendSmsCnt, HaveNotSendCnt, ReciveSmsCnt,
HaveNotReadSmsCnt: integer): integer; stdcall;
函数表达:
得到平台的相关参数
参数表达:
SendSmsCnt 发件箱的总短信数
HaveNotSendCnt 未发的短信数量
ReciveSmsCnt 收件箱中已接受短信的数据
HaveNotReadSmsCnt 未读短信的数目

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

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

创立了几个Socket将来,套接字数据结构中有3个私下认可的IP地址和暗许的端口号。三个服务程序必须调用bind函数来给其绑定1个IP地址和多少个特定
的端口号。客户程序1般不要调用bind函数来为其Socket绑定IP地址和断口号。该函数的首先个参数钦赐待绑定的Socket描述符;第一个参数钦定1个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结构体中唯有一个唯1的字段s_addr,表示IP地址,该字段
是八个平头,一般用函数inet_addr()把字符串格局的IP地址转变来unsigned
long型的整数值后再置给s_addr。有的服务器是多宿主机,至少有七个网卡,那么运维在那样的服务器上的服务程序在为其Socket绑定IP地址时
能够把htonl(INADD瑞虎_ANY)置给s_addr,那样做的受益是不管哪个网段上的客户程序都能与该服务程序通讯;要是只给运转在多宿主机上的
服务程序的Socket绑定二个定位的IP地址,那么就唯有与该IP地址处于同2个网段上的客户程序本领与该服务程序通讯。大家用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));

 

 

八、listen函数
int listen( SOCKET s, int backlog );
服务程序可以调用listen函数使其流套接字s处于监听状态。处于监听状态的流套接字s将爱护多个客户连接请求队列,该队列最多容纳backlog个客户连接请求。要是该函数实践成功,则再次回到0;假如推行停业,则赶回SOCKET_ERROR。

九、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);

十、connect函数
int connect(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);
客户程序调用connect函数来使客户Socket
s与监听于name所钦点的微处理器的特定端口上的服务Socket进行几次三番。若是老是成功,connect再次回到0;倘使退步则赶回SOCKET_E揽胜ROKoleos。上边是3个例子:
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));

MessageBox对话框是相比较常用的贰个消息对话框,其不但能够定义展现的音讯内容、消息提醒Logo,而且能够定义按键组合及对话框的标题,是3个功用齐全的新闻对话框信息提醒图标,而且能够定义开关组合及对话框的标题,是二个功效齐全的消息对框。
 一、函数原型及参数
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word):
Integer;
 hWnd:对话框父窗口句柄,对话框展现在Delphi窗体内,可选取窗体的Handle属性,否则可用0,使其一向作为桌面窗口的子窗口。
 Text:欲呈现的音信字符串。
 Caption:对话框标题字符串。
 Type:对话框类型常量。
 该函数的重返值为整数,用于对话框开关的分辨。
 二、类型常量
 对话框的档次常量可由开关组合、缺省按键、展现Logo、运营方式四种常量组合而成。
 (一)开关组合常量
 MB_OK = $00000000;         //1个分明开关
 MB_OKCANCEL = $00000001;      //1个规定按键,二个撤消按键
 MB_ABORTRET宝马X5YIGNORE =
$0000000二;  //3个格外终止开关,1个重试按键,一个大体开关
 MB_YESNOCANCEL = $0000000三;    
//一个是开关,2个否开关,1个撤消开关
 MB_YESNO = $0000000四;        //贰个是按键,3个否按键
 MB_RET昂科拉YCANCEL = $0000000伍;     //1个重试开关,三个撤销按键
 (二)缺省按键常量
 MB_DEFBUTTON壹 = $00000000;     //第柒个按键为缺省按键
 MB_DEFBUTTON二 = $00000十0;     //第四个按键为缺省按键
 MB_DEFBUTTON三 = $00000200;     //第四个按键为缺省按键
 MB_DEFBUTTON四 = $00000300;     //第五个按键为缺省按键
 (3)Logo常量
 MB_ICONHAND = $00000010;        //“×”号图标
 MB_ICONQUESTION = $00000020;      //“?”号图标
 MB_ICONEXCLAMATION = $00000030;    //“!”号图标
 MB_ICONASTERISK = $00000040;      //“i”图标
 MB_USE逍客ICON = $00000080;        //用户Logo
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
 MB_ICONERROR = MB_ICONHAND;      //“×”号图标
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
 MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
 (肆)运营方式常量
 MB_应用程式LMODAL =
$00000000;    //应用程序形式,在未截止对话框前也能切换成另一应用程序
 MB_SYSTEMMODAL =
$0000一千;   //系统形式,必须结束对话框后,手艺做任何操作
 MB_TASKMODAL =
$0000两千;    //任务形式,在未甘休对话框前也能切换来另一应用程序
 MB_HELP = $00004000;       //Help Button
 三、函数重返值
 0            //对话框建立战败
 idOk = 一        //按分明开关
 idCancel = 二      //按撤销开关
 idAbout = 三       //按非凡终止按键
 idRetry = 四       //按重试开关
 idIgnore = 五      //按忽略按键
 idYes = 六        //按是按键
 idNo = 七        //按否开关

◇[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); 将浮点数调换到10进制表示
floattostr (value:extended):string
将浮点数value转变到字符串格式,该调换使用普通数字格式,调换的有效位数为1九个人。
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转变来十6进制的字符串。参数digits给出转变结果字符串包括的数字位数。
inttostr (value:longint):string 将整数转变到十进制格局字符串
strtodate (const S:string):Tdatetime
将字符串调换到日期值,S必须包罗2个官方的格式日期的字符串。
strtodatetime (const S:string):Tdatetime
将字符串S转变来日期时间格式,S必须具有MM/DD/YY
HH:MM:SS[AM|PM]格式,当中国和东瀛期和时间相隔符与系统时代时间常量设置相关。如若没有钦赐AM或PM音信,表示使用二四小时制。
strtofloat (const S:string):extended;
将给定的字符串转换来浮点数,字符串具有如下格式:
[+|-]nnn…[.]nnn…[<+|-><E|e><+|->nnnn]
strtoint (const S:string):longint
将数字字符串转变来整数,字符串能够是十进制或十陆进制格式,假诺字符串不是1个合法的数字字符串,系统产生ECONVERTEEnclaveRORAV4格外
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;
  //获取工作组中负有计算机
  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;

{=================================================================
  功  能: 重临网络中sqlserver列表
  参  数:
          list: 须要填写的list
  返回值: 成功:  true,并填充list  失败 false
  备 注:
  版 本:
    1.0  2002/10/02 22:44:00
=================================================================}
function getsqlserverlist(var list: tstringlist): boolean;
var
   i: integer;
   sretvalue: string;
   sqlserver: variant;
   serverlist: variant;
begin
  result := false;
  list.clear;
  try
    sqlserver := createoleobject(‘sqldmo.application’);
    serverlist := sqlserver.listavailablesqlservers;
    for i := 1 to serverlist.count do
      list.add (serverlist.item(i));
    result := true;
  finally
    sqlserver := null;
    serverlist := null;
  end;
end;

{=================================================================
  功  能: 判别ip协议有未有安装
  参  数: 无
  返回值: 成功:  true 失败: false;
  备 注:   该函数还有题目
  版 本:
     1.0  2002/10/02 21:05:00
=================================================================}
function isipinstalled : boolean;
var
  wsdata: twsadata;
  protoent: pprotoent;
begin
  result := true;
  try
    if wsastartup(2,wsdata) = 0 then
    begin
      protoent := getprotobyname(‘ip’);
      if protoent = nil then
        result := false
    end;
  finally
    wsacleanup;
  end;
end;

{=================================================================
  功  能: 再次回到网络中的共享财富
  参  数:
          ipaddr: 机器ip
          list: 供给填写的list
  返回值: 成功:  true,并填充list 失败: false;
  备 注:
     wnetopenenum function starts an enumeration of network
     resources or existing connections.
     wnetenumresource function continues a network-resource
     enumeration started by the wnetopenenum function.
  版 本:
     1.0  2002/10/03 07:30:00
=================================================================}
function getuserresource(ipaddr: string; var list: tstringlist):
boolean;
type
  tnetresourcearray = ^tnetresource;//网络类型的数组
var
  i: integer;
  buf: pointer;
  temp: tnetresourcearray;
  lphenum: thandle;
  netresource: tnetresource;
  count,bufsize,res: dword;
begin
  result := false;
  list.clear;
  if copy(ipaddr,0,2) <> ‘\\’ then
    ipaddr := ‘\\’+ipaddr;   //填充ip地址新闻
  fillchar(netresource, sizeof(netresource), 0);//初步化网络层次音讯
  netresource.lpremotename := @ipaddr[1];//内定Computer名称
  //获取内定计算机的互连网财富句柄
  res := wnetopenenum( resource_globalnet, resourcetype_any,
                      resourceusage_connectable,
@netresource,lphenum);
  if res <> no_error then exit;//实行破产
  while true do//列举钦点工作组的互连网能源
  begin
    count := $ffffffff;//不限能源数量
    bufsize := 81九贰;//缓冲区大大小小设置为8k
    getmem(buf, bufsize);//申请内部存款和储蓄器,用于获取职业组消息
    //获取钦赐Computer的网络能源名称
    res := wnetenumresource(lphenum, count, pointer(buf), bufsize);
    if res = error_no_more_items then break;//财富列举落成
    if (res <> no_error) then exit;//实行停业
    temp := tnetresourcearray(buf);
    for i := 0 to count – 1 do
    begin
       //获取钦点计算机中的共享能源名称,+2意味着删除”\\”,
       //如\\192.168.0.1 => 192.168.0.1
       list.add(temp^.lpremotename + 2);
       inc(temp);
    end;
  end;
  res := wnetcloseenum(lphenum);//关闭3回列举
  if res <> no_error then exit;//试行停业
  result := true;
  freemem(buf);
end;

{=================================================================
  功  能: 重返互联网中的工作组
  参  数:
          list: 需求填写的list
  返回值: 成功:  true,并填充list 失败: false;
  备  注:
  版  本:
     1.0  2002/10/03 08:00:00
=================================================================}
function getgrouplist( var list : tstringlist ) : boolean;
type
  tnetresourcearray = ^tnetresource;//互联网类型的数组
var
  netresource: tnetresource;
  buf: pointer;
  count,bufsize,res: dword;
  lphenum: thandle;
  p: tnetresourcearray;
  i,j: smallint;
  networktypelist: tlist;
begin
  result := false;
  networktypelist := tlist.create;
  list.clear;
  //获取整个互连网中的文件财富的句柄,lphenum为回到名柄
  res := wnetopenenum( resource_globalnet, resourcetype_disk,
                       resourceusage_container, nil,lphenum);
  if res <> no_error then exit;//raise
exception(res);//施行停业
  //获取整个网络中的网络类型音信
  count := $ffffffff;//不限财富数量
  bufsize := 819二;//缓冲区大小设置为八k
  getmem(buf, bufsize);//申请内部存款和储蓄器,用于获取工作组音讯
  res := wnetenumresource(lphenum, count, pointer(buf), bufsize);
     //能源列举实现                    //执行倒闭
  if ( res = error_no_more_items ) or (res <> no_error ) then
exit;
  p := tnetresourcearray(buf);
  for i := 0 to count – 一 do//记录种种网络项指标消息
  begin
    networktypelist.add(p);
    inc(p);
  end;
  res := wnetcloseenum(lphenum);//关闭一遍列举
  if res <> no_error then exit;
  for j := 0 to networktypelist.count-一 do
//列出种种网络项目中的全部工作组名称
  begin//列出3个网络项目中的全数职业组名称
    netresource :=
tnetresource(networktypelist.items[j]^);//互连网类型消息
   
//获取有个别互连网项目标文本财富的句柄,netresource为互连网类型音信,lphenum为回到名柄
    res := wnetopenenum(resource_globalnet, resourcetype_disk,
                        resourceusage_container,
@netresource,lphenum);
    if res <> no_error then break;//试行倒闭
    while true do//列举三个互联网项目标具备工作组的音信
    begin
      count := $ffffffff;//不限能源数量
      bufsize := 81九二;//缓冲区大大小小设置为八k
      getmem(buf, bufsize);//申请内部存款和储蓄器,用于获取职业组音讯
      //获取3个网络项目标文本能源消息,
      res := wnetenumresource(lphenum, count, pointer(buf), bufsize);
          //能源列举完结                   //推行停业
      if ( res = error_no_more_items ) or (res <> no_error) 
then break;
      p := tnetresourcearray(buf);
      for i := 0 to count – 壹 do//列举各种职业组的新闻
      begin
        list.add( strpas( p^.lpremotename ));//获得八个工作组的名目
        inc(p);
      end;
    end;
    res := wnetcloseenum(lphenum);//关闭二回列举
    if res <> no_error then break;//推行倒闭
  end;
  result := true;
  freemem(buf);
  networktypelist.destroy;
end;

{=================================================================
  功  能: 列举工作组中持有的Computer
  参  数:
          list: 需求填写的list
  返回值: 成功:  true,并填充list 失败: false;
  备  注:
  版  本:
     1.0  2002/10/03 08:00:00
=================================================================}
function getusers(groupname: string; var list: tstringlist): boolean;
type
  tnetresourcearray = ^tnetresource;//互联网类型的数组
var
  i: integer;
  buf: pointer;
  temp: tnetresourcearray;
  lphenum: thandle;
  netresource: tnetresource;
  count,bufsize,res: dword;
begin
  result := false;
  list.clear;
  fillchar(netresource, sizeof(netresource), 0);//开始化互联网层次音信
  netresource.lpremotename := @groupname[1];//钦命职业组名称
  netresource.dwdisplaytype :=
resourcedisplaytype_server;//类型为服务器(工作组)
  netresource.dwusage := resourceusage_container;
  netresource.dwscope := resourcetype_disk;//列举文件能源音讯
  //获取钦点工作组的互连网财富句柄
  res := wnetopenenum( resource_globalnet, resourcetype_disk,
                        resourceusage_container,
@netresource,lphenum);
  if res <> no_error then exit; //实施失利
  while true do//列举钦命工作组的互联网财富
  begin
    count := $ffffffff;//不限财富数量
    bufsize := 81九二;//缓冲区大大小小设置为8k
    getmem(buf, bufsize);//申请内部存款和储蓄器,用于获取工作组新闻
    //获取Computer名称
    res := wnetenumresource(lphenum, count, pointer(buf), bufsize);
    if res = error_no_more_items then break;//能源列举达成
    if (res <> no_error) then exit;//实施倒闭
    temp := tnetresourcearray(buf);
    for i := 0 to count – 一 do//列举职业组的计算机名称
    begin
     
//获取职业组的处理器名称,+二意味删除”\\”,如\\wangfajun=>wangfajun
      list.add(temp^.lpremotename + 2);
      inc(temp);
    end;
  end;
  res := wnetcloseenum(lphenum);//关闭3回列举
  if res <> no_error then exit;//试行停业
  result := true;
  freemem(buf);
end;

{=================================================================
  功  能: 列举全体网络项目
  参  数:
          list: 须要填写的list
  返回值: 成功:  true,并填充list 失败: false;
  备 注:
  版 本:
     1.0  2002/10/03 08:54:00
=================================================================}
function getnetlist(var list: tstringlist): boolean;
type
  tnetresourcearray = ^tnetresource;//互连网类型的数组
var
  p: tnetresourcearray;
  buf: pointer;
  i: smallint;
  lphenum: thandle;
  netresource: tnetresource;
  count,bufsize,res: dword;
begin
  result := false;
  list.clear;
  res := wnetopenenum( resource_globalnet, resourcetype_disk,
                      resourceusage_container, nil,lphenum);
  if res <> no_error then exit;//试行倒闭
  count := $ffffffff;//不限能源数量
  bufsize := 81九二;//缓冲区大小设置为八k
  getmem(buf, bufsize);//申请内部存款和储蓄器,用于获取工作组音讯
  res := wnetenumresource(lphenum, count, pointer(buf),
bufsize);//获取互联网类型新闻
      //能源列举完成                    //试行停业
  if ( res = error_no_more_items ) or (res <> no_error ) then
exit;
  p := tnetresourcearra

{=================================================================
  功  能: 映射网络驱动器
  参  数:
          netpath: 想要映射的网络路线
          password: 访问密码
          localpath 本地路径
  返回值: 成功:  true  失败: false;
  备 注:
  版 本:
     1.0  2002/10/03 09:24:00
=================================================================}
function netaddconnection(netpath: pchar; password: pchar
                          ;localpath: pchar): boolean;
var
  res: dword;
begin
  result := false;
  res := wnetaddconnection(netpath,password,localpath);
  if res <> no_error then exit;
  result := true;
end;

{=================================================================
  功  能:  检查测试网络状态
  参  数:
          ipaddr: 被测试互连网上主机的ip地址或称谓,提议利用ip
  返回值: 成功:  true  失败: false;
  备 注:
  版 本:
     1.0  2002/10/03 09:40:00
=================================================================}
function checknet(ipaddr: string): boolean;
type
  pipoptioninformation = ^tipoptioninformation;
  tipoptioninformation = packed record
     ttl:         byte;      // time to live (used for traceroute)
     tos:         byte;      // type of service (usually 0)
     flags:       byte;      // ip header flags (usually 0)
     optionssize: byte;      // size of options data (usually 0, max
40)
     optionsdata: pchar;     // options data buffer
  end;

  picmpechoreply = ^ticmpechoreply;
  ticmpechoreply = packed record
     address:       dword;                // replying address
     status:        dword;                // ip status value (see
below)
     rtt:           dword;                // round trip time in
milliseconds
     datasize:      word;                 // reply data size
     reserved:      word;
     data:          pointer;              // pointer to reply data
buffer
     options:       tipoptioninformation; // reply options
  end;

  ticmpcreatefile = function: thandle; stdcall;
  ticmpclosehandle = function(icmphandle: thandle): boolean; stdcall;
  ticmpsendecho = function(
     icmphandle:          thandle;
     destinationaddress:  dword;
     requestdata:         pointer;
     requestsize:         word;
     requestoptions:      pipoptioninformation;
     replybuffer:         pointer;
     replysize:           dword;
     timeout:             dword
  ): dword; stdcall;

const
  size = 32;
  timeout = 1000;
var
  wsadata: twsadata;
  address: dword;                     // address of host to contact
  hostname, hostip: string;           // name and dotted ip of host to
contact
  phe: phostent;                      // hostentry buffer for name
lookup
  buffersize, npkts: integer;
  preqdata, pdata: pointer;
  pipe: picmpechoreply;               // icmp echo reply buffer
  ipopt: tipoptioninformation;        // ip options for packet to send
const
  icmpdll = ‘icmp.dll’;
var
  hicmplib: hmodule;
  icmpcreatefile : ticmpcreatefile;
  icmpclosehandle: ticmpclosehandle;
  icmpsendecho:    ticmpsendecho;
  hicmp: thandle;                     // handle for the icmp calls
begin
  // initialise winsock
  result:=true;
  if wsastartup(2,wsadata) <> 0 then begin
     result:=false;
     halt;
  end;
  // register the icmp.dll stuff
  hicmplib := loadlibrary(icmpdll);
  if hicmplib <> null then begin
    @icmpcreatefile := getprocaddress(hicmplib, ‘icmpcreatefile’);
    @icmpclosehandle:= getprocaddress(hicmplib, ‘icmpclosehandle’);
    @icmpsendecho:= getprocaddress(hicmplib, ‘icmpsendecho’);
    if (@icmpcreatefile = nil) or (@icmpclosehandle = nil) or
(@icmpsendecho = nil) then begin
        result:=false;
        halt;
    end;
    hicmp := icmpcreatefile;
    if hicmp = invalid_handle_value then begin
      result:=false;
      halt;
    end;
  end else begin
    result:=false;
    halt;
  end;
// ————————————————————
  address := inet_addr(pchar(ipaddr));
  if (address = inaddr_none) then begin
    phe := gethostbyname(pchar(ipaddr));
    if phe = nil then result:=false
    else begin
      address := longint(plongint(phe^.h_addr_list^)^);
      hostname := phe^.h_name;
      hostip := strpas(inet_ntoa(tinaddr(address)));
    end;
  end
  else begin
    phe := gethostbyaddr(@address, 4, pf_inet);
    if phe = nil then result:=false;
  end;

  if address = inaddr_none then
  begin
     result:=false;
  end;
  // get some data buffer space and put something in the packet to
send
  buffersize := sizeof(ticmpechoreply) + size;
  getmem(preqdata, size);
  getmem(pdata, size);
  getmem(pipe, buffersize);
  fillchar(preqdata^, size, $aa);
  pipe^.data := pdata;

    // finally send the packet
  fillchar(ipopt, sizeof(ipopt), 0);
  ipopt.ttl := 64;
  npkts := icmpsendecho(hicmp, address, preqdata, size,
                        @ipopt, pipe, buffersize, timeout);
  if npkts = 0 then result:=false;

  // free those buffers
  freemem(pipe); freemem(pdata); freemem(preqdata);

// ————————————————————–
  icmpclosehandle(hicmp);
  freelibrary(hicmplib);
  // free winsock
  if wsacleanup <> 0 then result:=false;
end;

{=================================================================
  功  能:  检查实验Computer是或不是上网
  参  数:  无
  返回值:  成功:  true  失败: false;
  备 注:   uses wininet
  版 本:
     1.0  2002/10/07 13:33:00
=================================================================}
function internetconnected: boolean;
const
  // local system uses a modem to connect to the internet.
  internet_connection_modem      = 1;
  // local system uses a local area network to connect to the
internet.
  internet_connection_lan        = 2;
  // local system uses a proxy server to connect to the internet.
  internet_connection_proxy      = 4;
  // local system’s modem is busy with a non-internet connection.
  internet_connection_modem_busy = 8;
var
  dwconnectiontypes : dword;
begin
  dwconnectiontypes := internet_connection_modem+
internet_connection_lan
  + internet_connection_proxy;
  result := internetgetconnectedstate(@dwconnectiontypes, 0);
end;

end.
//错误音信常量
unit head;

interface
const
  c_err_getlocalip       = ‘获取本地ip退步’;
  c_err_getnamebyipaddr  = ‘获取主机名退步’;
  c_err_getsqlserverlist = ‘获取sqlserver服务器战败’;
  c_err_getuserresource  = ‘获取共享资失利’;
  c_err_getgrouplist     = ‘获取具备工作组退步’;
  c_err_getgroupusers    = ‘获取工作组中享有Computer退步’;
  c_err_getnetlist       = ‘获取具备网络项目失利’;
  c_err_checknet         = ‘网络不通’;
  c_err_checkattachnet   = ‘未登入网络’;
  c_err_internetconnected =’未有上网’;
 
  c_txt_checknetsuccess  = ‘网络畅通’;
  c_txt_checkattachnetsuccess = ‘已登陆互联网’;
  c_txt_internetconnected =’上网了’;

implementation

end.

得到WINDOWS的SYSTEM路径:
   方法:
            var
                 MySysPath : PCHAR ;
            begin
                    GetMem(MySysPath,255);
                    GetSystemDirectory(MySysPath,255);
            end;
   注:MySysPath为SYSTEM路径

得到程序的不二等秘书籍
 ExtractFileDir(Application.Exename);

观测文件是还是不是留存
 FileExists(FileName:String):Boolean;

变动文件扩张名
 ChangeFileExt(FileName:String)

获得文件的扩充名
 ExtractFileExt(FileName:String):String;

什么样赢得Windows的暂时文件目录?
适合版本:Delphi 叁,二.0,一.0

Windows 95 &
NT都钦定了放置目前文件的目录,但是,用户能改换一时目录的职位而不使用缺省的目录。那篇小说的目标是报告您怎样获得Windows
玖伍 & NT当前的暂时目录地点。那些Windows API函数
GetTempPath正是缓解这些标题标。其函数原形为:

DWORD GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer);

下边包车型地铁事例示范怎样选取:

function GetTempDirectory: String;
var
TempDir: array[0..255] of Char;
begin
GetTempPath(255, @TempDir);
Result := StrPas(TempDir);
end;

备考:权且目录的显著标准:
一,倘若有TMP环境变量则目前目录为TMP钦点的目录
二,假若未有TMP环境变量而有TEMP环境变量,则为TEMP变量钦命的目录
3,假如TMP和TEMP都尚未概念,则取当前目录为一时目录

次第不现身在职务栏
  一般Windows
九伍运转程序时都会在职分栏下面世按键,如若你的程序是二个蹲点程序,那么出现开关就不是明智之举了。要促成该效用将在在OnCreate事件里选择到API函数SetWindowLong
procedure TForm1.FormCreate(sender:TObject);
begin
SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;

改Computer名

改换Computer在网络中的名字,重新启航后才生效
SetComputerName(‘Hello World’);

垄断(monopoly)热运转
要使系统的热运转键(Ctrl+Alt+Del)失效,使用以下语句
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
要过来系统的热运维键(Ctrl+Alt+Del),使用以下语句
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);

一时半刻路线
突发性必要Windows的一时路线来做备份等职业,那么将在理解路线在哪,下边包车型客车顺序帮你忙:
var aa:pchar;
begin
GetTempPath(20,aa); file://重回路线名
edit1.text:=aa;
end;

回来程序施行参数
  有关 Delphi 传入APP的命令列参数, 请参考以下的验证:
用ParamCount函数获得命令参数的个数:
呼叫 ParamStr(0), 传回施行档的档名(含路线)
呼叫 ParamStr(n), 传回第n个参数的始末
procedure TForm1.FormCreate(Sender: TObject);
var
sFileName: string;
begin
if ParamCount > 0 then begin (* 有奉行参数字传送入 *)
sFileName := ParamStr(1); (* 获得参数内容 *)
if FileExists(sFileName) then
Memo1.Lines.LoadFromFile(sFileName)
else
Application.MessageBox(‘找不到内定的档案’, ‘音信’, 4八);
end;
end;

关闭Windows
决定WINDOWS的按键:如关闭WINDOWS,重新启航WINDOWS等, ExitWindowsEx(UINT
uFlags,DWOQashqaiD dwReserved);是贯彻这一成效的API函数
第一定义常数
const
EWX_FOKoleosCE=4; file://关闭全数程序并以其余用户身份登陆
EWX_LOGOFF=0; file://重新起动Computer并切换成MS-DOS格局
EWX_REBOOT=二; file://重新起动计算机
EWX_SHUTDOWN=壹;//关闭Computer
运维时给How赋值,让她分外EWX_SHUTDOWN或任何,调用以下语句
ExitWindowsEx(How,0);

关门外部应用程序
怎么着在 Delphi 应用程序中, 去关闭外部已拉开的应用程序?
上边给出1段在 Delphi 中关闭”总括器”程序为例:
var
HWndCalculator : HWnd;
begin
// find the exist calculator window
HWndCalculator := Winprocs.FindWindow(nil, ‘计算器’); // close the exist
Calculator
if HWndCalculator <> 0 then
SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
end;

获得推行顺序的目录
  SysUtils 单元中有 ExtractFileDir 与 ExtractFilePath五个近乎的函数,
用哪多个?未有太大的关联。
  然而有以下的差别: ExtractFilePath
传回值的最後三个字元是反斜杠”/”。
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ExtractFileDir(Application.Exename));
// ie: c:\temp
ShowMessage(ExtractFilePath(Application.Exename));
// ie: c:\temp\
end;
一样点: 假使实践文书在根目录下(如:C:\SAMPLE.EXE)的话,
两者的传回值一样, 且最终1个字符都以”/”。

采纳GetFileVersionInfo 获得版本音信的例子 
Samples Using GetFileVersionInfo?
回答1:
 procedure GetBuildInfo(var V1, V2, V3, V4: Word);
 var
   VerInfoSize: DWORD;
   VerInfo: Pointer;
   VerValueSize: DWORD;
   VerValue: PVSFixedFileInfo;
   Dummy: DWORD;
 begin
 VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
 GetMem(VerInfo, VerInfoSize);
 GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
 VerQueryValue(VerInfo, ‘\’, Pointer(VerValue), VerValueSize);
 with VerValue^ do
   begin
   V1 := dwFileVersionMS shr 16;
   V2 := dwFileVersionMS and $FFFF;
   V3 := dwFileVersionLS shr 16;
   V4 := dwFileVersionLS and $FFFF;
   end;
 FreeMem(VerInfo, VerInfoSize);
 end;

treeview 右键选中
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button:
TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  TreeNode: TTreeNode;
  l_lPARAM: LPARAM;
begin
  if Button <> mbRight then Exit;
  TreeNode := TreeView1.GetNodeAt(x, y);
  if TreeNode <> nil then
  begin
    TreeView1.Selected := TreeNode;
    l_Lparam := x + (y shl 16);
    sendmessage(Treeview1.Handle, WM_LBUTTONDOWN, MK_LBUTTON,
L_lparam);
    sendmessage(Treeview1.Handle, WM_LBUTTONUP, MK_LBUTTON,
L_lparam);
  end;

相关文章

发表评论

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

*
*
Website