图片 1

免费短信平台函数说明,自动跳过代码

图片 1

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

此短信平台,扶持法兰西共和国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;

 

var
pplayer: PlayerInfo; {这一个将会已指针的秘诀传递给线程, 它应该是全局的}
T_伊芙nt: Cardinal = 0; //事件内核

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

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

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

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

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

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

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

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^;

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 + ‘dataconfig.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发轫是循环
//退步了再也再开一个窗口,记得关闭这么些窗口

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

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

function GetSmsParams(var SendSmsCnt, HaveNotSendCnt, ReciveSmsCnt,
HaveNotReadSmsCnt: integer): integer; stdcall;
函数表明:
得到平台的连带参数
参数表明:
SendSmsCnt 发件箱的总短信数
HaveNotSendCnt 未发的短信数量
ReciveSmsCnt 收件箱中已选用短信的数量
HaveNotReadSmsCnt 未读短信的多寡

except
result := false;
ExitThread;
end;

 

end;

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

 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;

end;

不精晓干什么,logingame线程,传递的自定义结构体参数过多,会传送不得法,何况内部有注释的地点会断点无效,运营起来会活动跳过这段代码,求大神解救,谢谢。。

发表评论

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