Initial commit

This commit is contained in:
2026-06-12 22:37:02 +08:00
commit 94e46587da
77 changed files with 168188 additions and 0 deletions
+283
View File
@@ -0,0 +1,283 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "LoginUnit.h"
#include "UtilityUnit.h"
#include "GlobalUnit.h"
#include <Clipbrd.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
bool g_bAutoLogin = true;
String GetValueByKey(String key, String str)
{
String ret;
int klen = key.Length(),
slen = str.Length();
int p0 = 1; //外部搜索key的游标
while((p0 = Pos(key, str, p0))!=0){
p0 += klen;
int p1 = p0; //p1为内部搜索游标
bool bOk = false;
while(p1<slen){
char nc = str[p1];
++p1;
if(nc==' ' || nc=='\t' || nc=='\n'){
continue;
}
else{
if(nc=='=') //确认赋值语句
bOk = true;
break;
}
}
p0 = p1;
if(!bOk)
continue;
int p2 = 0, len = 0; //p2为第一个引号位置
char quote = 0;
while(p1<slen){ //寻找两个引号
char nc = str[p1];
++p1;
if(!quote){ //第一个引号
if(nc==' ' || nc=='\t' || nc=='\n'){
continue;
}
else if(nc=='\'' || nc=='\"'){
p2 = p1;
quote = nc;
}
else
break;
}
else if(nc==quote){ //第二个引号
len = p1 - p2 - 1;
break;
}
}
if(p2>0 && len>0){
ret = str.SubString(p2, len);
break;
}
}
return ret;
}
//---------------------------------------------------------------------------
__fastcall TLoginForm::TLoginForm(TComponent* Owner, int iPF)
: TForm(Owner)
{
m_iPlatform = iPF;
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::OnLoginClick(TObject *Sender)
{
if(!m_memTxt->Lines->Count){
if(m_iPlatform==PF_PA)
ShowMessage("请按提示复制网页内容到编辑框");
else if(m_iPlatform==PF_AB)
ShowMessage("请按提示复制网页完整地址到编辑框");
else if(m_iPlatform==PF_DB)
ShowMessage("请按操作说明复制网页地址到编辑框");
}
else if(m_iPlatform==PF_PA && GetLoginValues(m_memTxt->Text)
|| m_iPlatform!=PF_PA && GetUrl(m_memTxt->Text)){
ModalResult = mrOk;
}
else
ShowMessage("复制的内容无效,请重新复制");
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::FormCreate(TObject *Sender)
{
if(m_iPlatform==PF_PA)
Caption = Caption + " - PA视讯(AG)";
else if(m_iPlatform==PF_AB)
Caption = Caption + " - 欧博(ABG)";
else if(m_iPlatform==PF_DB)
Caption = Caption + " - 多宝(DB)";
m_cbAuto->Checked = g_bAutoLogin;
m_imgSpec = new TPngImage();
TResourceStream * pResStream = new TResourceStream(int(HInstance),
m_iPlatform==PF_DB ? L"PNG_DBSPEC"
: m_iPlatform==PF_AB ? L"PNG_ABSPEC"
: L"PNG_PASPEC",
RT_RCDATA);
m_imgSpec->LoadFromStream(pResStream);
delete pResStream;
m_imgBack->Picture->Bitmap->Assign(m_imgSpec);
m_memTxt->Lines->Add(m_iPlatform==PF_PA ? "请将网页内容复制到这里"
: m_iPlatform==PF_DB ? "按操作说明打开调试控制台,复制粘贴以下代码并回车"
: "请将网页完整地址复制到这里" );
if(m_iPlatform==PF_DB){
m_memTxt->Lines->Add(" history.replaceState(0,'',location.href+'&deviceId='+localStorage.getItem('fixedDeviceId'))");
m_memTxt->Lines->Add("然后复制网页完整地址到这里");
}
AddClipboardFormatListener(Handle);
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::FormClose(TObject *Sender, TCloseAction &Action)
{
RemoveClipboardFormatListener(Handle);
delete m_imgSpec;
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::WMClipboardUpdate(TMessage &msg)
{
Sleep(100); //处理剪贴板延迟呈现
if(ModalResult!=mrNone)
return;
if( !OpenClipboard( Handle ) ){
OutputDebugString(L"OpenClipboard faild!");
return;
}
String txt;
if( IsClipboardFormatAvailable(CF_UNICODETEXT) ){
HANDLE h = GetClipboardData(CF_UNICODETEXT);//获取剪切板数据
if(h){
txt = static_cast<LPCWSTR>(GlobalLock(h));
GlobalUnlock(h);
}
}
else if( IsClipboardFormatAvailable(CF_TEXT) ){
HANDLE h = GetClipboardData(CF_TEXT);//获取剪切板数据
if(h){
txt = static_cast<char*>(GlobalLock(h));
GlobalUnlock(h);
}
}
if(txt.Length()>0 && ( m_iPlatform==PF_PA && GetLoginValues(txt)
|| m_iPlatform!=PF_PA && GetUrl(txt))){
SetWindowPos(Application->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
SetWindowPos(Application->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
ModalResult = mrOk; // mrCancel;//
}
CloseClipboard();//关闭剪贴板
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::AutoClick(TObject *Sender)
{
g_bAutoLogin = m_cbAuto->Checked;
}
//---------------------------------------------------------------------------
bool __fastcall TLoginForm::GetLoginValues(String in)
{
static String keys[] = {"pid", "tempLangInt", "myGametype", "username", "myDm", "myDofoward"};
for(int i=0; i<6; i++){
m_values[i] = GetValueByKey(keys[i], in);
if(m_values[i].Length()==0)
return false;
}
return true;
}
//---------------------------------------------------------------------------
bool __fastcall TLoginForm::GetUrl(String in)
{
int p0 = in.Pos("https://");
if(!p0)
return false;
if(m_iPlatform==PF_AB){
int p1 = Pos("\/?", in, p0+8);
if(!p1)
return false;
m_url = in.SubString(p0, p1+2 - p0);
if(!(p0 = Pos("sessionId=", in, p1+2)) && !(p0 = Pos("sessionid=", in, p1+2)))
return false;
if(!(p1 = Pos("&", in, p0+10)) && !(p1 = Pos("#", in, p0+10)))
p1 = in.Length()+1;
if(p1-p0 < 50)
return false;
m_url += in.SubString(p0, p1-p0);
return true;
}
else if(m_iPlatform==PF_DB){
int p1 = Pos("egret\/", in, p0+8);
if(!p1)
return false;
m_url = in.SubString(p0, p1+6 - p0) + "multi"; //"hall"; //
if(!(p0 = Pos("?params=", in, p1+6)))
return false;
if(!(p1 = Pos("&signature=", in, p0+20)) || !(p1 = Pos("&ttl=", in, p0+20)))
return false;
int p2 = Pos("&deviceId=", in, p1+16);
if(!p2)
return false;
if(!(p1 = Pos("&", in, p2+10)))
p1 = in.Length()+1;
m_values[0] = in.SubString(p2+10, p1 - p2 - 10);
if(p2-p0 < 1700)
return false;
m_url += in.SubString(p0, p2-p0);
return true;
}
return false;
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::OnSpecClick(TObject *Sender)
{
PostMessage(Application->MainFormHandle, UM_OPENMAUAL, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::SpecMouseEnter(TObject *Sender)
{
m_lblSpec->Font->Color = clHighlight;
}
//---------------------------------------------------------------------------
void __fastcall TLoginForm::SpecMouseLeave(TObject *Sender)
{
m_lblSpec->Font->Color = clBlue;
}
//---------------------------------------------------------------------------