QIRC is a IRC client, that connects to a single IRC channel and relays all messages to a running QUAKE3.EXE. All IRC messages appear in game as ordinary chat messages. It's also possible to post into this group form the Quake 3 console. Since my own client doesn't work with all IRC servers (exspecially the QuakeNet servers), I put all the Quake 3 interface code into a DLL, that is used by a mIRC script. This is much more convenient and flexible than my own IRC client.

QIRC - an IRC standalone client for Quake 3 .
Date : 31/05/2000
Size : 66 KB
Status: beta

QIRC for mIRC. A mIRC plugin for Quake 3 Arena.
Date : 06/06/2000
Size : 14 KB
Status: stable

QIRC DLL source code for VC++
Date : 06/06/2000
Size : 3 KB
Status: stable

A screenshot of the QIRC client

For all Quake developers, this is a little description of QIRC's tricky "Quake 3 Remote Control Technology (TM)". When playing Quake in fullscreen there exists a nonvisible console window under Win32. To see this window switch to window-mode (r_fullscreen 0) and make it visible (viewlog 1, it's cheat-protected, so use devmap). You can send commands to the quake client by typing them in this console window. With this technique you have total control over a local q3 client or server.

First, get the handle of this non-visible console window:

  HWND hwnd = FindWindow("Q3 WinConsole","Quake 3 Console");
With this handle enumerate through all child windows with:

  EnumChildWindows( hwnd,EnumChildProc,NULL);		

QIRC sends the keys in the function EnumChildProc with :
  for (int i = 0; i<length;i++)
    SendMessage(hwnd,WM_CHAR ,command[i],1);
    // and the CR 
    SendMessage(hwnd,WM_CHAR ,13,1);

To read the feedback messages I used:
  SendMessage(hwnd,WM_GETTEXT ,(WPARAM)sizeof(console),
  	(LPARAM) console);

To read the current console content. To clear the console use:

  SendMessage(hwnd,WM_SETTEXT ,(WPARAM)NULL,(LPARAM)"");