Difference between revisions of "Portal:AOL-Files/Articles/Main.cpp"
Jump to navigation
Jump to search
(Created page with "{{AOL-Files}} (Originally by AOL-Files staff member Tau) This file was originally contributed to me by Maxis. He claimed that his aunt worked for AOL or something. Tri e-mai...") |
m (AD moved page Portals:AOL-Files/Articles/Main.cpp to Portal:AOL-Files/Articles/Main.cpp) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | {{AOL-Files}} | + | {{AOL-Files |
− | + | |section=articles}} | |
(Originally by AOL-Files staff member Tau) | (Originally by AOL-Files staff member Tau) | ||
Line 14: | Line 14: | ||
As he stated, it looks as this is the beginning of an AOL prog. | As he stated, it looks as this is the beginning of an AOL prog. | ||
+ | <pre> | ||
+ | #include <stdio.h /> | ||
+ | #include <windows.h /> | ||
+ | #include <winuser.h /> | ||
+ | |||
+ | #define MAX_CHATROOM 23 | ||
+ | #define MAX_SCREENNAME 32 | ||
+ | #define SCROLL_WAIT 550 | ||
+ | |||
+ | typedef struct RoomList | ||
+ | { | ||
+ | long count; | ||
+ | char name[MAX_CHATROOM][MAX_SCREENNAME]; | ||
+ | }; | ||
+ | |||
+ | static int IsChatRoom( HWND hWnd ) | ||
+ | { | ||
+ | int isChatRoom; | ||
+ | HWND hw; | ||
+ | |||
+ | isChatRoom=0; | ||
+ | |||
+ | hw=FindWindowEx( hWnd, 0, "_AOL_Edit", 0 ); | ||
+ | |||
+ | if( hw ) | ||
+ | { | ||
+ | hw=FindWindowEx( hWnd, 0, "_AOL_View", 0 ); | ||
+ | } | ||
+ | |||
+ | if( hw ) | ||
+ | { | ||
+ | hw=FindWindowEx( hWnd, 0, "_AOL_Listbox", 0 ); | ||
+ | } | ||
+ | |||
+ | if( hw ) | ||
+ | { | ||
+ | hw=FindWindowEx( hWnd, 0, "_AOL_Icon", 0 ); | ||
+ | } | ||
+ | |||
+ | if( hw ) | ||
+ | { | ||
+ | isChatRoom=1; | ||
+ | } | ||
+ | |||
+ | return isChatRoom; | ||
+ | } | ||
+ | |||
+ | typedef struct GetChatRoomParams | ||
+ | { | ||
+ | int isChatRoom; | ||
+ | HWND hWnd; | ||
+ | } GetChatRoomParams; | ||
+ | |||
+ | static BOOL CALLBACK GetChatRoomProc( HWND hWnd, LPARAM lParam ) | ||
+ | { | ||
+ | GetChatRoomParams *param; | ||
+ | |||
+ | param=(GetChatRoomParams *)lParam; | ||
+ | |||
+ | param->isChatRoom=IsChatRoom( hWnd ); | ||
+ | |||
+ | if( param->isChatRoom ) | ||
+ | { | ||
+ | param->hWnd=hWnd; | ||
+ | } | ||
+ | |||
+ | return !param->isChatRoom; | ||
+ | } | ||
+ | |||
+ | static HWND GetChatRoom( HWND hAOL ) | ||
+ | { | ||
+ | HWND hChatWnd; | ||
+ | GetChatRoomParams param; | ||
+ | |||
+ | param.isChatRoom=0; | ||
+ | |||
+ | EnumChildWindows( hAOL, (WNDENUMPROC)GetChatRoomProc, (LPARAM)¶m ); | ||
+ | |||
+ | if( param.isChatRoom ) | ||
+ | { | ||
+ | hChatWnd=param.hWnd; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | hChatWnd=0; | ||
+ | } | ||
+ | |||
+ | return hChatWnd; | ||
+ | } | ||
+ | |||
+ | void SendChatRoom( HWND hAOLWnd, char *text ) | ||
+ | { | ||
+ | HWND hChatWnd; | ||
+ | HWND hEditWnd; | ||
+ | |||
+ | hChatWnd=GetChatRoom( hAOLWnd ); | ||
+ | |||
+ | hEditWnd=FindWindowEx( hChatWnd, 0, "_AOL_Edit", 0 ); | ||
+ | |||
+ | if( hEditWnd ) | ||
+ | { | ||
+ | // SetWindowText( hEditWnd, text ); | ||
+ | |||
+ | SendMessage( hEditWnd, WM_SETTEXT, 0, (LPARAM)text ); | ||
+ | SendMessage( hEditWnd, WM_CHAR, 13, 0 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | long GetChatRoomCount( HWND hAOLWnd ) | ||
+ | { | ||
+ | long count=0; | ||
+ | HWND hChatWnd; | ||
+ | HWND hListWnd; | ||
+ | |||
+ | hChatWnd=GetChatRoom( hAOLWnd ); | ||
+ | |||
+ | if( hChatWnd ) | ||
+ | { | ||
+ | hListWnd=FindWindowEx( hChatWnd, 0, "_AOL_Listbox", 0 ); | ||
+ | |||
+ | if( hListWnd ) | ||
+ | { | ||
+ | count=SendMessage( hListWnd, LB_GETCOUNT, 0, 0 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return count; | ||
+ | } | ||
+ | |||
+ | static void Wait( long mSecs ) | ||
+ | { | ||
+ | DWORD startTime, curTime; | ||
+ | |||
+ | startTime=GetTickCount(); | ||
+ | |||
+ | do | ||
+ | { | ||
+ | curTime=GetTickCount(); | ||
+ | } | ||
+ | while( (curTime-startTime)<msecs if( while( buf[1024] c n long *text haolwndchar hwnd scrollchattext( void )static />60 ) | ||
+ | { | ||
+ | c=60; | ||
+ | } | ||
+ | |||
+ | strncpy( buf, text, c ); | ||
+ | |||
+ | buf[n]=0; | ||
+ | |||
+ | SendChatRoom( hAOLWnd, buf ); | ||
+ | |||
+ | text+=c; | ||
+ | n-=c; | ||
+ | |||
+ | if( n ) | ||
+ | { | ||
+ | Wait( SCROLL_WAIT ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void RaiseWinErr( void ) | ||
+ | { | ||
+ | HRESULT code; | ||
+ | char buf[1024]; | ||
+ | char *str; | ||
+ | |||
+ | code=GetLastError(); | ||
+ | |||
+ | FormatMessage | ||
+ | ( | ||
+ | FORMAT_MESSAGE_FROM_SYSTEM, | ||
+ | NULL, | ||
+ | code, | ||
+ | MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language | ||
+ | buf, | ||
+ | 1024, | ||
+ | NULL | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | void GetNthChatRoomName( HWND hAOLWnd, long index, char *screenName ) | ||
+ | { | ||
+ | int result; | ||
+ | HWND hChatWnd; | ||
+ | HWND hListWnd; | ||
+ | DWORD processID; | ||
+ | HANDLE hProcess; | ||
+ | char *itemData; | ||
+ | char *personData; | ||
+ | char sPerson[5]; | ||
+ | DWORD bytes; | ||
+ | DWORD lListItemHold, lListPersonHold; | ||
+ | *screenName=0; | ||
+ | |||
+ | hChatWnd=GetChatRoom( hAOLWnd ); | ||
+ | |||
+ | if( hChatWnd ) | ||
+ | { | ||
+ | hListWnd=FindWindowEx( hChatWnd, 0, "_AOL_Listbox", 0 ); | ||
+ | |||
+ | if( hListWnd ) | ||
+ | { | ||
+ | GetWindowThreadProcessId( hListWnd, &processID ); | ||
+ | |||
+ | hProcess=OpenProcess( 0x10|0xf0000|PROCESS_VM_READ, 0, processID ); | ||
+ | |||
+ | if( hProcess ) | ||
+ | { | ||
+ | lListItemHold=(DWORD)SendMessage( hListWnd, LB_GETITEMDATA, index-1, 0 ); | ||
+ | lListItemHold=lListItemHold+24; | ||
+ | |||
+ | result=ReadProcessMemory( hProcess, (void *)lListItemHold, &sPerson, 4, &bytes ); | ||
+ | if( !result ) | ||
+ | { | ||
+ | RaiseWinErr(); | ||
+ | } | ||
+ | |||
+ | memcpy( &lListPersonHold, &sPerson, 4 ); | ||
+ | lListPersonHold=lListPersonHold+6; | ||
+ | |||
+ | ReadProcessMemory( hProcess, (void *)lListPersonHold, screenName, 16, &bytes ); | ||
+ | |||
+ | CloseHandle( hProcess ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void GetChatRoomList( HWND hAOLWnd, RoomList *pRoomList ) | ||
+ | { | ||
+ | long i; | ||
+ | long count; | ||
+ | |||
+ | pRoomList->count=GetChatRoomCount( hAOLWnd ); | ||
+ | |||
+ | for( i=pRoomList->count;i>=1;i-- ) | ||
+ | { | ||
+ | if( i>(pRoomList->count=GetChatRoomCount( hAOLWnd )) ) | ||
+ | { | ||
+ | i=pRoomList->count; | ||
+ | } | ||
+ | |||
+ | GetNthChatRoomName( hAOLWnd, i, pRoomList->name[i-1] ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void GetLastChatLine( HWND hAOLWnd, char *lastLine ) | ||
+ | { | ||
+ | HWND hChatWnd; | ||
+ | HWND hViewWnd; | ||
+ | long size; | ||
+ | char *buf; | ||
+ | char *c; | ||
+ | |||
+ | hChatWnd=GetChatRoom( hAOLWnd ); | ||
+ | |||
+ | if( hChatWnd ) | ||
+ | { | ||
+ | hViewWnd=FindWindowEx( hChatWnd, 0, "_AOL_View", 0 ); | ||
+ | |||
+ | if( hViewWnd ) | ||
+ | { | ||
+ | size=SendMessage( hViewWnd, 14, 0, 0 ); | ||
+ | |||
+ | buf=(char *)malloc( size+1 ); | ||
+ | |||
+ | if( buf ) | ||
+ | { | ||
+ | SendMessage( hViewWnd, 13, size+1, (LPARAM)buf ); | ||
+ | |||
+ | c=buf+size-1; | ||
+ | |||
+ | while( *c!='\n' ) c--; | ||
+ | |||
+ | c++; | ||
+ | strcpy( lastLine, c ); | ||
+ | |||
+ | c=lastLine; | ||
+ | |||
+ | while( *c!='\n' ) c++; | ||
+ | *c=0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | #define kAOLChatMemberLeftMsg 1 | ||
+ | typedef struct AOLChatMemberLeft | ||
+ | { | ||
+ | char *name; | ||
+ | } AOLChatMemberLeft; | ||
+ | |||
+ | #define kAOLChatMemberJoinMsg 2 | ||
+ | typedef struct AOLChatMemberJoin | ||
+ | { | ||
+ | char *name; | ||
+ | } AOLChatMemberJoin; | ||
+ | |||
+ | static void DoChatMemberLeft( HWND hAOLWnd, AOLChatMemberLeft *param ) | ||
+ | { | ||
+ | char buf[255]; | ||
+ | |||
+ | sprintf( buf, "ATTENTION: %s has LEFT", param->name ); | ||
+ | SendChatRoom( hAOLWnd, buf ); | ||
+ | Wait( SCROLL_WAIT ); | ||
+ | } | ||
+ | |||
+ | static void DoChatMemberJoin( HWND hAOLWnd, AOLChatMemberJoin *param ) | ||
+ | { | ||
+ | char buf[255]; | ||
+ | |||
+ | sprintf( buf, "ATTENTION: %s has ENTERED", param->name ); | ||
+ | SendChatRoom( hAOLWnd, buf ); | ||
+ | Wait( SCROLL_WAIT ); | ||
+ | } | ||
+ | |||
+ | static void AOLPostEvent( HWND hAOLWnd, long event, void *param ) | ||
+ | { | ||
+ | switch( event ) | ||
+ | { | ||
+ | case kAOLChatMemberLeftMsg: | ||
+ | { | ||
+ | DoChatMemberLeft( hAOLWnd, (AOLChatMemberLeft *)param ); | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | case kAOLChatMemberJoinMsg: | ||
+ | { | ||
+ | DoChatMemberJoin( hAOLWnd, (AOLChatMemberJoin *)param ); | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | static RoomList gRoomList; | ||
+ | |||
+ | static void AOLInit( HWND hAOLWnd ) | ||
+ | { | ||
+ | gRoomList.count=0; | ||
+ | |||
+ | GetChatRoomList( hAOLWnd, &gRoomList ); | ||
+ | } | ||
+ | |||
+ | static int InRoomList( RoomList *roomList, char *name ) | ||
+ | { | ||
+ | int found; | ||
+ | long i; | ||
+ | |||
+ | found=0; | ||
+ | |||
+ | for( i=1;i<=roomList->count;i++ ) | ||
+ | { | ||
+ | if( !strcmp( roomList->name[i-1], name ) ) | ||
+ | { | ||
+ | found=1; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return found; | ||
+ | } | ||
+ | |||
+ | static void AOLProcessChatRoom( HWND hAOLWnd ) | ||
+ | { | ||
+ | RoomList roomList; | ||
+ | long i, j; | ||
+ | int found; | ||
+ | AOLChatMemberLeft chatMemberLeftMsg; | ||
+ | AOLChatMemberJoin chatMemberJoinMsg; | ||
+ | |||
+ | GetChatRoomList( hAOLWnd, &roomList ); | ||
+ | |||
+ | // process people that have left | ||
+ | |||
+ | for( i=1;i<=gRoomList.count;i++ ) | ||
+ | { | ||
+ | if( !InRoomList( &roomList, gRoomList.name[i-1] ) ) | ||
+ | { | ||
+ | chatMemberLeftMsg.name=gRoomList.name[i-1]; | ||
+ | AOLPostEvent( hAOLWnd, kAOLChatMemberLeftMsg, &chatMemberLeftMsg ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // process people that have entered | ||
+ | |||
+ | for( i=1;i<=roomList.count;i++ ) | ||
+ | { | ||
+ | if( !InRoomList( &gRoomList, roomList.name[i-1] ) ) | ||
+ | { | ||
+ | chatMemberJoinMsg.name=roomList.name[i-1]; | ||
+ | AOLPostEvent( hAOLWnd, kAOLChatMemberJoinMsg, &chatMemberJoinMsg ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | gRoomList=roomList; // update the list | ||
+ | } | ||
+ | |||
+ | static void AOLProcessEvents( HWND hAOLWnd ) | ||
+ | { | ||
+ | AOLProcessChatRoom( hAOLWnd ); | ||
+ | } | ||
+ | |||
+ | int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, | ||
+ | LPSTR lpCmdLine, int nCmdShow ) | ||
+ | { | ||
+ | HWND hAOLWnd; | ||
+ | HWND hChatWnd; | ||
+ | long i, count; | ||
+ | int done; | ||
+ | |||
+ | hAOLWnd = FindWindow("AOL Frame25", 0 ); | ||
+ | |||
+ | AOLInit( hAOLWnd ); | ||
+ | |||
+ | done=0; | ||
+ | |||
+ | do | ||
+ | { | ||
+ | AOLProcessEvents( hAOLWnd ); | ||
+ | } | ||
+ | while( !done ); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | /* | ||
+ | #if 0 | ||
+ | hChatWnd = GetChatRoom( hAOLWnd ); | ||
+ | |||
+ | SendChatRoom( hAOLWnd, "[-=+] ------------------------ [+=-]" ); | ||
+ | Wait( SCROLL_WAIT ); | ||
+ | SendChatRoom( hAOLWnd, "[ ] Highland Loaded [ ]" ); | ||
+ | Wait( SCROLL_WAIT ); | ||
+ | SendChatRoom( hAOLWnd, "[-=+] ------------------------ [+=-]" ); | ||
+ | Wait( SCROLL_WAIT ); | ||
+ | |||
+ | GetWindowText( hChatWnd, title, 255 ); | ||
+ | |||
+ | count=GetChatRoomCount( hAOLWnd ); | ||
+ | |||
+ | sprintf( buf, "%d people: ", count ); | ||
+ | |||
+ | for( i=1;i<=count;i++ ) | ||
+ | { | ||
+ | GetNthChatRoomName( hAOLWnd, i, screenName ); | ||
+ | |||
+ | strcat( buf, screenName ); | ||
+ | |||
+ | if( i!=count ) | ||
+ | { | ||
+ | strcat( buf, ", " ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ScrollChatText( hAOLWnd, buf ); | ||
+ | |||
+ | GetLastChatLine( hAOLWnd, buf ); | ||
+ | #endif | ||
+ | */ | ||
+ | </pre> | ||
[[Category:AOL]] | [[Category:AOL]] | ||
[[Category:AOL-Files]] | [[Category:AOL-Files]] | ||
[[Category:FDO-Files]] | [[Category:FDO-Files]] |
Latest revision as of 03:06, 19 June 2021
AOL-Files | Articles | Downloads | FDO91 | |
(Originally by AOL-Files staff member Tau)
This file was originally contributed to me by Maxis. He claimed that his aunt worked for AOL or something. Tri e-mailed me regarding me previous thoughts on this and informed me that this is not an official chat room code, mainly because of the
SendChatRoom( hAOLWnd, "[-=+] ------------------------ [+=-]" ); Wait( SCROLL_WAIT ); SendChatRoom( hAOLWnd, "[ ] Highland Loaded [ ]" ); Wait( SCROLL_WAIT ); SendChatRoom( hAOLWnd, "[-=+] ------------------------ [+=-]" ); Wait( SCROLL_WAIT );
As he stated, it looks as this is the beginning of an AOL prog.
#include <stdio.h /> #include <windows.h /> #include <winuser.h /> #define MAX_CHATROOM 23 #define MAX_SCREENNAME 32 #define SCROLL_WAIT 550 typedef struct RoomList { long count; char name[MAX_CHATROOM][MAX_SCREENNAME]; }; static int IsChatRoom( HWND hWnd ) { int isChatRoom; HWND hw; isChatRoom=0; hw=FindWindowEx( hWnd, 0, "_AOL_Edit", 0 ); if( hw ) { hw=FindWindowEx( hWnd, 0, "_AOL_View", 0 ); } if( hw ) { hw=FindWindowEx( hWnd, 0, "_AOL_Listbox", 0 ); } if( hw ) { hw=FindWindowEx( hWnd, 0, "_AOL_Icon", 0 ); } if( hw ) { isChatRoom=1; } return isChatRoom; } typedef struct GetChatRoomParams { int isChatRoom; HWND hWnd; } GetChatRoomParams; static BOOL CALLBACK GetChatRoomProc( HWND hWnd, LPARAM lParam ) { GetChatRoomParams *param; param=(GetChatRoomParams *)lParam; param->isChatRoom=IsChatRoom( hWnd ); if( param->isChatRoom ) { param->hWnd=hWnd; } return !param->isChatRoom; } static HWND GetChatRoom( HWND hAOL ) { HWND hChatWnd; GetChatRoomParams param; param.isChatRoom=0; EnumChildWindows( hAOL, (WNDENUMPROC)GetChatRoomProc, (LPARAM)¶m ); if( param.isChatRoom ) { hChatWnd=param.hWnd; } else { hChatWnd=0; } return hChatWnd; } void SendChatRoom( HWND hAOLWnd, char *text ) { HWND hChatWnd; HWND hEditWnd; hChatWnd=GetChatRoom( hAOLWnd ); hEditWnd=FindWindowEx( hChatWnd, 0, "_AOL_Edit", 0 ); if( hEditWnd ) { // SetWindowText( hEditWnd, text ); SendMessage( hEditWnd, WM_SETTEXT, 0, (LPARAM)text ); SendMessage( hEditWnd, WM_CHAR, 13, 0 ); } } long GetChatRoomCount( HWND hAOLWnd ) { long count=0; HWND hChatWnd; HWND hListWnd; hChatWnd=GetChatRoom( hAOLWnd ); if( hChatWnd ) { hListWnd=FindWindowEx( hChatWnd, 0, "_AOL_Listbox", 0 ); if( hListWnd ) { count=SendMessage( hListWnd, LB_GETCOUNT, 0, 0 ); } } return count; } static void Wait( long mSecs ) { DWORD startTime, curTime; startTime=GetTickCount(); do { curTime=GetTickCount(); } while( (curTime-startTime)<msecs if( while( buf[1024] c n long *text haolwndchar hwnd scrollchattext( void )static />60 ) { c=60; } strncpy( buf, text, c ); buf[n]=0; SendChatRoom( hAOLWnd, buf ); text+=c; n-=c; if( n ) { Wait( SCROLL_WAIT ); } } } void RaiseWinErr( void ) { HRESULT code; char buf[1024]; char *str; code=GetLastError(); FormatMessage ( FORMAT_MESSAGE_FROM_SYSTEM, NULL, code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language buf, 1024, NULL ); } void GetNthChatRoomName( HWND hAOLWnd, long index, char *screenName ) { int result; HWND hChatWnd; HWND hListWnd; DWORD processID; HANDLE hProcess; char *itemData; char *personData; char sPerson[5]; DWORD bytes; DWORD lListItemHold, lListPersonHold; *screenName=0; hChatWnd=GetChatRoom( hAOLWnd ); if( hChatWnd ) { hListWnd=FindWindowEx( hChatWnd, 0, "_AOL_Listbox", 0 ); if( hListWnd ) { GetWindowThreadProcessId( hListWnd, &processID ); hProcess=OpenProcess( 0x10|0xf0000|PROCESS_VM_READ, 0, processID ); if( hProcess ) { lListItemHold=(DWORD)SendMessage( hListWnd, LB_GETITEMDATA, index-1, 0 ); lListItemHold=lListItemHold+24; result=ReadProcessMemory( hProcess, (void *)lListItemHold, &sPerson, 4, &bytes ); if( !result ) { RaiseWinErr(); } memcpy( &lListPersonHold, &sPerson, 4 ); lListPersonHold=lListPersonHold+6; ReadProcessMemory( hProcess, (void *)lListPersonHold, screenName, 16, &bytes ); CloseHandle( hProcess ); } } } } void GetChatRoomList( HWND hAOLWnd, RoomList *pRoomList ) { long i; long count; pRoomList->count=GetChatRoomCount( hAOLWnd ); for( i=pRoomList->count;i>=1;i-- ) { if( i>(pRoomList->count=GetChatRoomCount( hAOLWnd )) ) { i=pRoomList->count; } GetNthChatRoomName( hAOLWnd, i, pRoomList->name[i-1] ); } } void GetLastChatLine( HWND hAOLWnd, char *lastLine ) { HWND hChatWnd; HWND hViewWnd; long size; char *buf; char *c; hChatWnd=GetChatRoom( hAOLWnd ); if( hChatWnd ) { hViewWnd=FindWindowEx( hChatWnd, 0, "_AOL_View", 0 ); if( hViewWnd ) { size=SendMessage( hViewWnd, 14, 0, 0 ); buf=(char *)malloc( size+1 ); if( buf ) { SendMessage( hViewWnd, 13, size+1, (LPARAM)buf ); c=buf+size-1; while( *c!='\n' ) c--; c++; strcpy( lastLine, c ); c=lastLine; while( *c!='\n' ) c++; *c=0; } } } } #define kAOLChatMemberLeftMsg 1 typedef struct AOLChatMemberLeft { char *name; } AOLChatMemberLeft; #define kAOLChatMemberJoinMsg 2 typedef struct AOLChatMemberJoin { char *name; } AOLChatMemberJoin; static void DoChatMemberLeft( HWND hAOLWnd, AOLChatMemberLeft *param ) { char buf[255]; sprintf( buf, "ATTENTION: %s has LEFT", param->name ); SendChatRoom( hAOLWnd, buf ); Wait( SCROLL_WAIT ); } static void DoChatMemberJoin( HWND hAOLWnd, AOLChatMemberJoin *param ) { char buf[255]; sprintf( buf, "ATTENTION: %s has ENTERED", param->name ); SendChatRoom( hAOLWnd, buf ); Wait( SCROLL_WAIT ); } static void AOLPostEvent( HWND hAOLWnd, long event, void *param ) { switch( event ) { case kAOLChatMemberLeftMsg: { DoChatMemberLeft( hAOLWnd, (AOLChatMemberLeft *)param ); break; } case kAOLChatMemberJoinMsg: { DoChatMemberJoin( hAOLWnd, (AOLChatMemberJoin *)param ); break; } } } static RoomList gRoomList; static void AOLInit( HWND hAOLWnd ) { gRoomList.count=0; GetChatRoomList( hAOLWnd, &gRoomList ); } static int InRoomList( RoomList *roomList, char *name ) { int found; long i; found=0; for( i=1;i<=roomList->count;i++ ) { if( !strcmp( roomList->name[i-1], name ) ) { found=1; break; } } return found; } static void AOLProcessChatRoom( HWND hAOLWnd ) { RoomList roomList; long i, j; int found; AOLChatMemberLeft chatMemberLeftMsg; AOLChatMemberJoin chatMemberJoinMsg; GetChatRoomList( hAOLWnd, &roomList ); // process people that have left for( i=1;i<=gRoomList.count;i++ ) { if( !InRoomList( &roomList, gRoomList.name[i-1] ) ) { chatMemberLeftMsg.name=gRoomList.name[i-1]; AOLPostEvent( hAOLWnd, kAOLChatMemberLeftMsg, &chatMemberLeftMsg ); } } // process people that have entered for( i=1;i<=roomList.count;i++ ) { if( !InRoomList( &gRoomList, roomList.name[i-1] ) ) { chatMemberJoinMsg.name=roomList.name[i-1]; AOLPostEvent( hAOLWnd, kAOLChatMemberJoinMsg, &chatMemberJoinMsg ); } } gRoomList=roomList; // update the list } static void AOLProcessEvents( HWND hAOLWnd ) { AOLProcessChatRoom( hAOLWnd ); } int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { HWND hAOLWnd; HWND hChatWnd; long i, count; int done; hAOLWnd = FindWindow("AOL Frame25", 0 ); AOLInit( hAOLWnd ); done=0; do { AOLProcessEvents( hAOLWnd ); } while( !done ); return 0; } /* #if 0 hChatWnd = GetChatRoom( hAOLWnd ); SendChatRoom( hAOLWnd, "[-=+] ------------------------ [+=-]" ); Wait( SCROLL_WAIT ); SendChatRoom( hAOLWnd, "[ ] Highland Loaded [ ]" ); Wait( SCROLL_WAIT ); SendChatRoom( hAOLWnd, "[-=+] ------------------------ [+=-]" ); Wait( SCROLL_WAIT ); GetWindowText( hChatWnd, title, 255 ); count=GetChatRoomCount( hAOLWnd ); sprintf( buf, "%d people: ", count ); for( i=1;i<=count;i++ ) { GetNthChatRoomName( hAOLWnd, i, screenName ); strcat( buf, screenName ); if( i!=count ) { strcat( buf, ", " ); } } ScrollChatText( hAOLWnd, buf ); GetLastChatLine( hAOLWnd, buf ); #endif */