Alpha32.bas: AOL Programming Made Easy

I first got into programming in about 1998 when a friend of mine showed me an AOL prog, an add-on for the then-popular America Online software that enabled you to do cool, geeky things like kick people offline, steal passwords, etc. Most of the progs, I found out, were written using Microsoft Visual Basic, a program that lets you create new software. I downloaded a free copy of Visual Basic 5.0 CCE edition (free) and was on my way.

In order to make an add-on for the America Online software (or any other software for tha matter), you had to take advantage of the Windows API, which is basically a set of tools Microsoft provides developers so that they can interact with the Windows environment.

A BAS file is a collection of code grouped together for a specfic purpose. For AOL progs, a typical BAS file enabled you interact with the America Online software using the Windows API. Add-on programmers would write these BAS files and exchange them with each other to save time and so they could share their work with others.

As I learned more and more about interacting with AOL while writing Revolution and later Meridian, I started writing my own BAS file. Over several months it grew into a fairly robust collection of functions and procedures for building add-ons. Encouraged by the glory other developers were seeing after releasing their BAS files, I decided to release mine, which I called Alpha32.bas. In my ever-optimistic mind, it was going to blow away everything else that had been created up to that point.

I enthusiastically wrote up some documentation, released it, and… nothing happened (this has been a recurring trend for me). Actually, I got a few compliments from developers, but it never gained much traction. Another developer released a BAS file called dos32.bas at about the same time which, I admit, blew mine out of the water.

For the curious, you can download Alpha32.bas by clicking here. The code is pretty bad, but hey, it was a start.

Here’s a peak:

alpha32

And here’s the documentation. It seems the I never finished it — not sure what happened there…

~IsWindowThere
This is used mostly for errors. For example if you have just made a code to click an icon in the chat room,    and your testing it and it doesnt work? Whats wrong? Well the first thing most people would do is to check   if you found the right icon. You Would Put Your Code. Then Put Call IsWindowThere(AoIcon&). If It  Finds The icon the n there is a problem with your ClickIcon sub, If it doesnt find the icon, there is a problem  with your coding and now you know that you have to fix it.

~AOLWindow&
Returns The hwnd of The America Online Client Window. The AOLWindow Contains all other windows in AOL except an _AOL_Modal and an _AOL_Splash. If You hide the AOLWindow You Hide All Other Childs In AOL.

~AolMdi
The AOL Mdi’s class name is “MDIClient”. The MDI Client Is The Parent Of All The AOL Childs. If you hide the MDIClient then all childs will we gone and all you will see on the AOL screen is a white rectangular area.

~AOLChild
The AOLChild Is Every window in AOL that has a caption and looks like a VB form. Every AOL Child has a caption which you can change with the change title sub. One example Of An AOL Child is the Welcome Screen; it has a title of “Welcome, …” and has childs that you can click.

~AOLModal
A Separeate Window From AOL that was probably made disable the user from using AOL until they have read or seen the AOL Modal. In short the AOL Modal Is a Bannar that says “You must acknowledge the information withing this window before you continue running AOL”. Some examples of AOL Modals are any set prefrences windows (Which you can acces via My AOL | Prefrences), the box that pops up saying “Your mail has been sent”, after you send mail, and the Invalid Password Box.

~FindChildByClass
Finds a given child by its class name and its parent window. Every window has a class name, a String that inedtifies it. Every window also returns a Long Variable that identifies it. This Function Is that same as FindWindowEx(Parent&, 0, “ClassName”, vbNullString) but most programmers profer FindChildByClass because most people are more familiar wih it then FindWindowEx.

~ClassTimes
Every Window Has a certain amout of childs. This Function returns The Totla Number Of childs within a parent window.

~ChangeTitle
Changes The Handle’s Title/Caption/Text. You can change any windows title. For example if you want to change the ChatRoom’s Title You Would Put:  Call ChangeTitle(FindChatRoom&, “This is the new title of the chat room!”

~Find Windows: Return The handle of a certain AOL Child containing certain items
FindChatRoom: Returns The handle of an AOL Child which is the chatroom
FindIMWindow: Returns The handle of a sent or received IM window. This is the IM Window         That Actually Has The Things You Typed In it. This des not return the handle of the IM         Window When you first opn the window to send an Instant Message
FindWebPage: Returns The Handle To A Web page opened through AOL
FindMailWindow: Returns The handle to the mail window that has your New Mails Listed
FindListWindow: Returns The handle of an AOL Child With an _AOL_Listbox child in it
FindViewWindow: Returns the handle of an AOL Child With an _AOL_View In It

~UserSN
Returns The Current User’s Screen Name

~KillWait
If your AOL Mouse pointer is an hour glass this will convert it back into a regular pointer

~IsUserOnline
Returns A TRUE if the user is online and a FALSE if the user isnt online

~GetCaption
This will find the hwnd that you specify and get its caption. For example if you want to know the     AOL Window’s caption you would put:   MsgBox “AOL’s caption is: ” &
GetCaption(AOLWindow&)

~Timeout
Pauses the vb application for a given amount of SECONDS

~StayOnTop
Positions a vb form ontop of all other windows

~DontStayOnTop
Positions a vb form so that it is NOT on top of all other windows

~FortyFiveMinuteKill
If the AOL Window pops up saying “You have been idle for 45 minutes. Please click OK within 10 minutes or you will be logged off” appears this will automatically click OK for the user. Use in a timer

~AntiIdle
If the windows comes up saying “You have been idle for a while. Do you want to stay online?” This     will click YES for the user. Use in a timer.

~ClickIcon
Cliks The hwnd. You can click an icon or you can click another hwnd. Mainly used for Icons though

~MailSend
Sends Mail to the recipiant(s) with a given subject and message. Self explanitory.

~GetWindowName
Returns The hwnd Class name of the hwnd #. For example you could get the current window with     the GetForegroudWindow function and put. MsgBox “The ClassName Of “&     GetCaption(GetForeGroundWindow) & ” is ” & GetWindowName(GetForegroundWindow)

~Keyword
Goes to a given keyword. If you want to goto the web you do not need the http://

~GetText
Returns The text from a givin hWnd

~SendChat
Sends Text to the chat room. If you are typing something when it sends the text you will not lost what you are typing.

~ChatText
Returns The Text from the RICHCNTL within the chat room.

~ChatLastSNWithMsg
Returns The Last Line In The chat room. It includes the Screen Name and what the said.

~ChatLastSN
Returns The Screen Name from the last chat line

~ChatLastLine
Returns The Message that the last person said in a chat room

IMLastSNWithMsg
IMLastSN
IMSend
IMLastLine
ChatRunner
AddRoomToListbox
AddBuddiesOnlineToListBox
ChatIgnore
AddMailToListBox
ChatLastNameToEnter
AddRoomToCombobox
ChangeLabelFont
ChangeCommandFont
TextFontElite
TextLettersElite
KillLogo
IMOtherSNFrom
PlayWave
ChatBust
TextWavy
TextLagged
ChatKillHTML
EnableAOL
MailCount
BuddyChatInvitation
MailSendWithFile
RunMenuViaToolIcon
FileExists
RunMenuByString
CloseWindow
GetMailSender
MailDelete
TextFirstLine
TextSwitchHTMLColor
CDSet
SetKeyState
SetCapslock
ActivateScreenSaver
ChatRollDice
RestartComputer
CAD
SystemTrayAddIcon
TextScrambled
ChatClearForEveryone
ChatClearForUserOnly
PuntCode
Punt
AddAOLTree
AddAOLList
MailRead
AddMembersWithNameToList
MailList
SaveText
LoadText
SaveLabel
LoadLabel
SaveListBox
LoadListBox
SearchFileExtention
StripNull
SearchExactFile
ShellAOL
AOLDirectory
DirectoryOfFile
ChatChangeListStaticCaption
ChatNumPeopleStaticCaption
CaptureScreen
TextCharTimes
TextWordCount
TextPerfect
AddMultipleRoomsToList
There
Times
ChrAscii
TextToBinary
BinaryToText

Meridian

Revolution, an add-on tool for the America Online software, was my first major programming endeavor. It taught me the fundamentals of prorgamming and how to use the Windows API to interact with the AOL client. However, because I was learning along the way the project became somewhat of an unorganized, chaotic mess.

I wanted to continue working on it, but decided that I’d be much better off taking the lessons I learned developing Revolution and starting a new project. At the time there was a plethora of AOL tools (or progs) as we called them, and my goal for this new project was to create a product that would triumph over all of them.

The name I eventually settled on was Meridian, which my friend John suggested after seeing a bottle of wine one day while we were waiting in line at the deli in our local Publix supermarket.

I started on the project in about March 1999 and worked on it heavily through around January 2000. When I was done I remember thinking that I would never again invest as much time in a single project as I just had with Meridian, which total more than 7,400 lines of code. Ironically, it’s been more than 9 years since then and I can safely say that I’ve spent more time on five projects since then (AOL-Files, PAWN, PokerShark, Eve, and Domain Pigeon — more on the middle three soon).

Screenshots

This was the main window that users saw when they loaded the program.

The thing that pops out is the millennium countdown–remember this was back in 1999/2000.

The blue to black bar at the bottom was a measure of how fast AOL was working that day. It tested how long it took to download aol.com and then compared that to the fasted time it’s ever downloaded it in. So if once it took 2 seconds to download the aol.com and now it took 4 second (remember 56K modems?), you’d be at 50% efficiency.

I think AOL is now on version 9 or something like that which is kind of surprising given how frequently they rolled them out back then. Or not surprising, given their loss or market dominance in the last decade.

File Menu

About

Sixteen letter screen names were new at the time so I guess it was important to state that.

Hotmail–sweet. Nice disclaimer too.

Greets

It was common to put a shout out menu on your software. Going back through the hardcoded messages I left is like looking at a time capsule. Check this out… this is the note I left for John, the same guy who came up with the name:

“What’s up bro? Well it look like you never we never got around to making the art. But oh well I know I was fussy about it and you did make the faded background. Anyway stay cool, and whatever happens i’ll always remember the eggs.

Yeah, bro. And eggs… yeah… no idea.

…I don’t think anyone I wrote a message for ever saw the message

Options Menu

The mind blowing thing about this is not the stupid features but the search engine list. HotBot? Looksmart? (I thought Looksmart was so good back in the day). And most of all: no Google.

Tools Menu

Award From Computer Bot

API Spy

This was actually really useful.

You hovered over a window and Meridian would tell you about it and generate the VB code to dynamically identify it.

Buddy Transfer

If you had a large buddy list it was difficult to transfer them to a new screen name because it had to be done manually. This automated the process it.

ASCII Converter

Text Converter

Fun with text manipulation.

IP to DNS Converter

IP Scanner

This tool scanned a range of IP addresses and logged their corresponding DNS equivalents.

Pixel to Color

Basically ColorZilla for Windows.

Temperature Converter

Not sure what this had to do with AOL.

View Source

Words per Minute

Chat Menu

Mimic Bot

What a brat.

Scrambler Bot

Welcome Bot

This was a common tool that AOL programmers wrote much like URL shorteners seem to be with web developers today. Whenever a person entered a chat room you’d have the software automatically greet them like “hey whats up StupidSN432?” I must have written about six different versions of this over the years.

Extended Chat

You were limited to a certain number of characters when talking in a chat room. This tool let you write as much as you wanted by breaking up the text into segments and automatically sending each one to the chat.

Chat Fader

Ohh, pretty text.

Pig Latin Converter

I think this was just another one of those this-is-interesting-though-no-one-will-ever-use-it features like the Temperature Convter.

Coversation Searcher

If someone said a word like “matt” I could send back “yeah whats up?”. Exciting.

Wave Player

By sending a special code to the chat you could cause a person’s computer to play certain tones.

Lagger

By inserting dozens of HTML tags into your chat submissions you could temporarily freeze everyone’s computer.

Mail Menu

IM Menu

IM Manipulator

This let you craft a message so that it appeared that the other person had said something that he hadn’t.

Punter

This tool enabled you to kick people offline by sending them a malformed email.

Misc Menu

When I finished with the development I released Meridian to about a dozen people who volunteered to test it. I remember it vividly because I was so excited and was so confident that it would take the AOL hacker scene by storm (again, see ALL IN Expert lessons learned).

Well, as it turns out, my computer was infected with some sort of nasty worm. When Visual Basic generated the executable files for Meridian, the worm infected all of them too. So when I sent it out for testing, everyone’s anti-virus software started going haywire, screaming that the program they were trying to run, my poor Meridian, was a virus.

I was so frustrated with this turn of events that I simply stopped working on it. In retrospect, I should have invested in some better anti-virus software, rid my computer of the worm, and redistributed it to community to get more feedback.

I told myself that I didn’t want to risk infecting anyone else’s computer. The truth, as I would later discover after years of introspection, is a bit more complicated. This work-finish-forget sequence has been a consistent theme since I began programming. I spend months–and years in some cases–working on a project with incredibly optimistic projections about its post-launch success. But as soon as I was satisfied with the product and released it, I quickly grew restless and moved on to something else. ALL IN Expert was the most recent example of this. I’ve tried to do better with Domain Pigeon and think I have, but I still struggle with the follow through. Happiness for me is in the pursuit, not the catch. But that’s a story for another day.