Serial Port Holiday Light Flasher

In this post I will show you how to flash Christmas lights by the serial port. Now you can with Holiday232. This serial port can switch between 4 different lights by using 2 SPDT relays and both RTS and DTR of the relay. As you may be wondering when looking at the schematic why I’m using transistors and resistors. It is because the serial port voltage is higher than 12vdc. I don’t know what the forward voltage or current plus since there is a LED in series with the optocoupler.

The following things are required(for both DTR and RTS):

For 2-lights circuit you will need:

Wire color RJ45 screw termnalName(DB-9 Side)
Yellow and Black(3 and 6)Transmit and Receive. Tie together so it makes it easy to find the serial port(2 and 3)
White(7)DTR(4)
Brown(8)RTS(7)
Red and green(4 and 5)Ground(5)
Cisco console cable on screw terminals pinouts
Schmatic

All programs are virus free. Some antivirus software might say its "suspicious" or a "Potentionaly Unwanted Program". Some of them rate them on what there code looks like no matter if theres a definition in the virus database. If any of them are detected any Antivirus I will zip the software with the password "justin" j is lowercase

Flashing green low voltage
Flashing low voltage green LEDs
YouTube video

Unreal DVR

Here is a app I made that makes Unreal Archival Server much better. It allows you to record at a certain date and time and moves videos to a certain location with a better filename. It’s free and open source. However its not made by Unreal media server. And the app is a batch file.

Screenshot of Unreal DVR

Before running Unreal DVR you must do the following

  1. Open patch-uas.bat file after Archival server is installed
  2. Schedule a recording time in archival server(not Unreal DVR) to start at 00:00 to 23:59. This is needed so when Unreal DVR starts UArchivalServer it starts recording.
  3. Set the maximum duration to 1440 minutes, this is 24 hours. This will make it where Unreal DVR can create a video at a unlimited duration. You can do this by clicking the Storage settings button

After that upload remotecontroller.ino to the Arduino(if you want the ability to change channels)

How to stream TV to VLC

This method works a lot better than the first method. It works with phones, windows, Linux and other devices that support HLS. Mainly in this blog post we will be streaming to VLC Player. VLC Player is available for the phone and windows. HLS stands for HTTP Live Stream. You will also use a RAM Disk to store the stream pieces on. Don’t worry, you only need 32MB of RAM free, since your storing 5 video files that are 5-seconds each. We use a RAM Disk because its faster since it is not a motorized disk(like a HDD) and when computer loses power all files on that disk are gone. It writes 5 files, after the 5th file is done it deletes the first file and creates a new one. Plus it stores a M3U8 Playlist that is updated everytime a new file is created.

The steps

  1. Install Unreal Live Server and Unreal Media Server. See the first blog post here for instructions you don’t need the archival server. Also Microsoft Internet Information Services(if not installed).
  2. Install SoftPerfect RAMDisk from MajorGeeks not the offical website. MajorGeeks have the freeware version. The newer ones are shareware and are not free.
  3. After installing the RAM Disk open RAM Disk control panel up and add a ramdrive NTFS Formatted and 32MB of memory.
  4. After that download the HLS Configurator tool for IIS. Its a tool that I made that will configure the .m3u8 MIME type and set UMediaServer service startup type to Manual. Make sure to put that file somewhere the file can always be available on the computer.
  5. Next run the tool as administrator, and tell it the drive letter of the RAM Drive that was mounted. If you get an error saying that a file could not be found, then you probably didn’t install Unreal Media Server
  6. Next in the RAM Disk control panel click Tools then Applications then add the downloaded tool to the list. This will create the IIS Config file and start UMediaServer service after the drive is mounted on next restart.
  7. Next open Internet Information Services Manager from Administrative Tools
  8. If you want to use the orignal Port# delete the Default Website
  9. Right click The Sites folder and click Add Website…
  10. For Site Name type My TV if you are wanting to keep the default website type port 8321 for the port.
  11. For Physical path type the root path of the RAMDisk. For example if its Drive V then the root path is V:\
  12. Click Connect as… button and enter a administrator Username and password that is used in Windows
  13. Click OK button on all Windows
  14. Next open Unreal Media Server Configuration tool
  15. Right click the TV live broadcast that you named and click Start HLS Broadcasting…
  16. Enter the website URL of your TV stream for example if your hostname is delphijustintv.com then enter http://delphijustintv.com But if you are using port 8321 then its http://delphijustintv.com:8321
  17. For the Web Folder path enter the root of the RAMDisk. For example Drive V will be V:\
  18. Check always running.
  19. Click OK. Your all done now in VLC Media player it should play the TV stream. You will have to open tv.m3u8 or whatever file in the ram drive that ends with .m3u8. So for tv.m3u8 and http://delphijustintv.com as root URL will be http://delphijustintv.com/tv.m3u8 or if it uses port 8321 http://delphijustintv.com:8321/tv.m3u8
TV Streaming in VLC
program HLSIIS;
{$RESOURCE HLS-IIS-DATA.RES}
{
 This is the source code.
 HLS Configurator for Microsoft Internet Information Services
 You will need Unreal Media Server.
}
uses
  SysUtils,math,
  windows,
  dialogs,
  Classes,
  shellapi;
const
appkey='Software\Justin\TVStreaming';//settings key name
EVENTLOG_TYPES:dword=EVENTLOG_INFORMATION_TYPE or eventlog_warning_type;
REG_RAMDISK='RAMDisk';//Registry Value that has the Drive Letter
ServiceManual:dword=3;//Manual Service Startup type
AppName='TV Streaming';//The name of this tool
type ERegistry=class(Exception);//Registry error exception
ENet_exe=class(exception);//net.exe execution error exception
var hk:hkey=0;//Tool setting key
hksrv:hkey=0;//Service Key
S:String='V';//String that contains the drive letter
DriveLetter:AnsiChar;//Drive letter
WebConfig:tresourcestream;//web.config file
rs,dispConfig,Error:dword;//some dword variables
regerror:longint;//registry error variable
UMediaServer:Shellexecuteinfo;//net.exe execution info variable
HEL:thandle;//eventlog handle
label setRamdisk;//for retrying when a bad drive letter has been typed in

procedure InstallEventLog;
{
 Installs this tool for errors to be put in the event log.
}
var hk:hkey;
disp:Dword;
begin
regcreatekeyex(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Services\Eventlog\Application\HLS-IIS',0,NIL,
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NIL,HK,@Disp);
regsetvalueex(hk,'EventMessageFile',0,reg_sz,pchar(paramstr(0)),(1+length(
paramstr(0)))*sizeof(char));
regsetvalueex(hk,'TypesSupported',0,reg_dword,@EVENTLOG_TYPES,4);
regclosekey(hk);
end;

procedure ReportError(E:Exception);
{
 Reports any errors to the eventlog.
}
var EStrings:array[0..1]of pchar;
cname:string;
errorcode:dword;
begin
errorcode:=getlasterror;
cname:=e.classname;
estrings[0]:=pchar(cname);
estrings[1]:=pchar(e.message);
if(not reportevent(hel,eventlog_warning_type,1,2,nil,2,4,@estrings,@errorcode))
or(dispConfig=reg_created_new_key)then MessageBox(0,pchar(E.ClassName+': '+
e.message),appname,mb_iconerror);
if dispconfig=reg_created_new_key then begin regclosekey(hk);hk:=0;regdeletekey(
hkey_local_machine,appkey);end;
end;

function HasDrive:boolean;
{
Checks drive letter that has been enter to see if it is correct
returns true for valid letter otherwise false
}
begin
result:=(Length(s)<>0);//checks the length of the string to be sure that it has aleast one charactor
if not result then exit;
driveletter:=upcase(s[1]);//set drive letter to the uppercase letter.
result:=(ord(driveletter)>=ord('A'))and(ord(driveletter)<=ord('Z'))and(
GetLogicalDrives and trunc(Power(2,ord(driveletter)-ord('A')))>0);
//^ Performs drive letter checking and also see if it exists.
if result then setvolumelabel(pchar(driveletter+':\'),'HLSDrive');
//^ If the drive letter is correct then label the drive.
end;

begin
installeventlog;
hel:=registereventsource(nil,'HLS-IIS');
try
zeromemory(@umediaserver,sizeof(umediaserver));//initialize the shellexecuteinfo buffer
umediaserver.cbSize:=sizeof(umediaserver);//set its size
umediaserver.fMask:=SEE_MASK_NOCLOSEPROCESS;//set flags
umediaserver.lpFile:='net.exe';//set filename to net.exe
webconfig:=tresourcestream.CreateFromID(hinstance,1,'CONFIG');
//^ Load web.config from resource
dispconfig:=reg_created_new_key;
regerror:=regcreatekeyex(hkey_local_machine,appkey,0,nil,reg_option_non_volatile,
key_all_access,nil,hk,@dispconfig);
//^ Create tool settings key
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ Checks to see if it has successfully created or opened the key
rs:=1;//sets the registry size for the driveletter buffer
if regqueryvalueex(hk,reg_ramdisk,nil,nil,@driveletter,@rs)<>error_success then
begin
//^ Checks to see if the drive letter has been set or not
regerror:=regopenkeyex(hkey_local_machine,
'SYSTEM\CurrentControlSet\Services\UMediaServer',0,key_all_access,hksrv);
//^ Opens the UMediaServer service key
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ Checks to see if it successfully opened the key
umediaserver.lpParameters:='stop UMediaServer';
umediaserver.nShow:=sw_show;
//^ prepare for stopping UMediaServer
if not shellexecuteex(@umediaserver) then raise ENet_exe.Create(syserrormessage(
getlasterror));//stop umediaserver
waitforsingleobject(umediaserver.hProcess,infinite);//wait for net.exe to finish
getexitcodeprocess(umediaserver.hProcess,error);//get errorlevel
if error>0then raise ENet_exe.createfmt(
'Net.exe return %d when stopping Unreal Media Server',[error]);
//^ Checks to see if errorlevel is > 0
closehandle(umediaserver.hprocess);
umediaserver.hProcess:=0;
//^ closes net.exe process handle
regerror:=regsetvalueex(hkSrv,'Start',0,reg_dword,@servicemanual,4);
//^ Changes UMediaServer service started type to manual
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ if failed throw an exception
setRamdisk://Drive letter retry label
if not inputquery(appname,'Enter RAMDisk drive letter:',s)then
raise exception.Create('Installation aborted');
//^ ask for drive letter
if(length(s)>1)or(length(s)=0)or(not hasdrive)then begin
messagebox(0,'Bad drive letter or drive doesn'#39't exist','TV Streaming',
mb_iconerror);
goto setRamdisk;
end;// validate drive letter
regerror:=regsetvalueex(hk,reg_ramdisk,0,reg_binary,@driveletter,1);
//^ save drive letter
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ check to see if it did write to registry
end;
s:=driveletter;
if not hasdrive then raise Exception.Create('The drive letter setting in registry is invalid');
//^ validate drive letter read from registry
webconfig.SaveToFile(driveletter+':\web.config');
//^ create Internet Information Services configuration in the root of ramdisk
umediaserver.nShow:=sw_minimize;
umediaserver.lpParameters:='start UMediaServer';
if not shellexecuteex(@umediaserver)then raise ENet_exe.Create(
'Failed to start Unreal Media Server');
//^ Start Unreal Media Server
waitforsingleobject(umediaserver.hprocess,infinite);//wait for it to finish
getexitcodeprocess(umediaserver.hProcess,error);//get errorlevel
if error>0 then raise ENet_exe.CreateFmt(
'Net.exe return %d when starting Unreal Media Server',[error]);
//^ if errorlevel >0 then throw an exception.
// now if we get to this line,we know everything went through
reportevent(hel,eventlog_information_type,1,1,nil,0,0,nil,nil);
except
on E:exception do
reportError(E);
end;
if hk<>0 then regclosekey(hk);
if hksrv<>0 then regclosekey(hksrv);
if umediaserver.hProcess<>0then closehandle(umediaserver.hprocess);
deregistereventsource(hel);
//^ cleanup before closing
end.

KeyJoy the joystick to mouse/keyboard

This program allows you to use your Joystick as a keyboard or mouse. It allows you to set up separate buttons for numbers, symbols and letters. You can also assign the left or right mouse buttons. You can scrolll through the list of letters,numbers or symbols that you can choose by press the button assigned as a select key button. You can use any number of joysticks and controllers, you just open them with an joystick number(1st joystick is 0 2nd is 1 and so on…). To move the mouse hold any buttons down while moving left, right up or down.

Here’s an example command for using joystick#1

keyjoy.exe 1

KeyJoy Screenshot

In the screenshot above the button status should match from the drop down box when assigning keys or special modes(Such as select key or Rigtht Mouse) to a button. You will find the app in win32\debug folder, the rest is source code

All programs are virus free. Some antivirus software might say its "suspicious" or a "Potentionaly Unwanted Program". Some of them rate them on what there code looks like no matter if theres a definition in the virus database. If any of them are detected any Antivirus I will zip the software with the password "justin" j is lowercase

POP3, IRC, SMTP and FTP Password Recovery tool

This tool allows you to get passwords from email, file transfer and IRC clients. Works on Windows and Linux(via Wine). Includes both 32 and 64-bit versions. If you need the ssh password and use the exact account in a file transfer program that supports FTP(such as filezilla) then you can recover your SSH account. You may be able to recover your IMAP by using POP3 or SMTP protocol in the email client. Includes a batch file for each protocol.

unit tcppasswdUnit1;
//Source code
{$RESOURCE tcppasswd-res.res}
interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,mshtml, IdBaseComponent, IdComponent,
  IdCustomTCPServer, IdTCPServer, IdCmdTCPServer,  IdFTPServer, Vcl.OleCtrls,
  IdReply, IdFTPListOutput, Vcl.StdCtrls,
  IdContext, winsock, IdIrcServer, IdPOP3Server, IdSMTPServer, printers,
  IdCommandHandlers, Vcl.Menus, IdExplicitTLSClientServerBase;
const CONNECTION_WELCOME=
'delphijustin TCP Password Recovery (http://delplink.xyz/password)';
PORT_MIN=1024;
PORT_BASE=MAXWORD-PORT_MIN;
PORT_INVALID=MAXWORD+1;
APPVER=1.00;
SWITCH_IRC='/IRC';
SWITCH_FTP='/FTP';
SWITCH_SMTP='/SMTP';
SWITCH_POP3='/POP3';
Service_Info_Line='For %s Use Port %u';
MEMO_FOOTER=
'Use localhost as the hostname or 127.0.0.1 as the IP.'#13#10'When done change the hostname and port number back in your client.';

type
  TPassLogWND = class(TForm)
    IdFTPServer1: TIdFTPServer;
    Memo1: TMemo;
    IdIRCServer1: TIdIRCServer;
    IdPOP3Server1: TIdPOP3Server;
    IdSMTPServer1: TIdSMTPServer;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    SaveResults1: TMenuItem;
    Exit1: TMenuItem;
    Clipboard1: TMenuItem;
    CopyFTPPort1: TMenuItem;
    CopyIRCPort1: TMenuItem;
    CopySMTPPort1: TMenuItem;
    CopyPOP3Port1: TMenuItem;
    CopyAll1: TMenuItem;
    SaveDialog1: TSaveDialog;
    Help1: TMenuItem;
    About1: TMenuItem;
    procedure IdFTPServer1UserAccount(ASender: TIdFTPServerContext;
      const AUsername, APassword, AAcount: string; var AAuthenticated: Boolean);
    procedure IdFTPServer1UserLogin(ASender: TIdFTPServerContext;
      const AUsername, APassword: string; var AAuthenticated: Boolean);
    procedure IdFTPServer1ListenException(AThread: TIdListenerThread;
      AException: Exception);
    procedure FormCreate(Sender: TObject);
    procedure IdPOP3Server1CheckUser(aContext: TIdContext;
      aServerContext: TIdPOP3ServerContext);
    procedure IdSMTPServer1UserLogin(ASender: TIdSMTPServerContext;
      const AUsername, APassword: string; var VAuthenticated: Boolean);
    procedure IdIRCServer1CommandPass(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandUser(AContext: TIdCommand; UserName, HostName,
      ServerName, RealName: string);
    procedure IdIRCServer1CommandUserHost(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandUsers(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandVersion(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandWallops(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandWho(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandWhoIs(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandWhoWas(AContext: TIdCommand; AParm1, AParm2,
      AParm3: string);
    procedure IdIRCServer1CommandStats(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandSummon(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandSQuit(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandServer(AContext: TIdCommand; ServerName,
      Hopcount, Info: string);
    procedure IdIRCServer1CommandPong(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandPing(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandQuit(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandOther(AContext: TIdCommand; Command,
      AParm: string);
    procedure IdIRCServer1CommandMode(AContext: TIdCommand; AParm1, AParm2,
      AParm3, AParm4, AParm5: string);
    procedure IdIRCServer1CommandList(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandLinks(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandInfo(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandConnect(AContext: TIdCommand; AParm1, AParm2,
      AParm3: string);
    procedure IdIRCServer1CommandPart(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandOper(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandPrivMsg(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandJoin(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure CopyFTPPort1Click(Sender: TObject);
    procedure CopyIRCPort1Click(Sender: TObject);
    procedure CopySMTPPort1Click(Sender: TObject);
    procedure CopyPOP3Port1Click(Sender: TObject);
    procedure CopyAll1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure SaveResults1Click(Sender: TObject);
    procedure IdIRCServer1CommandAway(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandAdmin(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandError(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandInvite(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandIsOn(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandKick(AContext: TIdCommand; AParm1, AParm2,
      AParm3: string);
    procedure IdIRCServer1CommandKill(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandNames(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandNick(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandNotice(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandRehash(AContext: TIdCommand);
    procedure IdIRCServer1CommandRestart(AContext: TIdCommand);
    procedure IdIRCServer1CommandTime(AContext: TIdCommand; AParm: string);
    procedure IdIRCServer1CommandTopic(AContext: TIdCommand; AParm1,
      AParm2: string);
    procedure IdIRCServer1CommandTrace(AContext: TIdCommand; AParm: string);
    procedure About1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TPacketFlag=(DisconnectAfterSend,objIdCommand,objIdContext);
  TPacketFlags=set of TPacketFlag;
var
  PassLogWND: TPassLogWND;
  args:tstringlist;
  ircnick:string='Unknown';
implementation
uses clipbrd;
{$R *.dfm}
    function PortTCPIsOpen(dwPort : Word) : boolean;
    var
      client : sockaddr_in;//sockaddr_in is used by Windows Sockets to specify a local or remote endpoint address
      sock   : Integer;
    begin
        client.sin_family      := AF_INET;
        client.sin_port        := htons(dwPort);//htons converts a u_short from host to TCP/IP network byte order.
        client.sin_addr.s_addr := INADDR_LOOPBACK; //Use loopback address.
        sock  :=socket(AF_INET, SOCK_STREAM, 0);//The socket function creates a socket
        Result:=connect(sock,client,SizeOf(client))=0;//establishes a connection to a specified socket.
    end;

procedure sendPackets(obj:TObject;Server:TComponent;Username,
password:string;flags:tpacketflags);
var packets:tresourcestream;
strpack:tstringlist;
port:word;
begin
port:=0;
with passlogwnd do begin
  if server=idircserver1 then
  port:=6667;
  if server=idftpserver1 then
  port:=21;
  if server=idsmtpserver1 then
  port:=25;
  if server=idpop3server1 then
  port:=110;
end;
try
  packets:=tresourcestream.CreateFromID(hinstance,port,'PACKETS');
except
exit;
end;
strpack:=tstringlist.Create;
strpack.LoadFromStream(packets);
strpack.Text:=stringreplace(strpack.Text,'{IRCNICK}',IRCNICK,[rfreplaceall]);
strpack.Text:=stringreplace(strpack.Text,'{PASSWORD}',PASSWORD,[rfreplaceall]);
strpack.Text:=stringreplace(strpack.Text,'{USERNAME}',USERNAME,[rfreplaceall]);
if objIdCOMMAND in flags then begin
TIdCommand(obj).PerformReply:=false;
TIDcommand(obj).Context.Connection.WriteRFCStrings(strpack);
if disconnectaftersend in flags then
tidcommand(obj).Context.Connection.Disconnect;
end;
if objIdContext in flags then
begin
TIdContext(obj).Connection.WriteRFCStrings(strpack);
if disconnectAfterSend in flags then
tidcontext(obj).Connection.Disconnect;
end;
packets.Free;
strpack.Free;
end;

function results:tstringlist;
var
  I: Integer;
begin
  result:=tstringlist.Create;
  for I := 0 to passlogwnd.Memo1.Lines.IndexOf('')-1 do
  result.Add(passlogwnd.Memo1.Lines[i]);
end;

procedure logWrite(text:array of string;server:tcomponent);
var I:Integer;
S,serv:String;
begin
serv:='Warning';
with passlogwnd do begin
if server=idircserver1 then
serv:='IRC';
if server=idftpserver1 then
serv:='FTP';
if SERVER=IDSMTPSERVER1 then
SERV:='SMTP';
if SERVER=IDPOP3SERVER1 THEN
SERV:='POP3';
end;
S:=format('[%s] %s: ',[timetostr(time),serv]);
for I :=0 to length(text)-1 do
s:=s+text[i];
passlogwnd.Memo1.Lines.Insert(0,s);
end;

function randport:word;
label newport;
begin
newport:
  result:=random(PORT_BASE)+PORT_MIN;
  if porttcpisopen(result)then goto newport;
end;

procedure TPassLogWND.About1Click(Sender: TObject);
var msgbox:msgboxparams;
begin
zeromemory(@msgbox,sizeof(msgbox));
msgbox.cbSize:=sizeof(msgbox);
msgbox.hwndOwner:=handle;
msgbox.hInstance:=hinstance;
msgbox.lpszText:=strfmt(stralloc(1024),
'delphijustin TCP Password recovery v%f'#13#10'By Justin Roeder',[appver]);
msgbox.lpszCaption:='About';
msgbox.dwStyle:=mb_usericon;
msgbox.lpszIcon:=makeintresource(1);
messageboxindirect(msgbox);
strdispose(msgbox.lpszText);
end;

procedure TPassLogWND.CopyAll1Click(Sender: TObject);
begin
clipboard.AsText:= memo1.Text;
end;

procedure TPassLogWND.CopyFTPPort1Click(Sender: TObject);
begin
clipboard.AsText:=uinttostr(idftpserver1.DefaultPort);
end;

procedure TPassLogWND.CopyIRCPort1Click(Sender: TObject);
begin
clipboard.AsText:=uinttostr(idircserver1.DefaultPort);

end;

procedure TPassLogWND.CopyPOP3Port1Click(Sender: TObject);
begin
clipboard.AsText:=uinttostr(idpop3server1.DefaultPort);

end;

procedure TPassLogWND.CopySMTPPort1Click(Sender: TObject);
begin
clipboard.AsText:=uinttostr(idsmtpserver1.DefaultPort);

end;

procedure TPassLogWND.Exit1Click(Sender: TObject);
begin
close;
end;

function startServicesThread(P:pointer):dword;stdcall;
begin
 with passlogwnd do begin
idftpserver1.DefaultDataPort:=randport;
if strtouintdef(args.Values[SWITCH_IRC],PORT_INVALID)<PORT_INVALID then
idircserver1.DefaultPort:=strtouint(args.Values[SWITCH_IRC]);
if strtouintdef(args.Values[SWITCH_FTP],PORT_INVALID)<PORT_INVALID then
idFTPserver1.DefaultPort:=strtouint(args.Values[SWITCH_FTP]);
if strtouintdef(args.Values[SWITCH_SMTP],PORT_INVALID)<PORT_INVALID then
idSMTPserver1.DefaultPort:=strtouint(args.Values[SWITCH_SMTP]);
if strtouintdef(args.Values[SWITCH_POP3],PORT_INVALID)<PORT_INVALID then
idpop3server1.DefaultPort:=strtouint(args.Values[SWITCH_POP3]);
idftpserver1.Greeting.Text.Text:=connection_welcome;
idircserver1.Greeting.Text.Text:=connection_welcome;
idsmtpserver1.Greeting.Text.Text:=connection_welcome;
idpop3server1.Greeting.Text.Text:=connection_welcome;;
idftpserver1.Active:=(Args.IndexOf(switch_ftp)>0)or(strtouintdef(args.Values[
switch_ftp],port_invalid)<port_invalid);
idircserver1.Active:=(Args.IndexOf(switch_irc)>0)or(strtouintdef(args.Values[
switch_irc],port_invalid)<port_invalid);
idpop3server1.Active:=(Args.IndexOf(switch_pop3)>0)or(strtouintdef(args.Values[
switch_pop3],port_invalid)<port_invalid);
idsmtpserver1.Active:=(Args.IndexOf(switch_smtp)>0)or(strtouintdef(args.Values[
switch_smtp],port_invalid)<port_invalid);
memo1.Clear;
MEMO1.Lines.Add('');
if idftpserver1.Active then
memo1.Lines.Add(format(service_info_line,['FTP',idftpserver1.DefaultPort]));
if idsmtpserver1.Active then
memo1.Lines.Add(format(service_info_line,['SMTP',idSMTPserver1.DefaultPort]));
if idircserver1.Active then
memo1.Lines.Add(format(service_info_line,['IRC',idIRCserver1.DefaultPort]));
if idpop3server1.Active then
memo1.Lines.Add(format(service_info_line,['POP3',idPOP3server1.DefaultPort]));
if memo1.Lines.Count=1 then begin
memo1.Lines.Add('No service loaded please load it by typing '+extractfilename(
paramstr(0))+' <protocols> at the command prompt.');
memo1.Lines.Add('Avalible protocols:');
memo1.Lines.Add('/FTP');
MEMO1.Lines.Add('/IRC');
MEMO1.Lines.Add('/POP3');
MEMO1.Lines.Add('/SMTP');
memo1.Lines.Add(
'To set a custom port simply put a equal sign and port number after the protocol name.')
end;
memo1.Lines.Add(memo_footer);
 end;
end;

procedure TPassLogWND.FormCreate(Sender: TObject);
var tid:dword;
begin
args:=tstringlist.Create;
args.Delimiter:=#32;
args.DelimitedText:=strpas(getcommandline);
randomize;
createthread(nil,0,@startservicesthread,nil,0,tid);
end;

procedure TPassLogWND.IdFTPServer1ListenException(AThread: TIdListenerThread;
  AException: Exception);
var port:word;
begin
port:=athread.Server.DefaultPort;
logWrite([
'Port ',uinttostr(port),' Cannot listen: ',aexception.ClassName,': ',
aexception.Message],nil);
end;

procedure TPassLogWND.IdFTPServer1UserAccount(ASender: TIdFTPServerContext;
  const AUsername, APassword, AAcount: string; var AAuthenticated: Boolean);
begin
idftpserver1userlogin(asender,ausername,apassword,aauthenticated);
end;

procedure TPassLogWND.IdFTPServer1UserLogin(ASender: TIdFTPServerContext;
  const AUsername, APassword: string; var AAuthenticated: Boolean);
var strpack:tstringlist;
begin
logWrite(['Username: ',ausername,' Password: ',apassword,''],idftpserver1);
AAuthenticated:=false;
strpack:=tstringlist.Create;
strpack.Text:='530 Your username is '+ausername+' and password is '+apassword;
asender.Connection.WriteRFCStrings(strpack);
strpack.Free;
asender.Connection.Disconnect;
end;

procedure TPassLogWND.IdIRCServer1CommandAdmin(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandAway(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandConnect(AContext: TIdCommand; AParm1,
  AParm2, AParm3: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandError(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandInfo(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandInvite(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandIsOn(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandJoin(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandKick(AContext: TIdCommand; AParm1,
  AParm2, AParm3: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandKill(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandLinks(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandList(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandMode(AContext: TIdCommand; AParm1,
  AParm2, AParm3, AParm4, AParm5: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandNames(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandNick(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
IRCNick:=aparm1;
end;

procedure TPassLogWND.IdIRCServer1CommandNotice(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandOper(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandOther(AContext: TIdCommand; Command,
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandPart(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandPass(AContext: TIdCommand;
  AParm: string);
begin
logwrite(['Nickname: ',ircnick,' Password: ',aparm],idircserver1);
sendpackets(acontext,idircserver1,'',aparm,[objIdCommand]);
end;

procedure TPassLogWND.IdIRCServer1CommandPing(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandPong(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandPrivMsg(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandQuit(AContext: TIdCommand;
  AParm: string);
begin
AContext.Disconnect:=true;
end;

procedure TPassLogWND.IdIRCServer1CommandRehash(AContext: TIdCommand);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandRestart(AContext: TIdCommand);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandServer(AContext: TIdCommand;
  ServerName, Hopcount, Info: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandSQuit(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandStats(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandSummon(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandTime(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandTopic(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandTrace(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandUser(AContext: TIdCommand; UserName,
  HostName, ServerName, RealName: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandUserHost(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandUsers(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandVersion(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandWallops(AContext: TIdCommand;
  AParm: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandWho(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandWhoIs(AContext: TIdCommand; AParm1,
  AParm2: string);
begin
//
end;

procedure TPassLogWND.IdIRCServer1CommandWhoWas(AContext: TIdCommand; AParm1,
  AParm2, AParm3: string);
begin
//
end;

procedure TPassLogWND.IdPOP3Server1CheckUser(aContext: TIdContext;
  aServerContext: TIdPOP3ServerContext);
begin
logwrite(['Username: ',aservercontext.Username,' Password: ',
aservercontext.Password],idpop3server1);
sendpackets(acontext,idpop3server1,aservercontext.Username,aservercontext.Password,
[disconnectAfterSend,objIdContext]);
end;

procedure TPassLogWND.IdSMTPServer1UserLogin(ASender: TIdSMTPServerContext;
  const AUsername, APassword: string; var VAuthenticated: Boolean);
var strpack:tstringlist;
begin
Logwrite(['Username: ',ausername,' Password: ',apassword],idsmtpserver1);
vauthenticated:=true;
strpack:=tstringlist.Create;
strpack.Text:='500 Your username is '+ausername+' and Password is '+aPASSWORD;
asender.Connection.WriteRFCStrings(strpack);
strpack.Free;
end;

procedure TPassLogWND.SaveResults1Click(Sender: TObject);
var txt:tstringlist;
begin
if not savedialog1.Execute then
exit;
txt:=results;
txt.SaveToFile(savedialog1.FileName);
txt.Free;
end;

end.
Screenshot

PHPRadio

This php script allows you to host your own Internet Station. Just unzip the zip file onto a folder on your web server. You will want to store your songs into the root or subdirectory of that folder. Then you will want to create the song database. On windows you just open makedb.bat file on linux execute makedb.sh(make sure to chmod +x makedb.sh first).

It choose randomly chooses a song from the database and stores the id into a cookie(so it will get a new song everytime until all the ids are used. Once that happens it resets the cookie. It even gets the Artist,song name,album name and year from the mp3 file without any libraries or add-ons. It will also check for picture file inside the album folder(album cover picture).

All programs are virus free. Some antivirus software might say its "suspicious" or a "Potentionaly Unwanted Program". Some of them rate them on what there code looks like no matter if theres a definition in the virus database. If any of them are detected any Antivirus I will zip the software with the password "justin" j is lowercase

How to record and stream your TV shows

In this blog post I will show you how easy simple it is to stream and record your TV shows. Also check out the new post that uses the same software but makes it compatible with VLC.

What you will need?

1x EasyCap USB Video capture device.

1x RCA to 3.5mm adaptor(I recommend using your soundcard’s line/mic port as the sound source, because the quality of EasyCap’s sound input will probably suck).

100GB or higher hard drive for recording shows is recommended,

You may need a VCR w/Remote Control, depending if the TV box doesn’t have a Composite video output. We will be using the VCR as a RF Demodulator (this is opposite of the famous RF Modulator)

If you have to use the VCR as you will need a TV Coax cable also before buying the VCR or TV Coax cable make sure your box has a RF output on it. Mediacom has the coax output but not Composite video output so the VCR is ideal for this project.

The software we will use is:

Step 1. Install EasyCap.

Install any drivers for EasyCap, i believe for windows 10 its plug and play

Step 2. Install Unreal Live Server

  1. Install Unreal LIve Server and open its control panel by opening “Live server configurator” from the Start Menu
  2. Right click “Live sources and click “Add new media source”
  3. Check “Add video source” and select “USB Video Device”
  4. Click next for the Media type
  5. You can click next again
  6. You can click next again
  7. Check “Add audio source” and choose the correct audio source that has is connected to the TV device(VCR/TV converter box).
  8. You can click next again
  9. You can test the audio or just click next
  10. You can leave the codecs and speeds alone and click next
  11. Enter a description like TV and then cick next
  12. Don’t click enable recording click finish, we will setup recording in the archival server.

Step 3. Install Unreal Media Server

  1. Download and install Unreal Media Server
  2. Open the “Media Server configurator” from the start menu.
  3. Click File then New Live Broadcast…
  4. Leave Static live broadcast selected and click OK
  5. Type in a alias for the stream and use the ID number from Live Server(usually 1)
  6. Type in the IP address or host name where the Live server is on you can set it to 127.0.0.1 if its on the same computer that the Media server is on
  7. If you don’t want to record shows then just skip to Step 6.

Step 4. Install Archival Server

  1. Before closing the media server control panel you must set up a password for the Archival Server, click File then properties in the media server control panel.
  2. Click the Set Password button
  3. Enter a password that will be used for the archival server to use.
  4. Note: we will install archival server and IIS on the same computer where the videos will be recorded
  5. Now install archival server.
  6. Open Archival server configurator from the start menu
  7. Check the “Enable periodic cleanup”, this will help save space on your hard drive by deleting the old videos
  8. Click file then add new media server
  9. Type in the IP address or hostname of the media server in the Media Server address text box, note this will be the constant LiveHost in the JavaScript code
  10. Type in the password you used for archival server in the media server control panel in the Server password field
  11. Click OK
  12. To setup the path where the videos are stored click the Storage Settings button, this will be where the website files will be stored
  13. You will now need to setup the schedule, since our JavaScript code is designed to load videos by the hour only it should have 24 different recording times. This means it should start at hh:00 and end at hh:59 for every hour, replace hh with the 2-digit hour.

Step 5. Install IIS

  1. Install IIS as shown in this tutorial
  2. Change the Default Web Directory by clicking Sites then right click “Default Web Site” then click Advanced Settings
  3. Set Physical Path to the path where archival server storage settings were set to.
  4. Open notepad and copy and paste the HTML code and save it as “index.html” in the root of the recording folder
<!DOCTYPE html>
<html>
<head>
<title>My TV Recordings</title>
<script type="text/javascript">
//If you used the same settings in my blog then you dont need to change the 2 constants
const LiveHost = "127.0.0.1";
const ArchivalAlias = "TV";
function gotoArchivalList(){
location.href ="./"+LiveHost+"/"+ArchivalAlias+"/"
}
function twoDigit(x){
if(x<10){
return "0"+x;
}return x;
}
function setVideo(videoMonth,videoHour,videoDay,videoYear){
document.getElementById("player").innerHTML="";
var videoPlayer = document.createElement("VIDEO");
var video = document.createElement("SOURCE");
video.src = "./"+LiveHost+"/"+escape(ArchivalAlias)+"/"+videoYear+"/"+videoMonth+"/"+videoDay+"/"+escape(ArchivalAlias+"_"+videoYear+"-"+videoMonth+"-"+videoDay+"_"+videoHour+"-00-01.mp4");
video.type = "video/mp4";
videoPlayer.controls = true;
videoPlayer.appendChild(video);
document.getElementById("player").appendChild(videoPlayer);
}
function playerForm(form){
var videoTime = new Date(form.date.value+" "+form.time.value+":00:00");
var videoMonth = twoDigit(videoTime.getMonth()+1);
var videoHour = twoDigit(videoTime.getHours());
var videoDay = twoDigit(videoTime.getDate());
var videoYear = videoTime.getFullYear();
setVideo(videoMonth,videoHour,videoDay,videoYear);
}
function startUp(){
var now = new Date();
var lastHour = new Date(now.getTime()-(60*60*1000));
document.getElementById("vDate").value = lastHour.toLocaleDateString();
var videoMonth = twoDigit(lastHour.getMonth()+1);
var videoHour = twoDigit(lastHour.getHours());
var videoDay = twoDigit(lastHour.getDate());
var videoYear = lastHour.getFullYear();
setVideo(videoMonth,videoHour,videoDay,videoYear);
}
</script>
</head>
<body onload="startUp()">
<form action="javascript:;">
<p id="player">

</p>
Chose a date:<input type="date" name="date" id="vDate"><br>
Choose a time:<select name="time">
<option value="00">12 AM</option>
<option value="01">1 AM</option>
<option value="02">2 AM</option>
<option value="03">3 AM</option>
<option value="04">4 AM</option>
<option value="05">5 AM</option>
<option value="06">6 AM</option>
<option value="07">7 AM</option>
<option value="08">8 AM</option>
<option value="09">9 AM</option>
<option value="10">10 AM</option>
<option value="11">11 AM</option>
<option value="12">12 PM</option>
<option value="13">1 PM</option>
<option value="14">2 PM</option>
<option value="15">3 PM</option>
<option value="16">4 PM</option>
<option value="17">5 PM</option>
<option value="18">6 PM</option>
<option value="19">7 PM</option>
<option value="20">8 PM</option>
<option value="21">9 PM</option>
<option value="22">10 PM</option>
<option value="23">11 PM</option>
</select><br>
<input type="button" value="Load Video" onclick="playerForm(this.form)">
</form>
<a href="javascript:gotoArchivalList()">Click here to see list of recorded video files.</a>
</body>
</html>

Step 6. Install Unreal Media Player

Finally install Unreal Media player and test its stream. For any device that is not windows you can use your HTML5 Web Browser to stream any recording upto an hour back(since the one that is being recording cannot be streamed until recording is done)

$32 dollar isolation transformer

Here’s a simple easy to build Isolation Transformer that you can buy from All Electronics.

Here’s what you need:

1x 120VAC Output transformer

1x outlet connector

1x power cord

You can add a 1/2A fuse that goes on the output of the transformer

Circuit Diagram

Aces Up Solitaire

Try out this solitaire game. This solitaire game is fun and addictive. For rules of this game, click here. It also saves games, tells you when there are no more moves,when aces are covering each piles and custom card decks. Just run the exe file to play. Now available for windows 3.1 as well, download acesup16.exe for the 16-bit version. You can now purchase the source code password. The password will work for all new versions. You can buy 32-bit, 16-bit or both source codes.

All programs are virus free. Some antivirus software might say its "suspicious" or a "Potentionaly Unwanted Program". Some of them rate them on what there code looks like no matter if theres a definition in the virus database. If any of them are detected any Antivirus I will zip the software with the password "justin" j is lowercase

Screenshot

URL Notifier

This app monitors URLs and Files for changes. It runs from the command prompt, just pass the URLs as the parameters. If its a file use file:/// URL. It uses Internet Explorer URLMon library to download the URLs. To see how to use just open urlnotify.exe file. Great for RSS feeds, comments feeds and blogs.

program urlnotify;

{$APPTYPE CONSOLE}
{$RESOURCE URLNotifier.res}
uses
  SysUtils,
  windows,
  urlmon,
  Classes,mmsystem,
  shellapi;
const Table: Array[0..255] of DWord =
     ($00000000, $77073096, $EE0E612C, $990951BA,
      $076DC419, $706AF48F, $E963A535, $9E6495A3,
      $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
      $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
      $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
      $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
      $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
      $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
      $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
      $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
      $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
      $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
      $26D930AC, $51DE003A, $C8D75180, $BFD06116,
      $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
      $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
      $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
      $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
      $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
      $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
      $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
      $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
      $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
      $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
      $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
      $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
      $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
      $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
      $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
      $5005713C, $270241AA, $BE0B1010, $C90C2086,
      $5768B525, $206F85B3, $B966D409, $CE61E49F,
      $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
      $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
      $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
      $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
      $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
      $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
      $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
      $F762575D, $806567CB, $196C3671, $6E6B06E7,
      $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
      $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
      $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
      $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
      $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
      $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
      $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
      $CC0C7795, $BB0B4703, $220216B9, $5505262F,
      $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
      $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
      $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
      $9C0906A9, $EB0E363F, $72076785, $05005713,
      $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
      $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
      $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
      $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
      $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
      $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
      $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
      $A7672661, $D06016F7, $4969474D, $3E6E77DB,
      $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
      $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
      $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
      $BAD03605, $CDD70693, $54DE5729, $23D967BF,
      $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
      $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);
LOG_FAILED_REQUEST=2;
LOG_CHANGED_FOUND=1;
LOG_STARTUP=3;
LOG_REGFAILED=4;
SOUND_MODE_OFF=0;
SOUND_MODE_PLAY_ONCE=1;
SOUND_MODE_BEEP=2;
var CurrentFN,ELComputer:array[0..max_path]of char;
I:integer;
herr:hresult;
seerr:hinst;
hel:thandle;
hkel,hkApp,CheckSumKey:hkey;
soundmode,eltypes,currentcrc,newcrc,rs,sleeptime:dword;
mbText:array[0..1024]of char;
function WriteEvent(id,wtype,rawsize:dword;Strs:array of PChar;raw:pointer):boolean;
begin
hel:=registereventsource(elcomputer,'URLNotifier');
if length(strs)>0then result:=reportevent(hel,wtype,0,id,nil,length(strs),rawsize,
@strs[0],raw)else result:=reportevent(hel,wtype,0,id,nil,0,rawsize,nil,raw);
deregistereventsource(hel);
end;
procedure CalcCRC32(const FileName: String; var CRC32: dword);
var F: file;
    BytesRead: dword;
    Buffer: Array[1..65521] of byte;
    i: Word;
begin
    FileMode := 0;
    CRC32 := $ffffffff;
    {$I-}
    AssignFile(F, FileName);
    Reset(F, 1);
    if IOResult = 0 then
    begin
      repeat
        BlockRead(F, Buffer, SizeOf(Buffer), BytesRead);
        for i := 1 to BytesRead do CRC32 := (CRC32 shr 8) xor Table[Buffer[i] xor
        (CRC32 and $000000FF)];
      until BytesRead = 0;
    end;
    CloseFile(F);
    {$I+}
    CRC32 := not CRC32;
end;

function getURLSize:string;
var h:thandle;
begin
h:=createfile(currentfn,generic_read,file_share_read or file_share_write or
file_share_delete,nil,open_existing,file_attribute_normal,0);
result:=formatfloat('0,',getfilesize(h,nil))+' Bytes';
closehandle(h);
end;

function finishMonitoring(ctrltype:dword):Boolean;
begin
regclosekey(hkapp);
regclosekey(checksumkey);
deregistereventsource(hel);
writeln(datetimetostr(now),' - Monitoring aborted');
Exitprocess(0);
end;

begin
if paramcount=0then begin
writeln('Usage: ',extractfilename(paramstr(0)),' URL1 URL2 etc...');
writeln(
'To enable/disable beeping type ',extractfilename(paramstr(0)),' /BEEP [/OFF] [freq] [duration]');
writeln(
'To enable/disable sound type ',extractfilename(paramstr(0)),' /SOUND [/OFF]');
writeln;writeln('App icon by Icons8');
write('Press enter to quit...');readln;exitprocess(0);
end;
writeln('URL Notifier v1.0');
if stricomp(pchar(paramstr(1)),'/DELETE')=0then begin
if regdeletekey(hkey_current_user,'Software\Justin\URL Notifier\Checksums')<>
error_success then writeln('Deletion failed.');exitprocess(0);
end;
regcreatekey(hkey_current_user,'Software\Justin\URLNotifier',hkapp);
zeromemory(@currentfn,sizeof(currentfn));
if regcreatekey(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Services\EventLog\Application\URLNotifier',hkel)=
error_success then begin
eltypes:=EVENTLOG_AUDIT_FAILURE or EVENTLOG_AUDIT_SUCCESS or
EVENTLOG_WARNING_TYPE or eventlog_information_type;
regsetvalueex(hkel,'TypesSupported',0,reg_dword,@eltypes,4);regsetvalueex(hkel,
'EventMessageFile',0,reg_sz,pchar(paramstr(0)),(1+length(paramstr(0))*
sizeof(char)));regclosekey(hkel);rs:=sizeof(elcomputer);strcopy(elcomputer,
'\\127.0.0.1');regqueryvalueex(hkapp,'EventLogComputer',nil,nil,@elcomputer,@rs);
writeevent(log_startup,eventlog_information_type,0,[],nil);
end else writeln('Notice: Could not register eventlog, please run as admin first');
if stricomp('/BEEP',pchar(paramstr(1)))=0then begin if stricomp(pchar(paramstr(2)),
'/OFF')=0then soundmode :=0 else soundmode:=makelong(makeword(sound_mode_beep,
strtointdef(paramstr(3),5)),strtointdef(paramstr(2),1000));writeln(Syserrormessage(
regsetvalueex(hkapp,'SoundMode',0,reg_dword,@soundmode,4)));regclosekey(hkapp);
exitprocess(0);
end;
if stricomp('/SOUND',pchar(paramstr(1)))=0then begin if stricomp(pchar(paramstr(2)),
'/OFF')=0then soundmode :=0 else soundmode:=SOUND_MODE_PLAY_ONCE;
writeln(Syserrormessage(regsetvalueex(hkapp,'SoundMode',0,reg_dword,@soundmode,4)));
regclosekey(hkapp);
exitprocess(0);
end;
writeln(datetimetostr(now),' - Started, Monitoring ',paramcount,' URL(s)');
regcreatekey(hkapp,'CheckSums',checksumkey);
SetConsoleCtrlHandler(@finishmonitoring,true);
while true do
begin
rs:=4;soundmode:=SOUND_MODE_OFF;Regqueryvalueex(hkapp,'SoundMode',nil,nil,
@soundmode,@rs);rs:=4;sleeptime:=6;regqueryvalueeX(hkapp,'SleepTime',nil,nil,
@sleeptime,@rs);
for i:=1to paramcount do begin rs:=4;currentcrc:=0;regqueryvalueex(checksumkey,
pchar(paramstr(i)),nil,nil,@currentcrc,@rs);herr:=urldownloadtocachefile(nil,
PChar(paramstr(i)),currentfn,max_path,0,nil);if herr=s_ok then begin
calccrc32(currentfn,newcrc);if(newcrc<>currentcrc)and(currentcrc>0)and(newcrc>0)
then begin case lobyte(loword(soundmode))of
sound_mode_beep:beep(hiword(soundmode),hibyte(loword(soundmode))*1000);
sound_mode_play_once:playsound('OnChange.wav',0,snd_filename or snd_async);
end; writeevent(log_changed_found,eventlog_audit_success,0,[pchar(paramstr(i))],
nil);writeln(datetimetostr(now),' - Changed: ',paramstr(1),#32,geturlsize,
' CRC32:',inttohex(newcrc,8));case messagebox(0,strlfmt(mbtext,1024,
'The file at the following URL has changed:'#13#10'%s'#13#10'View the file?',[
paramstr(1)]),'URL Notifier',mb_iconinformation or mb_yesno)of
idyes:begin seerr:=shellexecute(0,nil,pchar(paramstr(i)),nil,nil,sw_show);if
seerr<33then writeln(datetimetostr(now),' - LaunchError:',syserrormessage(seerr));
end;
idno:asm nop end;
end;end;end else begin writeln(datetimetostr(now),' - Error(',herr,'): ',
paramstr(i));writeevent(log_failed_request,EVENTLOG_AUDIT_FAILURE,sizeof(herr),[
pchar(paramstr(i))],@herr);
end;
if regsetvalueex(checksumkey,pchar(paramstr(i)),0,reg_dword,@newcrc,4)<>
error_success then writeevent(log_regfailed,eventlog_warning_type,0,[],nil);
end;
sleep(sleeptime*10000);
end;

All programs are virus free. Some antivirus software might say its "suspicious" or a "Potentionaly Unwanted Program". Some of them rate them on what there code looks like no matter if theres a definition in the virus database. If any of them are detected any Antivirus I will zip the software with the password "justin" j is lowercase

delphijustin Industries is an Autism Supported Business
Social Media Auto Publish Powered By : XYZScripts.com
All in one
Start
Amazon.com, Inc. OH Dublin
Your cart is empty.
Loading...