I have implemented this in WinBatch which is a Window's scripting language. WinBatch is not freeware. However, this could easily be converted to Visual Basic which could then be freely distributed along with the Visual Basic runtime.
The code for the HCCE version follows below along with a sample screenshot.
WinTitle(WinName(), "BuoyBlaster")
; Mark Kratzer 12/19/07
;
; Utility to feed buoy drop characters into HCCE at a steady
; rate. It will be activated via the G15 keyboard as G15 macro
; key.
;
; Usage is to plot a path for a helo and then start this macro.
;
; It will prompt for an initial frequency, but also use a default.
;
; Hold SHIFT key down to increase delay. Hold CTRL key down to decrease delay.
;
; Staff messages cause a temporary suspension.
;
; Pause the game to terminate.
; ----- Definitions ------
GameWindowName="Harpoon"
BuoyDefaultInterval=5
AckSound="AckSound.wav"
; ----- Initialize -----
; ----- Drop Buoys -----
WindowName=WinGetActive() ; get a custom frequency
BuoyInterval=AskLine("BuoyBlaster", "Enter seconds (wall clock) between buoys?", BuoyDefaultInterval)
Delay(1)
WinActivate(WindowName) ; return focus to HCCE
While @True
Delay(BuoyInterval) ; wait for next buoy drop
If IsKeyDown(@SHIFT) Then
BuoyInterval=BuoyInterval+2 ; increase by two seconds
Beep() ; two beeps for longer delay
Delay(1)
Beep()
End If
If IsKeyDown(@CTRL) Then
BuoyInterval=BuoyInterval-2 ; decrease by two seconds
If BuoyInterval<1 Then BuoyInterval=1 ; cannot go negative
Beep() ; one beep for shorter delay
End If
If StrIndex(WinGetActive(),GameWindowName,1,@FWDSCAN) Then ; Does HCCE have focus?
SendKey(".") ; emit buoy
PlayWaveForm(AckSound, 0) ; play sound for buoy drop
Else
If WinGetActive()<>"Staff Message" Then
Exit ; if pause or lose focus, then terminate
End If ; temporarily skip during staff message
End If
End While



