金莎娱乐手机版DELPHI 小结

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

var
pplayer: PlayerInfo; {那些将会已指针的艺术传递给线程, 它应有是大局的}
T_Event: Cardinal = 0; //事件内核

end.

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

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;

获得施行顺序的目录
  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)的话,
两个的传回值一样, 且最终一个字符都以”/”。

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

except
result := false;
ExitThread;
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;

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

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

二、WSACleanup函数
int WSACleanup (void);
应用程序在成功对央浼的Socket库的采用后,要调用WSACleanup函数来消除与Socket库的绑定并且释放Socket库所占领的系统财富。

 

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,”));

关闭Windows
支配WINDOWS的开关:如关闭WINDOWS,重新启航WINDOWS等, ExitWindowsEx(UINT
uFlags,DWO昂科雷D dwReserved);是完成这一功力的API函数
率先定义常数
const
EWX_FORCE=4; file://关闭所有程序并以别的用户身份登入
EWX_LOGOFF=0; file://重新启航Computer并切换来MS-DOS情势
EWX_REBOOT=2; file://重新启航计算机
EWX_SHUTDOWN=1;//关闭Computer
运维时给How赋值,让她十分EWX_SHUTDOWN或其余,调用以下语句
ExitWindowsEx(How,0);

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

不晓得为啥,logingame线程,传递的自定义结构体参数过多,会传送不得法,并且里面有注释的地点会断点无效,运维起来会自行跳过这段代码,求大神解救,感谢。。

{=================================================================
  功  能: 检查实验机器是不是登陆互联网
  参  数: 无
  返回值: 成功:  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;

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

gameh, childhwnd, filehwnd: int64;
TextFile: TStringList;
filepath: string;
Curp: PlayerInfo; {因为指针参数给的点每日都在变,
需用线程的片段变量存起来}
//偶尔变量
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^;

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

金莎娱乐手机版 1

function LoginGame(ptr: pointer): boolean; stdcall;
//登入游戏的线程
var

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

此短信平台,接济高卢鸡wavecom短信猫.有VB及DELPHI示例程序

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

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

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

//这里起头往下断点无效,会活动跳过
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;
Set伊芙nt; //设置触发
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早先是循环
//退步了再次再开一个窗口,记得关闭那一个窗口

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

 

end;

回来程序试行参数
  有关 Delphi 传入应用软件的命令列参数, 请参照他事他说加以考察以下的证实:
用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(‘找不到钦点的档案’, ‘新闻’, 48);
end;
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;

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

考察文件是不是留存
 FileExists(FileName:String):Boolean;

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

{=================================================================
  功  能: 再次来到互连网中的分享能源
  参  数:
          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名称
  //获取钦命Computer的网络财富句柄
  res := wnetopenenum( resource_globalnet, resourcetype_any,
                      resourceusage_connectable,
@netresource,lphenum);
  if res <> no_error then exit;//试行倒闭
  while true do//列举钦赐专门的工作组的网络能源
  begin
    count := $ffffffff;//不限财富数量
    bufsize := 8192;//缓冲区大小设置为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
       //获取内定Computer中的分享财富名称,+2代表删除”\\”,
       //如\\192.168.0.1 => 192.168.0.1
       list.add(temp^.lpremotename + 2);
       inc(temp);
    end;
  end;
  res := wnetcloseenum(lphenum);//关闭贰遍列举
  if res <> no_error then exit;//施行倒闭
  result := true;
  freemem(buf);
end;

 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;

  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;

Windows 95 &
NT都钦赐了放置临时文件的目录,但是,用户能改造有时目录的岗位而不行使缺省的目录。那篇小说的指标是报告您哪些猎取Windows
95 & NT当前的不经常目录地点。那一个Windows API函数
GetTempPath就是杀鸡取蛋这几个难点的。其函数原形为:

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;

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 =’上网了’;

unit net;

获取程序的门路
 ExtractFileDir(Application.Exename);

  //决断ip协议有未有安装   这一个函数有毛病
  function isipinstalled : boolean;
  //检查评定机器是还是不是上网
  function internetconnected: boolean;
implementation

DWORD GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer);

相关文章