📄 unit_main.pas
字号:
unit Unit_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, SUIMainMenu, SUIButton, StdCtrls, SUIComboBox,
SUIImagePanel, SUIGroupBox, jpeg, ExtCtrls, SUIForm, ComCtrls,
SUIStatusBar, GIFImage, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdTelnet, OleCtrls, IniFiles,Unit_MyPro, SUIDlg,ShellApi,
ScktComp, SysTray, SUIPopupMenu,TLHelp32, SHDocVw;
const
CM_RESTORE=WM_USER+$1000;
APPNAME='91gonet传奇3登陆器2.0商业';
type
TFrmMain = class(TForm)
suiForm1: TsuiForm;
Panel1: TPanel;
Image1: TImage;
suiGroupBox1: TsuiGroupBox;
Com_ServerList: TsuiComboBox;
suiMainMenu1: TsuiMainMenu;
Label_ServerStat: TLabel;
Label2: TLabel;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
suiStatusBar1: TsuiStatusBar;
Check_Win: TsuiCheckBox;
Image_Open: TImage;
IdTelnet1: TIdTelnet;
Image_Close: TImage;
WebBrowser1: TWebBrowser;
suiMessageDialog1: TsuiMessageDialog;
SysTray1: TSysTray;
suiPopupMenu1: TsuiPopupMenu;
N17: TMenuItem;
N18: TMenuItem;
OpenDialog1: TOpenDialog;
CSocket: TClientSocket;
Time_SetWg: TTimer;
Timer2: TTimer;
Timer_SetMir3: TTimer;
suiImageButton1: TsuiImageButton;
suiImageButton2: TsuiImageButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Show_Message(text:String;Icon:TsuiIconType);
procedure Com_ServerListEnter(Sender: TObject);
procedure Com_ServerListChange(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure WMSysCommand(var Message: TWMSysCommand);message WM_SYSCOMMAND;
procedure N18Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure CSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Time_SetWgTimer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer_SetMir3Timer(Sender: TObject);
procedure suiImageButton2Click(Sender: TObject);
procedure suiImageButton1Click(Sender: TObject);
procedure SysTray1IconDblClick(Sender: TObject);//响应WM_SYSCOMMAND消息 private
{ Private declarations }
public
procedure CreateParams(var Params:TCreateParams);override;
procedure RestoreReaues(var message:TMessage);message CM_RESTORE;
function DecodeMessagePacket(data:String):integer;
{ Public declarations }
end;
var
FrmMain: TFrmMain;
VerCode:int64;
WgName:String;
NoticeMemo,CmlistMemo:TMemoryStream;
implementation
uses Unit_AddNewId, Unit_FindID, Unit_EditPass, Unit_FindChar,
Unit_FindStorage, Unit_LevelIdx, Unit_About, Unit_RcFile, Unit_Msg;
{$R *.dfm}
procedure SetWg(WgName:String);
var
S:String;
Found:boolean;
HProcess,HSnapshot:THandle;
lpNumberOfBytesWritten: DWORD;
appe:TProcessEntry32;
function ModuleEnum(processid:Dword):boolean;
var
ModuleList :Thandle;
pm :TMODULEENTRY32;
foundModule:boolean;
begin
Result:=True;
ModuleList:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID);
pm.dwSize:=sizeof(TMODULEENTRY32);
foundModule:=module32first(ModuleList,pm);
while integer(foundModule)<>0 do
begin
if pos(UpperCase(pm.szModule),UpperCase(WgName))>0 then
begin
Result:=False;
exit;
end;
foundModule:=Module32Next(ModuleList,pm);
end;
closehandle(ModuleList);
end; // ModuleEnum
begin
HSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
appe.dwSize:= SizeOf(appe);
found:= Process32First(HSnapshot, appe);
while Integer(found) <> 0 do
begin
s:=ExtractFileName(appe.szExeFile);
if (UpperCase(s)=UpperCase(ExtractFileName(Mir3ExeName))) or (UpperCase(s)=UpperCase('mir3.exe')) then
if not ModuleEnum(appe.th32ProcessID) then
begin
HProcess:=OpenProcess(PROCESS_ALL_ACCESS,true,appe.th32ProcessID);
TerminateProcess(HProcess,0);
FrmMain.Show_Message('请勿使用恶意外挂!',suiWarning);
FrmMain.Time_SetWg.Enabled:=False;
end;
Found:=Process32Next(HSnapshot,appe);
end;
CloseHandle(HSnapshot);
end;
procedure TFrmMain.FormCreate(Sender: TObject);
var
IniFile:Tinifile;
i,ServerCount:integer;
Tmp_Server:PServerInfo;
begin
Time_SetWg.Enabled:=True;
NoticeMemo:=TMemoryStream.Create;
CmlistMemo:=TMemoryStream.Create;
VerCode:=0;
Select_idx:=-1;
ServerS:=TList.Create;
Updates:=TList.Create;
AppPath:=ExtractFilePath(Application.ExeName);
IniFile:=TIniFile.Create(AppPath+'Client.Ini');
Mir3ExeName:=IniFile.ReadString('Main','Mir3Exe','');
ServerCount:=IniFile.ReadInteger('Server','ServerCount',0)+1;
Pic_Memo:=TMemoryStream.Create;
ReadFileInfo(ExeTitle,ExeVer,ExeType,ServerS,Updates,NoticeMemo,CmlistMemo);
Pic_Memo.Position:=0;
Image1.Picture.Graphic.LoadFromStream(Pic_Memo);
Pic_memo.Free;
SysTray1.Hint:=ExeTitle;
Application.Title:=ExeTitle;
suiForm1.Caption:=ExeTitle;
SetForm_Style(suiForm1,ExeType);
for i := 1 to ServerCount-1 do
begin
New(Tmp_Server);
Tmp_Server.ServerName:=IniFile.ReadString('Server'+IntToStr(i),'ServerName','');
Tmp_Server.ServerIp:=IniFile.ReadString('Server'+IntToStr(i),'ServerIp','');
Tmp_Server.ServerPort:=IniFile.ReadInteger('Server'+IntToStr(i),'ServerPort',7000);
Tmp_Server.ServerUrl:=IniFile.ReadString('Server'+IntToStr(i),'ServerUrl','http://bbs.91go.net');
ServerS.Add(Tmp_Server);
end;
IniFile.Free;
end;
procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
IniFile:TIniFile;
i:integer;
S:String;
Found:boolean;
HProcess,HSnapshot:THandle;
lpNumberOfBytesWritten: DWORD;
appe:TProcessEntry32;
begin
HSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
appe.dwSize:= SizeOf(appe);
found:= Process32First(HSnapshot, appe);
while Integer(found) <> 0 do
begin
s:=ExtractFileName(appe.szExeFile);
if (UpperCase(s)=UpperCase(ExtractFileName(Mir3ExeName))) or (UpperCase(s)=UpperCase('mir3.exe')) then
begin
HProcess:=OpenProcess(PROCESS_ALL_ACCESS,true,appe.th32ProcessID);
TerminateProcess(HProcess,0);
end;
Found:=Process32Next(HSnapshot,appe);
end;
CloseHandle(HSnapshot);
IniFile:=TIniFile.Create(AppPath+'Client.Ini');
IniFile.WriteString('Main','Mir3Exe',Mir3ExeName);
IniFile.WriteInteger('Server','ServerCount',ServerS.Count-1);
IniFile.WriteInteger('Wg','WgCount',ServerS.Count-1);
for i:=1 to ServerS.Count-1 do
begin
IniFile.WriteString('Server'+IntToStr(i),'ServerName',PServerInfo(Servers[i]).ServerName);
IniFile.WriteString('Server'+IntToStr(i),'ServerIp',PServerInfo(Servers[i]).ServerIp);
IniFile.WriteInteger('Server'+IntToStr(i),'ServerPort',PServerInfo(Servers[i]).ServerPort);
IniFile.WriteString('Server'+IntToStr(i),'ServerUrl',PServerInfo(Servers[i]).ServerUrl);
end;
IniFile.Free;
inifile:=TIniFile.create(ExtractFilePath(Mir3ExeName)+'Mir3.ini');
inifile.WriteString('Initial','ServerAddr','127.0.0.1');
IniFile.Free;
ServerS.Free;
Updates.Free;
NoticeMemo.Free;
CmlistMemo.Free;
end;
procedure TFrmMain.Show_Message(text:String;Icon:TsuiIconType);
begin
suiMessageDialog1.Caption:='提示信息';
suiMessageDialog1.Text:=text;
suiMessageDialog1.IconType:=Icon;
suiMessageDialog1.ShowModal;
end;
procedure TFrmMain.Com_ServerListEnter(Sender: TObject);
var
i:integer;
begin
Com_ServerList.Items.Clear;
for i := 0 to ServerS.Count-1 do
begin
if i=0 then Com_ServerList.Items.Add(Trim(PServerInfo(ServerS[i]).ServerCaption))
else Com_ServerList.Items.Add(Trim(PServerInfo(ServerS[i]).ServerName));
end;
end;
procedure TFrmMain.Com_ServerListChange(Sender: TObject);
var
SerVerIp:string;
begin
if Com_ServerList.ItemIndex<0 then exit;
WebBrowser1.Navigate(PServerInfo(Servers[Com_ServerList.ItemIndex]).ServerUrl);
WebBrowser1.Align:=alClient;
if PServerInfo(Servers[Com_ServerList.ItemIndex]).ServerIp<>'' then
SerVerIp:=PServerInfo(Servers[Com_ServerList.ItemIndex]).ServerIp
else
HostToIP(PServerInfo(Servers[Com_ServerList.ItemIndex]).ServerUrl,SerVerIp);
CSocket.Active:=False;
CSocket.Address:=SerVerIp;
CSocket.Port:=PServerInfo(Servers[Com_ServerList.ItemIndex]).ServerPort;
try
CSocket.Active:=True;
Image_Open.Visible:=True;
Image_Close.Visible:=False;
Label_ServerStat.Font.Color:=clGreen;
Label_ServerStat.Caption:='服务器状态正常。';
except
Image_Open.Visible:=False;
Image_Close.Visible:=True;
Label_ServerStat.Font.Color:=clRed;
Label_ServerStat.Caption:='服务器关闭。';
end;
CSocket.Close;
end;
procedure TFrmMain.N2Click(Sender: TObject);
begin
if Com_ServerList.ItemIndex<0 then exit;
Reg_SvrIp:=PServerInfo(ServerS[Com_ServerList.ItemIndex]).RegSvrIp;
Reg_SvrPort:=PServerInfo(ServerS[Com_ServerList.ItemIndex]).RegSvrPort;
if Trim(Reg_SvrIp)='' then
begin
if (Reg_SvrPort<>0) then HostToIP(PServerInfo(ServerS[Com_ServerList.ItemIndex]).ServerUrl,Reg_SvrIp)
else
begin
Show_Message('无法找到注册服务器!',suiWarning);
exit;
end ;
end;
Frm_AddNewId.ShowModal;
end;
procedure TFrmMain.N3Click(Sender: TObject);
begin
if Com_ServerList.ItemIndex<0 then exit;
Reg_SvrIp:=PServerInfo(ServerS[Com_ServerList.ItemIndex]).RegSvrIp;
Reg_SvrPort:=PServerInfo(ServerS[Com_ServerList.ItemIndex]).RegSvrPort;
if Trim(Reg_SvrIp)='' then
begin
if (Reg_SvrPort<>0) then HostToIP(PServerInfo(ServerS[Com_ServerList.ItemIndex]).ServerUrl,Reg_SvrIp)
else
begin
Show_Message('无法找到注册服务器!',suiWarning);
exit;
end ;
end;
Frm_FindID.ShowModal;
end;
procedure TFrmMain.N4Click(Sender: TObject);
begin
if Com_ServerList.ItemIndex<0 then exit;
Reg_SvrIp:=PServerInfo(ServerS[Com_ServerList.ItemIndex]).RegSvrIp;
Reg_SvrPort:=PServerInfo(ServerS[Com_ServerList.ItemIndex]).RegSvrPort;
if Trim(Reg_SvrIp)='' then
begin
if (Reg_SvrPort<>0) then HostToIP(PServerInfo(ServerS[Com_ServerList.ItemIndex]).ServerUrl,Reg_SvrIp)
else
begin
Show_Message('无法找到注册服务器!',suiWarning);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -