A simple tool to delete usenet posts. Just copy the header of the post you want to delete (just the header, nothing more) into the main textbox and click the Do It button.

When you cancel a post you are basically just sending the original header, but with "X-Cancelled-by" and "Control: cancel" fields added to the header.

Not all NNTP servers will allow you to delete posts.

Code:
#COMPILE EXE
#INCLUDE "WIN32API.INC"

GLOBAL hDlg1 AS LONG

%DIALOG1  =  101
%LABEL1   = 1001
%TEXTBOX1 = 1002
%LABEL2   = 1003
%TEXTBOX2 = 1004
%BUTTON1  = 1005

DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG

DECLARE SUB DoCancelPost
$AppTitle = "NNTP Canceller"

FUNCTION PBMAIN()
    ShowDIALOG1 %HWND_DESKTOP
END FUNCTION

CALLBACK FUNCTION ShowDIALOG1Proc()
    SELECT CASE AS LONG CBMSG
        CASE %WM_NCACTIVATE
            STATIC hWndSaveFocus AS DWORD
            IF ISFALSE CBWPARAM THEN  ' Save control focus
                hWndSaveFocus = GetFocus()
            ELSEIF hWndSaveFocus THEN ' Restore control focus
                SetFocus(hWndSaveFocus): hWndSaveFocus = 0
            END IF
        CASE %WM_COMMAND
            SELECT CASE AS LONG CBCTL
                CASE %BUTTON1
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        DoCancelPost
                    END IF
            END SELECT
    END SELECT
END FUNCTION

FUNCTION GetField(sTxt AS STRING, sField AS STRING) AS STRING
LOCAL i1 AS LONG, i2 AS LONG, lLen AS LONG
lLen = LEN(sField)
i1 = INSTR(1, sTxt, sField)
i2 = INSTR(i1, sTxt, CHR$(13))
FUNCTION = TRIM$(MID$(sTxt, i1 + lLen, i2 - i1 - lLen))
END FUNCTION

SUB DoCancelPost
LOCAL Buffer$, hTCP AS LONG, i1 AS LONG, i2 AS LONG, sTxt AS STRING, sTmp AS STRING, sxFrom AS STRING, sxGroups AS STRING, sxSubject AS STRING, sxMsgID AS STRING, sxAgent AS STRING, sServer AS STRING, sOut AS STRING
CONTROL GET TEXT hDlg1, %TEXTBOX1 TO sTxt
CONTROL GET TEXT hDlg1, %TEXTBOX2 TO sServer
sxFrom = GetField(sTxt, "From:")
sxGroups = GetField(sTxt, "Newsgroups:")
sxSubject = GetField(sTxt, "Subject:")
sxMsgID = GetField(sTxt, "Message-ID:")
sxAgent = GetField(sTxt, "X-HTTP-UserAgent:")
sOut = "From: " & sxFrom & $CRLF & _
    "Approved: " & sxFrom & $CRLF & _
    "X-Cancelled-by: " & sxFrom & $CRLF & _
    "Control: cancel " & sxMsgID & $CRLF & _
    "Subject: cmsg cancel " & sxMsgID & $CRLF & _
    "Newsgroups: " & sxGroups & $CRLF & _
    "X-HTTP-UserAgent: " & sxAgent & $CRLF & $CRLF & _
    "cancel " & sxMsgID & $CRLF & $CRLF & $CRLF & "." & $CRLF
hTCP = FREEFILE
DIALOG SET TEXT hDlg1, "Connecting to server ..."
TCP OPEN PORT 119 AT sServer AS hTCP TIMEOUT 6000
IF ERR THEN    'Could we connect?
    MSGBOX "ERROR - Couldnt connect to " & sServer & ":119"
    DIALOG SET TEXT hDlg1, $AppTitle
    EXIT SUB
END IF
TCP RECV hTCP, 4096, Buffer$
DIALOG SET TEXT hDlg1, "Connected. Cancelling the post ..."
TCP SEND hTCP, "MODE READER" & $CRLF
TCP RECV hTCP, 4096, Buffer$
TCP SEND hTCP, "POST" & $CRLF
TCP RECV hTCP, 4096, Buffer$
TCP SEND hTCP, sOut
TCP SEND hTCP, $CRLF & "." & $CRLF
TCP RECV hTCP, 4096, Buffer$
TCP CLOSE hTCP
MSGBOX "Reply from server:" & $CRLF & Buffer$, %MB_OK + %MB_ICONINFORMATION, "Finished"
DIALOG SET TEXT hDlg1, $AppTitle
END SUB

FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt AS LONG
    LOCAL hDlg  AS DWORD
    DIALOG NEW hParent, "NNTP Post Canceller", 70, 70, 306, 238, %WS_POPUP OR _
        %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR %WS_SYSMENU OR _
        %WS_MINIMIZEBOX OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME _
        OR %DS_SETFOREGROUND OR %DS_CENTER OR %DS_3DLOOK OR %DS_NOFAILCREATE _
        OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR %WS_EX_CONTROLPARENT OR _
        %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
    CONTROL ADD LABEL,   hDlg, %LABEL1, "Post header:", 5, 5, 190, 10
    CONTROL ADD TEXTBOX, hDlg, %TEXTBOX1, "Copy the full header of the post " + _
        "here ...", 5, 15, 295, 200, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP _
        OR %WS_HSCROLL OR %WS_VSCROLL OR %ES_LEFT OR %ES_MULTILINE OR _
        %ES_AUTOHSCROLL OR %ES_WANTRETURN, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT _
        OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR
    CONTROL ADD LABEL,   hDlg, %LABEL2, "NNTP Server:", 5, 220, 55, 10
    CONTROL ADD TEXTBOX, hDlg, %TEXTBOX2, "", 65, 219, 180, 12
    CONTROL ADD BUTTON,  hDlg, %BUTTON1, "Do it", 255, 219, 45, 12
    hDlg1 = hDlg
    DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt
    FUNCTION = lRslt
END FUNCTION