Browse Source

Updated UI, new icons, 64-bit version

master
Mikanoshi 8 years ago
parent
commit
b739aefe21
  1. 5
      .gitattributes
  2. 91
      CallExec.pas
  3. BIN
      Icons/ICON_1.ico
  4. BIN
      Icons/ICON_2.ico
  5. BIN
      Icons/ICON_3.ico
  6. BIN
      Icons/ICON_4.ico
  7. BIN
      Icons/ICON_5.ico
  8. 5
      Icons/icons.rc
  9. BIN
      Icons/rnq.bmp
  10. BIN
      Icons/rnq.ico
  11. 606
      InvisCheck.dpr
  12. 226
      InvisCheck.dproj
  13. 108
      InvisCheck.dproj.2007
  14. BIN
      InvisCheck.res
  15. 4
      NoRTTI.inc
  16. 46
      README.html
  17. BIN
      icons.res
  18. 6
      plugin.pas
  19. 154
      pluginutil.pas
  20. 166
      sform.dfm
  21. 573
      sform.pas

5
.gitattributes vendored

@ -0,0 +1,5 @@
*.exe binary
*.zip binary
*.rar binary
*.png binary
*.jpg binary

91
CallExec.pas

@ -1,11 +1,13 @@
unit CallExec;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
interface
uses
plugin,
pluginutil,
Types,
Graphics,
Windows;
type
@ -22,10 +24,12 @@ uses
var
callback:TpluginFun; // &RQ callback function
plugsendflag: boolean = false;
outBuffer: RawByteString;
function str2comm(s:RawByteString):pointer;
function callStr(s:RawByteString):pointer;
procedure callStr0(s:RawByteString);
function callStr2(s:RawByteString):RawByteString;
{####################################}
// --=== Commands ===--
@ -102,21 +106,42 @@ procedure RQ__ParseListRemoveString(data:Pointer; var list:byte; var uins:TInteg
implementation
uses
SysUtils;
// convert a string to a "plugin communication"
function str2comm(s:RawByteString):pointer;
var outBuffer:RawByteString;
function str2comm(s: RawByteString): pointer;
begin
outBuffer:=_int(length(s))+s;
result:=@outBuffer[1];
outBuffer := _int(length(s))+s;
result := @outBuffer[1];
end; // str2comm
// execute callback on a string instead of pointer
function callStr(s:RawByteString):pointer;
function callStr(s: RawByteString): pointer;
begin
result:=callback(str2comm( s ))
result := callback(str2comm(s))
end;
procedure callStr0(s:RawByteString);
begin
callback(str2comm(s))
end;
function callStr2(s:RawByteString):RawByteString;
var
res : RawByteString;
p : Pointer;
i : Integer;
begin
p := callback(str2comm( s ));
if (p <> NIL) then
begin
i := _int_at(p);
if (i >0) then
res := _istring_at(p, 4)
else
res := '';
end
else
res := '';
result:= res;
end;
{##############################################################################}
@ -126,18 +151,17 @@ procedure RQ_SendMsg(uin, Flag:integer; msg:AnsiString);
Single =0
Multi =1 }
begin
PlugSendFlag := false;
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_MSG)+_int(uin)+_int(Flag)+_istring(msg));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_MSG)+_int(uin)+_int(Flag)+_istring(msg));
end;
procedure RQ_SendContacts(uin, Flag:integer; contacts:TIntegerDynArray);
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_CONTACTS)+_int(uin)+_int(Flag)+_intlist(contacts));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_CONTACTS)+_int(uin)+_int(Flag)+_intlist(contacts));
end;
procedure RQ_SendAddedYou(uin:integer);
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_ADDEDYOU)+_int(uin));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_ADDEDYOU)+_int(uin));
end;
function RQ_AddToList(List:integer; uins:TIntegerDynArray):integer;
@ -156,38 +180,38 @@ procedure RQ_SetStatus(Status:byte);
{ PS_ONLINE, PS_OCCUPIED, PS_DND
PS_NA, PS_AWAY, PS_F4C, PS_OFFLINE, PS_UNKNOWN }
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SET_STATUS)+AnsiChar(Status));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SET_STATUS)+AnsiChar(Status));
end;
procedure RQ_SetVisibility(Visibility:byte);
{ PV_ALL, PV_NORMAL, PV_PRIVACY, PV_INVISIBLE }
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SET_VISIBILITY)+AnsiChar(Visibility));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SET_VISIBILITY)+AnsiChar(Visibility));
end;
procedure RQ_Quit;
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_QUIT));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_QUIT));
end;
procedure RQ_Connect;
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_CONNECT));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_CONNECT));
end;
procedure RQ_Disconnect;
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_DISCONNECT));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_DISCONNECT));
end;
procedure RQ_SetAutoMessage(AutoMessage:AnsiString);
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SET_AUTOMSG)+_istring(AutoMessage));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SET_AUTOMSG)+_istring(AutoMessage));
end;
procedure RQ_SendAutoMessageRequest(uin:integer);
begin
callStr(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_AUTOMSG_REQ)+_int(uin));
callStr0(AnsiChar(PM_CMD)+AnsiChar(PC_SEND_AUTOMSG_REQ)+_int(uin));
end;
{##############################################################################}
@ -202,13 +226,20 @@ end;
function RQ_GetList(List:integer):TIntegerDynArray;
{
PL_ROASTER, PL_VISIBLELIST, PL_INVISIBLELIST, PL_TEMPVISIBLELIST,
PL_IGNORELIST, PL_DB, PL_NIL.
List
PL_ROASTER =1;
PL_VISIBLELIST =2;
PL_INVISIBLELIST =3;
PL_TEMPVISIBLELIST =4;
PL_IGNORELIST =5;
PL_DB =6;
PL_NIL =7;
}
var
data:Pointer;
data: Pointer;
begin
if _byte_at(data, 4) = PM_DATA then try Result:=_intlist_at(data,5) except Result := nil end else Result := nil;
data := CallStr(AnsiChar(PM_GET) + AnsiChar(PG_LIST) + AnsiChar(List));
Result := _intlist_at(data, 5);
end;
function RQ_GetContactInfo(uin:integer):ContactInfo;
@ -383,24 +414,26 @@ function RQ_CreateChatButton(buttonProc:Pointer; buttonIcon: hIcon;
buttonHint:AnsiString; PicName : AnsiString = ''):integer;
var
data:Pointer;
res:integer;
begin//
data:=callStr(AnsiChar(PM_CMD)+ AnsiChar(PC_ADDBUTTON)+
_int(integer(buttonProc))+_int(integer(buttonIcon))+
_istring(buttonHint)+_istring(PicName));
Result:=_int_at(data, 4);
res:=_int_at(data, 4);
Result:=res;
end;
procedure RQ_ChangeChatButton(buttonAddr:Integer; buttonIcon: hIcon;
buttonHint:AnsiString; PicName : AnsiString = '');
begin//
callStr(AnsiChar(PM_CMD)+ AnsiChar(PC_MODIFY_BUTTON)
callStr0(AnsiChar(PM_CMD)+ AnsiChar(PC_MODIFY_BUTTON)
+_int(integer(buttonAddr))+_int(integer(buttonIcon))
+_istring(buttonHint)+_istring(PicName));
end;
procedure RQ_DeleteChatButton(var buttonAddr:Integer);
begin//
callStr(AnsiChar(PM_CMD)+ AnsiChar(PC_DELBUTTON)+_int(integer(buttonAddr)));
callStr0(AnsiChar(PM_CMD)+ AnsiChar(PC_DELBUTTON)+_int(integer(buttonAddr)));
buttonAddr:=0;
end;

BIN
Icons/ICON_1.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Icons/ICON_2.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Icons/ICON_3.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Icons/ICON_4.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Icons/ICON_5.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

5
Icons/icons.rc

@ -0,0 +1,5 @@
ICON_1 ICON "ICON_1.ico"
ICON_2 ICON "ICON_2.ico"
ICON_3 ICON "ICON_3.ico"
ICON_4 ICON "ICON_4.ico"
ICON_5 ICON "ICON_5.ico"

BIN
Icons/rnq.bmp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Icons/rnq.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

606
InvisCheck.dpr

@ -1,32 +1,29 @@
library RnQEye;
library InvisCheck;
uses
Types,
Classes,
Windows,
Messages,
plugin,
pluginutil,
CallExec,
Dialogs,
SysUtils,
Graphics,
MMSystem,
IdMultipartFormData,
IdExceptionCore,
idHTTP,
MyOver,
sform in 'sform.pas' {SetForm};
{$SETPEFLAGS IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED}
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
{$I NoRTTI.inc}
{$R InvisCheck.res}
{$R 'icons.res' 'Icons\icons.rc'}
type
TPOSTThread = class(TThread)
protected
procedure Execute; override;
end;
TPOSTThread = class(TThread)
protected
procedure Execute; override;
end;
var
userPath, andrqPath: AnsiString;
@ -35,321 +32,348 @@ var
POST: TThread;
action: boolean;
{$R icons.res}
// ==========================================================
function EngToRus(statuseng: string): string;
begin
if statuseng = 'Online' then result:='Â ñåòè';
if statuseng = 'Occupied' then result:='Çàíÿò';
if statuseng = 'DND' then result:='Íå áåñïîêîèòü';
if statuseng = 'N/A' then result:='Íåäîñòóïåí';
if statuseng = 'Away' then result:='Óø¸ë';
if statuseng = '' then result:='Ñâîáîäåí';
if statuseng = 'Offline' then result:='Îòêëþ÷åí';
if statuseng = 'Unknown' then result:='Íåèçâåñòåí';
if statuseng = 'Invisible' then result:='Íåâèäèìûé';
// if statuseng = '' then result:='Îøèáêà! Ïîâòîðèòå çàïðîñ';
if statuseng = 'Online' then
result := 'Â ñåòè';
if statuseng = 'Occupied' then
result := 'Çàíÿò';
if statuseng = 'DND' then
result := 'Íå áåñïîêîèòü';
if statuseng = 'N/A' then
result := 'Íåäîñòóïåí';
if statuseng = 'Away' then
result := 'Óø¸ë';
if statuseng = '' then
result := 'Ñâîáîäåí';
if statuseng = 'Offline' then
result := 'Îòêëþ÷åí';
if statuseng = 'Unknown' then
result := 'Íåèçâåñòåí';
if statuseng = 'Invisible' then
result := 'Íåâèäèìûé';
// if statuseng = '' then result:='Îøèáêà! Ïîâòîðèòå çàïðîñ';
end;
procedure OnButtonClickEx(uintocheck: integer);
var i: integer;
finish, found: boolean;
procedure OnButtonClickEx(uintocheck: Integer);
var i: Integer;
finish, found: boolean;
procedure ExceptionProxy(ExcpMsg: string);
begin
if (SetForm.AvoidBan.checked = true) and
(SetForm.UseProxy.checked = true)
and (SetForm.ListBox1.Items.Count >= 2) then
begin
if action = true then
if (GlobalProxy = StartProxy - 1) or ((GlobalProxy = 0) and (StartProxy = 0)) then
if (SetForm.AvoidBan.checked = true) and (SetForm.UseProxy.checked = true) and (SetForm.ListBox1.Items.Count >= 2) then
begin
ifPOST := false;
showmessage('Íå óäàëîñü ïîäêëþ÷èòüñÿ íè ÷åðåç îäèí èç óêàçàííûõ ïðîêñè');
POST.Free;
exit;
end;
SetForm.ExecAntiBan;
action := true;
OnButtonClickEx(uintocheck);
end
if action = true then
if (GlobalProxy = StartProxy - 1) or ((GlobalProxy = 0) and (StartProxy = 0)) then
begin
ifPOST := false;
MessageBox(0, 'Íå óäàëîñü ïîäêëþ÷èòüñÿ íè ÷åðåç îäèí èç óêàçàííûõ ïðîêñè', namepl, 0);
POST.Free;
exit;
end;
SetForm.ExecAntiBan;
action := true;
OnButtonClickEx(uintocheck);
end
else
begin
ifPOST := false;
showmessage('Îøèáêà îñíîâíîãî ïðîêñè:'+#13+ExcpMsg+#13#13+'Ñïèñîê ïåðåáîðà ïóñò èëè ïåðåáîð ïðîêñè âûêëþ÷åí');
end;
begin
ifPOST := false;
MessageBox(0, PWideChar('Îøèáêà îñíîâíîãî ïðîêñè:' + #13 + ExcpMsg + #13#13 +
'Ñïèñîê ïåðåáîðà ïóñò èëè ïåðåáîð ïðîêñè âûêëþ÷åí'), namepl, 0);
end;
end;
begin
if uintocheck = -1 then uintocheck := RQ_GetChatUIN;
if uintocheck <= 0 then exit;
try
if SetForm.TurnedOn.Checked = false then
begin
SetForm.Show;
exit;
end;
finish := false;
if GlobalProxy > SetForm.ListBox1.Items.Count -1 then GlobalProxy := 0;
if action = false then StartProxy := GlobalProxy;
if SetForm.UseProxy.Checked = true then
begin
if SetForm.ListBox1.Items.Count = 0 then
begin
ReadTMTnotice := false;
ifPOST := false;
showmessage('Âêëþ÷åíî èñïîëüçîâàíèå ïðîêñè, íî ñàì ïðîêñè (èëè èõ ñïèñîê) íå çàäàí');
// POST.Free;
exit;
end
else
with SetForm do
if (SetForm.AvoidBan.Checked = true) then
begin
idH.ProxyParams.ProxyServer := ExtractWord(1, ListBox1.items[GlobalProxy], delimq);
idH.ProxyParams.ProxyPort := StrToInt(ExtractWord(2, ListBox1.items[GlobalProxy], delimq));
end
else
begin
idH.ProxyParams.ProxyServer := ExtractWord(1, ListBox1.items[0], delimq);
idH.ProxyParams.ProxyPort := StrToInt(ExtractWord(2, ListBox1.items[0], delimq));
end;
end;
mpf := TIdMultiPartFormDataStream.Create;
if SetForm.CheckService.ItemIndex = 0 then
begin
mpf.AddFormField(SetForm.ikey.text, '1');
if SetForm.YouAreAdded.checked = true then
mpf.AddFormField('youwereadded', 'on');
end;
mpf.AddFormField('uin', IntToStr(uintocheck));
repeat
ifPOST := true;
try
if SetForm.CheckService.ItemIndex = 0 then
gotcha := idH.post('http://kanicq.ru/invisible/pda/?method=2', mpf)
else
gotcha := idH.post('http://inviznet.ru/inviz_check.php', mpf);
except end;
if pos('Your have exceeded', gotcha) > 0 then
begin
if (SetForm.AvoidBan.checked = true) and (SetForm.AvoidBan.Enabled = true) then
begin
SetForm.ExecAntiBan;
continue;
end
else
begin
mpf.free;
ShowMessage('Îòâåò ñ ñàéòà: '+
copy(gotcha, pos('Your have exceeded', gotcha),
pos('<form', gotcha) - pos('Your have exceeded', gotcha)));
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
exit;
end;
end;
if pos('The service is currently overflooded', gotcha) > 0 then
begin
mpf.free;
ShowMessage('Îòâåò ñ ñàéòà: '+
copy(gotcha, pos('The service is currently overflooded', gotcha),
pos('<form', gotcha) - pos('The service is currently overflooded', gotcha)));
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
exit;
end;
finish := true;
until finish = true;
if SetForm.CheckService.ItemIndex = 0 then
begin
gotcha := copy(gotcha, pos('Result:', gotcha), 200);
num := IntToStr(uintocheck);
status := EngToRus(copy(gotcha, pos('"> ',gotcha)+3, pos('</b',gotcha)-pos('"> ',gotcha)-3));
end
else
if SetForm.CheckService.ItemIndex = 1 then
begin
gotcha := copy(gotcha, pos('red !important;"><center>', gotcha), 100);
num := IntToStr(uintocheck);
status := (copy(gotcha, pos(';"><center>',gotcha)+12, pos('</center>',gotcha)-pos(';"><center>',gotcha)-12));
if pos('íåâèäèìîñò', status) > 0 then status := 'Íåâèäèìûé'
else if pos('Â ñåòè', status) > 0 then status := 'Â ñåòè'
else if pos('Íå â ñåòè', status) > 0 then status := 'Îòêëþ÷åí';
end;
gdt := FormatDateTime('hh:nn:ss dd.mm.yyyy', now);
found := false;
for i := 2 to glst.Count-1 do
if pos(num, glst[i]) = 1 then
begin
glst[i] := num+'|'+status+'|'+gdt;
found := true;
end;
if (StrToInt(num) > 0) and (found = false) then glst.Add(num+'|'+status+'|'+gdt);
glst.SaveToFile(string(RQ_GetUserPath + stname));
mpf.Free;
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
except
on E: EIdConnectTimeout do ExceptionProxy(E.Message);
on E: EIdReadTimeout do
begin
ReadTMTnotice := true;
ExceptionProxy(E.Message);
end;
on E: Exception do
begin
if (pos('# 10061', E.Message) > 0) or
(pos('# 10065', E.Message) > 0) or
(pos('# 10054', E.Message) > 0) or
(pos('timeout', E.Message) > 0) then ExceptionProxy(E.Message)
else showmessage(E.Message);
end;
if uintocheck = -1 then
uintocheck := RQ_GetChatUIN;
if uintocheck <= 0 then
exit;
try
if SetForm.TurnedOn.checked = false then
begin
SetForm.Show;
exit;
end;
end;
finish := false;
if GlobalProxy > SetForm.ListBox1.Items.Count - 1 then
GlobalProxy := 0;
if action = false then
StartProxy := GlobalProxy;
if SetForm.UseProxy.checked = true then
begin
if SetForm.ListBox1.Items.Count = 0 then
begin
ReadTMTnotice := false;
ifPOST := false;
MessageBox(0, PWideChar('Âêëþ÷åíî èñïîëüçîâàíèå ïðîêñè, íî ñàì ïðîêñè (èëè èõ ñïèñîê) íå çàäàí'), namepl, 0);
// POST.Free;
exit;
end
else
with SetForm do
if (SetForm.AvoidBan.checked = true) then
begin
idH.ProxyParams.ProxyServer := ExtractWord(1, ListBox1.Items[GlobalProxy], delimq);
idH.ProxyParams.ProxyPort := StrToInt(ExtractWord(2, ListBox1.Items[GlobalProxy], delimq));
end
else
begin
idH.ProxyParams.ProxyServer := ExtractWord(1, ListBox1.Items[0], delimq);
idH.ProxyParams.ProxyPort := StrToInt(ExtractWord(2, ListBox1.Items[0], delimq));
end;
end;
mpf := TIdMultiPartFormDataStream.Create;
if SetForm.CheckService.ItemIndex = 0 then
begin
mpf.AddFormField(SetForm.ikey.text, '1');
if SetForm.YouAreAdded.checked = true then
mpf.AddFormField('youwereadded', 'on');
end;
mpf.AddFormField('uin', IntToStr(uintocheck));
repeat
ifPOST := true;
try
if SetForm.CheckService.ItemIndex = 0 then
gotcha := idH.POST('http://kanicq.ru/invisible/pda/?method=2', mpf)
else
gotcha := idH.POST('http://inviznet.ru/inviz_check.php', mpf);
except
mpf.Free;
MessageBox(0, PWideChar('Âðåìÿ îæèäàíèÿ îòâåòà èñòåêëî.'#13#10'Ìîæíî óâåëè÷èòü òàéìàóò ÷òåíèÿ, åñëè îí ìàë.'), namepl, 0);
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
exit;
end;
if pos('Your have exceeded', gotcha) > 0 then
begin
if (SetForm.AvoidBan.checked = true) and (SetForm.AvoidBan.Enabled = true) then
begin
SetForm.ExecAntiBan;
continue;
end
else
begin
mpf.Free;
MessageBox(0, PWideChar('Îòâåò ñ ñàéòà: ' + copy(gotcha, pos('Your have exceeded', gotcha),
pos('<form', gotcha) - pos('Your have exceeded', gotcha))), namepl, 0);
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
exit;
end;
end;
if pos('The service is currently overflooded', gotcha) > 0 then
begin
mpf.Free;
MessageBox(0, PWideChar('Îòâåò ñ ñàéòà: ' + copy(gotcha, pos('The service is currently overflooded', gotcha),
pos('<form', gotcha) - pos('The service is currently overflooded', gotcha))), namepl, 0);
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
exit;
end;
finish := true;
until finish = true;
if SetForm.CheckService.ItemIndex = 0 then
begin
gotcha := copy(gotcha, pos('Result:', gotcha), 200);
num := IntToStr(uintocheck);
status := EngToRus(copy(gotcha, pos('"> ', gotcha) + 3, pos('</b', gotcha) - pos('"> ', gotcha) - 3));
end
else if SetForm.CheckService.ItemIndex = 1 then
begin
gotcha := copy(gotcha, pos('red !important;"><center>', gotcha), 100);
// messagebox(0, PWideChar(gotcha), '', 0);
num := IntToStr(uintocheck);
status := (copy(gotcha, pos(';"><center>', gotcha) + 12, pos('</center>', gotcha) - pos(';"><center>', gotcha) - 12));
// messagebox(0, PWideChar(status), '', 0);
if pos('íåâèäèìîñò', status) > 0 then
status := 'Íåâèäèìûé'
else if pos('Â ñåòè', status) > 0 then
status := 'Â ñåòè'
else if pos('Íå â ñåòè', status) > 0 then
status := 'Îòêëþ÷åí';
end;
gdt := FormatDateTime('hh:nn:ss dd.mm.yyyy', now);
found := false;
for i := 2 to glst.Count - 1 do
if pos(num, glst[i]) = 1 then
begin
glst[i] := num + '|' + status + '|' + gdt;
found := true;
end;
if (StrToInt(num) > 0) and (found = false) then
glst.Add(num + '|' + status + '|' + gdt);
glst.SaveToFile(string(RQ_GetUserPath + stname));
mpf.Free;
ReadTMTnotice := false;
ifPOST := false;
POST.Free;
except
on E: EIdConnectTimeout do
ExceptionProxy(E.Message);
on E: EIdReadTimeout do
begin
ReadTMTnotice := true;
ExceptionProxy(E.Message);
end;
on E: Exception do
begin
if (pos('# 10061', E.Message) > 0) or (pos('# 10065', E.Message) > 0) or (pos('# 10054', E.Message) > 0) or
(pos('timeout', E.Message) > 0) then
ExceptionProxy(E.Message)
else
MessageBox(0, PWideChar(E.Message), namepl, 0);
end;
end;
end;
procedure TPOSTThread.Execute;
begin
action := false;
ReadTMTnotice := false;
OnButtonClickEx(-1);
action := false;
ReadTMTnotice := false;
OnButtonClickEx(-1);
end;
procedure OnButtonClick(iButton: integer);
var
State : TKeyboardState;
procedure OnButtonClick(iButton: Integer);
// var State: TKeyboardState;
begin
case iButton of
0: begin
GetKeyboardState(State);
if (State[vk_Control] and 128) <> 0 then
RQ_SendMsg(765000, 0, AnsiString(IntToStr(RQ_GetChatUIN)))
else
POST := TPOSTThread.Create(False);
end;
1: SetForm.Show;
2: smsg(VersionText);
end;
case iButton of
0:
begin
// GetKeyboardState(State);
// if (State[vk_Control] and 128) <> 0 then
// RQ_SendMsg(765000, 0, AnsiString(IntToStr(RQ_GetChatUIN)))
// else
POST := TPOSTThread.Create(false);
end;
1:
SetForm.Show;
2:
MessageBox(0, VersionText, namepl, 0);
end;
end;
function pluginFun(data:pointer):pointer; stdcall;
function pluginFun(data: pointer): pointer; stdcall;
begin
result:=NIL;
if (data=NIL) or (_int_at(data)=0) then exit;
case _byte_at(data,4) of
PM_EVENT:
case _byte_at(data,5) of
// PE_PROPERTIES_CHANGED: smsg(its(_int_at(data,6)){ + ' | ' + _istring_at(data,7)});
PE_INITIALIZE:
begin
RQ__ParseInitString(data, callback, vapiVersion, andrqPath, userPath, currentUIN);
if RQ_GetRnQVersion < 1074 then
begin
MessageBox(0, PChar('Èçâèíèòå, íî ýòîò ïëàãèí íå ìîæåò ðàáîòàòü ñ äàííîé âåðñèåé RnQ.'+
#13'Ïîæàëóéñòà, îáíîâèòå ïðîãðàììó è ñíèìèòå ãàëêó ñ ïëàãèíà InvisCheck.dll '), PChar('InvisChecker'), MB_ICONHAND);
Exit;
result := NIL;
if (data = NIL) or (_int_at(data) = 0) then
exit;
case _byte_at(data, 4) of
PM_EVENT:
case _byte_at(data, 5) of
// PE_PROPERTIES_CHANGED: smsg(its(_int_at(data,6)){ + ' | ' + _istring_at(data,7)});
PE_INITIALIZE:
begin
RQ__ParseInitString(data, callback, vApiVersion, andrqPath, userPath, currentUIN);
if RQ_GetRnQVersion < 1074 then
begin
MessageBox(0, PChar('Èçâèíèòå, íî ýòîò ïëàãèí íå ìîæåò ðàáîòàòü ñ äàííîé âåðñèåé RnQ.' +
#13'Ïîæàëóéñòà, îáíîâèòå ïðîãðàììó è ñíèìèòå ãàëêó ñ ïëàãèíà InvisCheck.dll '), PChar(namepl), MB_ICONHAND);
exit;
end;
IdH := TIdHTTP.Create(nil);
IdH.ReadTimeout := 3000;
IdH.AllowCookies := true;
IdH.HandleRedirects := true;
IdH.MaxAuthRetries := 3;
IdH.ProxyParams.BasicAuthentication := false;
IdH.Request.Accept := 'text/html, */*';
IdH.Request.BasicAuthentication := false;
idH := TIdHTTP.Create(nil);
idH.AllowCookies := true;
idH.HandleRedirects := true;
idH.MaxAuthRetries := 3;
idH.ProxyParams.BasicAuthentication := false;
idH.Request.Accept := 'text/html, */*';
idH.Request.BasicAuthentication := false;
// data := callStr(ansichar(PM_GET) + ansichar(PG_WINDOW) + ansichar(PW_CHAT));
SetForm := TSetForm.Create(nil);
idH.ReadTimeout := SetForm.ReadTMT.value;
glst := TStringList.Create;
if fileexists(string(RQ_GetUserPath + stname)) then
begin
glst.LoadFromFile(string(RQ_GetUserPath + stname));
if glst.Count > 0 then
try
if pos('|', glst[0]) = 0 then
glst[0] := glst[0] + '|';
if SetForm.ExtractWord(1, glst[0], delims) <> '' then
SetForm.YouAreAdded.checked := StrToBool(SetForm.ExtractWord(1, glst[0], delims));
if SetForm.ExtractWord(2, glst[0], delims) <> '' then
SetForm.ikey.text := SetForm.ExtractWord(2, glst[0], delims);
if SetForm.ExtractWord(3, glst[0], delims) <> '' then
SetForm.CheckService.ItemIndex := StrToInt(SetForm.ExtractWord(3, glst[0], delims));
except
end;
if glst.Count > 1 then
SetForm.TurnedOn.checked := StrToBool(glst[1]);
end
else
begin
glst.Add('0');
glst.Add('1');
end;
//data := callStr(ansichar(PM_GET) + ansichar(PG_WINDOW) + ansichar(PW_CHAT));
SetForm := TSetForm.Create(nil);
glst := TStringList.Create;
hico1 := TIcon.Create;
hico2 := TIcon.Create;
hico3 := TIcon.Create;
hico4 := TIcon.Create;
hico5 := TIcon.Create;
hico1.Handle := LoadIcon(HInstance, 'ICON_1');
hico2.Handle := LoadIcon(HInstance, 'ICON_2');
hico3.Handle := LoadIcon(HInstance, 'ICON_3');
hico4.Handle := LoadIcon(HInstance, 'ICON_4');
hico5.Handle := LoadIcon(HInstance, 'ICON_5');
ba := RQ_CreateChatButton(@OnButtonClick, hico2.Handle, namepl);
SetForm.StartTimer;
result := str2comm(ansichar(PM_DATA) + _istring(namepl) + _int(APIversion));
end;
if fileexists(string(RQ_GetUserPath + stname)) then
PE_PREFERENCES:
begin
glst.LoadFromFile(string(RQ_GetUserPath + stname));
if glst.count > 0 then
try
if pos('|', glst[0]) = 0 then glst[0] := glst[0] + '|';
if SetForm.ExtractWord(1, glst[0], delims) <> '' then
SetForm.YouAreAdded.Checked := StrToBool(SetForm.ExtractWord(1, glst[0], delims));
if SetForm.ExtractWord(2, glst[0], delims) <> '' then
SetForm.ikey.Text := SetForm.ExtractWord(2, glst[0], delims);
if SetForm.ExtractWord(3, glst[0], delims) <> '' then
SetForm.CheckService.ItemIndex := StrToInt(SetForm.ExtractWord(3, glst[0], delims));
except end;
SetForm.Show;
end;
if glst.count > 1 then SetForm.TurnedOn.Checked := StrToBool(glst[1]);
end else
PE_FINALIZE:
begin
glst.Add('0');
glst.Add('1');
idH.Free;
if MegaTimer <> 0 then
TimeKillEvent(MegaTimer);
if ba <> 0 then
RQ_DeleteChatButton(ba);
if SetForm <> nil then
SetForm.Free;
glst.Free;
hico1.Free;
hico2.Free;
hico3.Free;
hico4.Free;
hico5.Free;
end;
hico1 := TIcon.Create;
hico2 := TIcon.Create;
hico3 := TIcon.Create;
hico4 := TIcon.Create;
hico5 := TIcon.Create;
hico1.Handle := LoadIcon(HInstance, 'ICON_1');
hico2.Handle := LoadIcon(HInstance, 'ICON_2');
hico3.Handle := LoadIcon(HInstance, 'ICON_3');
hico4.Handle := LoadIcon(HInstance, 'ICON_4');
hico5.Handle := LoadIcon(HInstance, 'ICON_5');
ba := RQ_CreateChatButton(@OnButtonClick, hico2.Handle, 'InvisChecker');
SetForm.StartTimer;
result:=str2comm(ansichar(PM_DATA)+_istring(namepl)+_int(APIversion));
end;
PE_PREFERENCES:
begin
SetForm.Show;
end;
PE_FINALIZE:
begin
IdH.Free;
if MegaTimer <> 0 then TimeKillEvent(MegaTimer);
if ba <> 0 then RQ_DeleteChatButton(ba);
if SetForm <> nil then SetForm.Free;
glst.free;
hico1.free;
hico2.free;
hico3.free;
hico4.free;
hico5.free;
end;
end;//case
end;//case
end; // case
end; // case
end; // pluginFun
exports
pluginFun;
end.

226
InvisCheck.dproj

@ -4,23 +4,23 @@
<MainSource>InvisCheck.dpr</MainSource>
<Config Condition="'$(Config)'==''">Release</Config>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<ProjectVersion>14.4</ProjectVersion>
<ProjectVersion>15.4</ProjectVersion>
<Base>True</Base>
<AppType>Library</AppType>
<FrameworkType>None</FrameworkType>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<Platform Condition="'$(Platform)'==''">Win64</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSX32' and '$(Base)'=='true') or '$(Base_OSX32)'!=''">
<Base_OSX32>true</Base_OSX32>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
@ -35,24 +35,34 @@
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
<Cfg_1_Win64>true</Cfg_1_Win64>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSX32' and '$(Cfg_2)'=='true') or '$(Cfg_2_OSX32)'!=''">
<Cfg_2_OSX32>true</Cfg_2_OSX32>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
<Cfg_2_Win64>true</Cfg_2_Win64>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<Manifest_File>None</Manifest_File>
<DCC_IMPLICIT_STRING_CAST_LOSS>false</DCC_IMPLICIT_STRING_CAST_LOSS>
<DCC_IMPLICIT_STRING_CAST>false</DCC_IMPLICIT_STRING_CAST>
<SanitizedProjectName>InvisCheck</SanitizedProjectName>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Winapi;Vcl;Vcl.Samples;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1049</VerInfo_Locale>
@ -64,17 +74,24 @@
<DCC_UnitSearchPath>$(DELPHI)\Lib\Debug;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_UsePackage>vcl;rtl;vclx;indy;dbrtl;vcldb;bdertl;vclie;visualclx;vclshlctrls;dclOfficeXP;tdbf;vclactnband;adortl;vcldbx;visualdbclx;dsnap;dsnapcon;dbexpress;dss;inet;xmlrtl;inetdbbde;inetdbxpress;webdsnap;VclSmp;soaprtl;dbxcds;inetdb;websnap;ibxpress;qrpt;FlatStyle_D5;IndyCore;IndySystem;IndyProtocols;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSX32)'!=''">
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_ExeOutput>$(Platform)</DCC_ExeOutput>
<PostBuildEvent><![CDATA[copy $(Platform)\InvisCheck.dll C:\SpeedProgs\Inet\Chat\RnQ\plugins\_My\CheckInvis\TestRnQ\plugins\InvisCheck.dll
$(PostBuildEvent)]]></PostBuildEvent>
<DCC_DcuOutput>$(Platform)</DCC_DcuOutput>
<Debugger_HostApplication>C:\SpeedProgs\Inet\Chat\RnQ\R&amp;Q.exe</Debugger_HostApplication>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<Debugger_CWD>C:\SpeedProgs\Inet\Chat\RnQ\plugins</Debugger_CWD>
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<PostBuildEvent><![CDATA[copy $(Platform)\InvisCheck.dll C:\SpeedProgs\Inet\Chat\RnQ\plugins\_My\CheckInvis\TestRnQ\plugins\InvisCheck64.dll
$(PostBuildEvent)]]></PostBuildEvent>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_DcuOutput>$(Platform)</DCC_DcuOutput>
<DCC_ExeOutput>$(Platform)</DCC_ExeOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=0.5.1.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=0.5.1.0;Comments=</VerInfo_Keys>
<VerInfo_MajorVer>0</VerInfo_MajorVer>
@ -82,33 +99,39 @@
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_DLL>true</VerInfo_DLL>
<VerInfo_Release>1</VerInfo_Release>
<Manifest_File>None</Manifest_File>
<DCC_MapFile>3</DCC_MapFile>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<VerInfo_Release>0</VerInfo_Release>
<VerInfo_Keys>CompanyName=;FileDescription=R&amp;Q plugin for getting real UIN status;FileVersion=0.6.0.0;InternalName=;LegalCopyright=© Mikanoshi;LegalTrademarks=;OriginalFilename=InvisCheck.dll;ProductName=InvisChecker;ProductVersion=0.6.0.0;Comments=</VerInfo_Keys>
<VerInfo_MinorVer>6</VerInfo_MinorVer>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInformation>true</DCC_DebugInformation>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_MapFile>3</DCC_MapFile>
<Manifest_File>None</Manifest_File>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<VerInfo_Release>0</VerInfo_Release>
<VerInfo_Keys>CompanyName=;FileDescription=R&amp;Q plugin for getting real UIN status;FileVersion=0.6.0.0;InternalName=;LegalCopyright=© Mikanoshi;LegalTrademarks=;OriginalFilename=InvisCheck64.dll;ProductName=InvisChecker;ProductVersion=0.6.0.0;Comments=</VerInfo_Keys>
<VerInfo_MinorVer>6</VerInfo_MinorVer>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<Manifest_File>None</Manifest_File>
<DCC_MapFile>3</DCC_MapFile>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Define>DEBUG;EUREKALOG;EUREKALOG_VER6;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_OSX32)'!=''">
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Define>_VER7;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
@ -116,6 +139,9 @@
<DCCReference Include="sform.pas">
<Form>SetForm</Form>
</DCCReference>
<RcCompile Include="Icons\icons.rc">
<Form>icons.res</Form>
</RcCompile>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
@ -170,129 +196,47 @@
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k160.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k200.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp200.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Platforms>
<Platform value="OSX32">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
<Platform value="Win64">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<PropertyGroup Condition="'$(Config)'=='Release' And '$(Platform)'=='Win32'">
<PreBuildEvent/>
<PreBuildEventIgnoreExitCode>False</PreBuildEventIgnoreExitCode>
<PreLinkEvent/>
<PreLinkEventIgnoreExitCode>False</PreLinkEventIgnoreExitCode>
<PostBuildEvent>copy $(Platform)\InvisCheck.dll C:\SpeedProgs\Inet\Chat\RnQ\plugins\_My\CheckInvis\TestRnQ\plugins\InvisCheck.dll</PostBuildEvent>
<PostBuildEventIgnoreExitCode>False</PostBuildEventIgnoreExitCode>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' And '$(Platform)'=='Win64'">
<PreBuildEvent/>
<PreBuildEventIgnoreExitCode>False</PreBuildEventIgnoreExitCode>
<PreLinkEvent/>
<PreLinkEventIgnoreExitCode>False</PreLinkEventIgnoreExitCode>
<PostBuildEvent>copy $(Platform)\InvisCheck.dll C:\SpeedProgs\Inet\Chat\RnQ\plugins\_My\CheckInvis\TestRnQ\plugins\InvisCheck64.dll</PostBuildEvent>
<PostBuildEventIgnoreExitCode>False</PostBuildEventIgnoreExitCode>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' And '$(Platform)'=='Win32'">
<PreBuildEvent/>
<PreBuildEventIgnoreExitCode>False</PreBuildEventIgnoreExitCode>
<PreLinkEvent/>
<PreLinkEventIgnoreExitCode>False</PreLinkEventIgnoreExitCode>
<PostBuildEvent>copy $(Platform)\InvisCheck.dll C:\SpeedProgs\Inet\Chat\RnQ\plugins\_My\CheckInvis\TestRnQ\plugins\InvisCheck.dll</PostBuildEvent>
<PostBuildEventIgnoreExitCode>False</PostBuildEventIgnoreExitCode>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' And '$(Platform)'=='Win64'">
<PreBuildEvent/>
<PreBuildEventIgnoreExitCode>False</PreBuildEventIgnoreExitCode>
<PreLinkEvent/>
<PreLinkEventIgnoreExitCode>False</PreLinkEventIgnoreExitCode>
<PostBuildEvent>copy $(Platform)\InvisCheck.dll C:\SpeedProgs\Inet\Chat\RnQ\plugins\_My\CheckInvis\TestRnQ\plugins\InvisCheck64.dll</PostBuildEvent>
<PostBuildEventIgnoreExitCode>False</PostBuildEventIgnoreExitCode>
</PropertyGroup>
</Project>
<!-- EurekaLog First Line
[Exception Log]
EurekaLog Version=7001
Activate=0
atVCL=1
AutoCrashOperation=2
boHandleSafeCallExceptions=1
boUseMainModuleOptions=1
csoAllowedRenderMethods=64
csoShowWindowsThreads=1
DeleteMapAfterCompile=0
dpJCL=1
edoSendErrorReportChecked=0
edoShowSendErrorReportOption=0
Email Address=""
Email Object=""
Encrypt Password=""
Errors Number=32
Errors Terminate=3
Freeze Timeout=1
idEurekaLog=1
idEurekaLogDetailed=1
idMSClassic=1
idStepsToReproduce=1
loCatchLeaks=0
loEnableMMDebugMode=0
loFreeAllLeaks=1
loHideRTLLeaks=0
loMaxLeaks=0
loOnlyUnderIDE=0
loProcessesSection=1
Output Path=""
ProjectID="{9B39764C-3722-49C3-B2A6-6BBDC15F97A8}"
SMTP From="eurekalog@email.com"
SMTP Host=""
SMTP UserID=""
sndAddDateInFileName=0
sndBugZillaLogin=""
sndBugZillaPort=0
sndBugZillaURL=""
sndFogBugzHost=""
sndFogBugzLogin=""
sndFogBugzPort=0
sndFTPLogin=""
sndFTPPort=0
sndFTPURL=""
sndHTTPPort=0
sndHTTPURL=""
sndMantisLogin=""
sndMantisPort=0
sndMantisURL=""
sndMAPISubject=""
sndMAPITarget=""
sndShellRecepient=""
sndShellSubject=""
sndShowFailureMsg=1
sndSMAPISubject=""
sndSMAPITarget=""
sndSMTPClientFrom="eurekalog@email.com"
sndSMTPClientHost=""
sndSMTPClientLogin=""
sndSMTPClientSubject=""
sndSMTPClientTarget=""
sndSMTPServerFrom="eurekalog@email.com"
sndSMTPServerSubject=""
sndSMTPServerTarget=""
soActCtlsControlClass=1
soActCtlsControlText=1
soActCtlsFormClass=1
soActCtlsFormText=1
soAppCompilationDate=1
soAppName=1
soAppParameters=1
soAppStartDate=1
soAppUpTime=1
soAppVersionNumber=1
soCmpDisplayDPI=1
soCmpDisplayMode=1
soCmpFreeDisk=1
soCmpFreeMemory=1
soCmpName=1
soCmpPrinter=1
soCmpProcessor=1
soCmpSysUpTime=1
soCmpTotalDisk=1
soCmpTotalMemory=1
soCmpVideoCard=1
soCustomData=1
soExcCount=1
soExcDate=1
soExcModuleName=1
soExcModuleVersion=1
soExcNote=1
soExcStatus=1
soNetDHCP=1
soNetDNS1=1
soNetDNS2=1
soNetGateway=1
soNetIP=1
soNetSubmask=1
soOSBuildN=1
soOSCharset=1
soOSLanguage=1
soOSType=1
soOSUpdate=1
soUserCompany=1
soUserID=1
soUserPrivileges=1
TextsCollection=""
TrakerUser=""
WebPort=0
WebURL=""
EurekaLog Last Line -->

108
InvisCheck.dproj.2007

@ -1,108 +0,0 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{74D52849-BA31-4BE7-8744-1AE96C334AFF}</ProjectGuid>
<MainSource>InvisCheck.dpr</MainSource>
<Config Condition="'$(Config)'==''">Debug</Config>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_DependencyCheckOutputName>InvisCheck.dll</DCC_DependencyCheckOutputName>
<GenDll>true</GenDll>
<DCC_RangeChecking>true</DCC_RangeChecking>
<DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias)</DCC_UnitAlias>
<DCC_Platform>x86</DCC_Platform>
<DCC_UnitSearchPath>$(DELPHI)\Lib\Debug;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_UsePackage>vcl;rtl;vclx;indy;dbrtl;vcldb;bdertl;vclie;visualclx;vclshlctrls;dclOfficeXP;tdbf;vclactnband;adortl;vcldbx;visualdbclx;dsnap;dsnapcon;dbexpress;dss;inet;xmlrtl;inetdbbde;inetdbxpress;webdsnap;VclSmp;soaprtl;dbxcds;inetdb;websnap;ibxpress;qrpt;FlatStyle_D5;IndyCore;IndySystem;IndyProtocols</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="InvisCheck.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="CallExec.pas"/>
<DCCReference Include="sform.pas">
<Form>SetForm</Form>
</DCCReference>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">InvisCheck.dpr</Source>
</Source>
<Parameters>
<Parameters Name="HostApplication">C:\Progs\Inet\Chat\R&amp;Q 1100\plugins\RnQEyeSrc\TestRnQ\R&amp;Q.exe</Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD">C:\Progs\Inet\Chat\R&amp;Q 1100\plugins\RnQEyeSrc\TestRnQ\plugins</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1049</VersionInfo>
<VersionInfo Name="CodePage">1251</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>

BIN
InvisCheck.res

Binary file not shown.

4
NoRTTI.inc

@ -0,0 +1,4 @@
// IMAGE_FILE_RELOCS_STRIPPED or
{$SETPEFlAGS IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED}
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}

46
README.html

@ -1,19 +1,29 @@
<div style="line-height: 150%;">
<h1>InvisChecker 0.5</h1>
<br /><div style="width: 100%; height: 1px; border-top: #D3D3D3 solid 1px;"></div><br />
<a href="http://rnq.ru/" target="_blank">R&Q</a> плагин для определения реального статуса UIN, даже если он находится в инвизе.<br />
<br />
Возможности:
<ul>
<li>Определяет, находится ли определённый номер в инвизе, используя сервисы <b>KanICQ.ru</b> и <b>InvizNet.ru</b></li>
<li>Для предотвращения бана за слишком частые запросы можно использовать список прокси</li>
</ul>
<br />
<a target="_blank" href="http://code.highspec.ru/InvisCheck.dll"><b>Скачать плагин</b></a><br /><br />
<a target="_blank" href="http://rnq.ru/component/option,com_kunena/Itemid,48/func,view/catid,7/id,15621/"><b>Тема плагина на форуме R&Q</b></a>
<div style="line-height: 150%;">
<h1>InvisChecker 0.6</h1>
<br /><div style="width: 100%; height: 1px; border-top: #D3D3D3 solid 1px;"></div><br />
<a href="http://rnq.ru/" target="_blank">R&Q</a> плагин для определения реального статуса UIN, даже если он находится в инвизе.<br />
<br />
Возможности:
<ul>
<li>Определяет, находится ли определённый номер в инвизе, используя сервисы <b>KanICQ.ru</b> и <b>InvizNet.ru</b></li>
<li>Для предотвращения бана за слишком частые запросы можно использовать список прокси</li>
</ul>
<br />
<a target="_blank" href="http://code.highspec.ru/InvisCheck.dll"><b>Скачать плагин 32-бита</b></a><br />
<a target="_blank" href="http://code.highspec.ru/InvisCheck64.dll"><b>Скачать плагин 64-бита</b></a><br /><br />
<a target="_blank" href="http://rnq.ru/component/option,com_kunena/Itemid,48/func,view/catid,7/id,15621/"><b>Тема плагина на форуме R&Q</b></a>
<br><br>
<b>История версий</b>
<br><br>
0.6
<ul>
<li>Обновлён интерфейс, заменены все иконки</li>
<li>Тестовая 64-битная версия</li>
</ul>
</div>

BIN
icons.res

Binary file not shown.

6
plugin.pas

@ -1,7 +1,11 @@
Unit plugin;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
interface
const
APIversion = 5;
APIversion = 6;
// whatlist
PL_ROASTER =1;

154
pluginutil.pas

@ -1,41 +1,45 @@
Unit pluginutil;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
interface
uses
types, windows, plugin, SysUtils;
types, SysUtils, plugin;
function _int(i:integer):AnsiString; overload;
function _int(ints:array of integer):AnsiString; overload;
function _int(i:integer):RawByteString; overload;
function _int(ints:array of integer):RawByteString; overload;
function _byte_at(p:pointer; ofs:integer=0):byte; overload;
function _byte_at(const s:AnsiString; idx:integer=1):byte; overload;
function _byte_at(const s:RawByteString; idx:integer=1):byte; overload;
function _int_at(p:pointer; ofs:integer=0):integer; overload;
function _int_at(const s:AnsiString; idx:integer=1):integer; overload;
function _int_at(const s:RawByteString; idx:integer=1):integer; overload;
function _ptr_at(p:pointer; ofs:integer=0):pointer;
function _istring(const s:AnsiString):AnsiString;
function _istring_at(p:pointer; ofs:integer=0):AnsiString; overload;
function _istring_at(const s:AnsiString; idx:integer=1):AnsiString; overload;
function _intlist(a:array of integer):AnsiString;
function _istring(const s:RawByteString):RawByteString; inline;
function _istring_at(p:pointer; ofs:integer=0):RawByteString; overload;
function _istring_at(const s:RawByteString; idx:integer=1):RawByteString; overload;
function _intlist(a:array of integer):RawByteString;
function _intlist_at(p:pointer; ofs:integer=0):TintegerDynArray; overload;
function _intlist_at(const s:AnsiString; idx:integer=1):TintegerDynArray; overload;
function _intlist_at(const s:RawByteString; idx:integer=1):TintegerDynArray; overload;
function _double(p:pointer; ofs:integer=0):double;
// By Rapid D
function _dt(dt:Tdatetime):AnsiString;
function _dt(dt:Tdatetime):RawByteString;
function _dt_at(p:pointer; ofs:integer=0): Tdatetime; overload;
function _dt_at(const s: AnsiString; idx:integer=1): Tdatetime; overload;
function _dt_at(const s: RawByteString; idx:integer=1): Tdatetime; overload;
// By ObServeR
function IntToEvent(ev: integer): AnsiString;
function KeywordToInt(keyword: AnsiString): integer;
function MessageToHex(data:pointer): AnsiString;
function ParseMessageFromRnQ(data:pointer; request:byte = 0): AnsiString;
function ParseEvent(data:pointer): AnsiString;
function ParseError(data:pointer): AnsiString;
function ParseAcknowledge(data:pointer): AnsiString;
function IntToEvent(ev: integer): RawByteString;
function KeywordToInt(keyword: RawByteString): integer;
function MessageToHex(data:pointer): RawByteString;
function ParseMessageFromRnQ(data:pointer; request:byte = 0): RawByteString;
function ParseEvent(data:pointer): RawByteString;
function ParseError(data:pointer): RawByteString;
function ParseAcknowledge(data:pointer): RawByteString;
implementation
function IntlistToStr(list:TintegerDynArray): AnsiString;
function IntlistToStr(list:TintegerDynArray): RawByteString;
var
i: integer;
delim: AnsiString;
delim: RawByteString;
begin
Result := '';
delim := '';
@ -46,7 +50,7 @@ begin
end;
end;
function ParseAcknowledge(data:pointer): AnsiString;
function ParseAcknowledge(data:pointer): RawByteString;
begin
case _byte_at(data,5) of
PA_OK:
@ -58,7 +62,7 @@ begin
end;
function ParseError(data:pointer): AnsiString;
function ParseError(data:pointer): RawByteString;
begin
case _byte_at(data,5) of
PERR_ERROR:
@ -85,7 +89,7 @@ begin
end;
function ParseEvent(data:pointer): AnsiString;
function ParseEvent(data:pointer): RawByteString;
begin
Result := '';
@ -301,7 +305,7 @@ begin
end;
function MessageToHex(data:pointer): AnsiString;
function MessageToHex(data:pointer): RawByteString;
var
i: integer;
begin
@ -310,7 +314,7 @@ begin
Result := Result + IntToHex(_byte_at(data, i), 2) + ' ';
end;
function ParseGetData(data:pointer; request:byte): AnsiString;
function ParseGetData(data:pointer; request:byte): RawByteString;
begin
Result := '';
@ -385,7 +389,7 @@ begin
end;
end;
function ParseMessageFromRnQ(data:pointer; request:byte = 0): AnsiString;
function ParseMessageFromRnQ(data:pointer; request:byte = 0): RawByteString;
begin
Result := '';