Send - Messenger Service Pair | CodeGuru

Send – Messenger Service Pair

Environment: Windows NT 4 SP3, Visual C++ 6 The "Send"-"Messenger" pair are ment to replace the old "Net send"-"Messenger". Actually I decided to try this because I was getting annoyed with the same message boxes on the screen, and since I couldn’t find any information about the old stuff, I made a new pair. The […]

Written By
CodeGuru Staff
CodeGuru Staff
Feb 8, 2000
3 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: Windows NT 4 SP3, Visual C++ 6

The "Send"-"Messenger" pair are ment to replace the old "Net
send"-"Messenger". Actually I decided to try this because I was getting
annoyed with the same message boxes on the screen, and since I couldn’t find any
information about the old stuff, I made a new pair. The "send" part does very
little.It’s a Win32 console app that connects to a named pipe and writes to it. The
service is also a Win32 console app (Microsoft advices, isn’t it) that creates a icon in
the TrayIcon, and a named pipe. When the pipe receives something, the icon changes from
yellow to red. The icon tip shows the number of new/total messages received. Left click on
the icon shows a window with the messages, right click on it displays a context menu with
the "Close" command, to stop the service.

The "send" can be used like this: "send list" to list all the
computers in the network (I used Naveen Kohli class
to get the names, thanks a lot), or "send <computer> message".

The service can be installed/removed from the prompt: "service -install" ,
"service -remove", and started from the control panel (the "Services"
icon). I used Craig Link’s example found in MSDN November 1998, but I changed it to suit
my needs. I will comment the code in the the ServiceStart function, because the rest of
the service’s functions (service_ctrl, service_main etc.) are classics.

The function creates first a thread that is responsible for the icon’s parent, a simple
dialogbox. To hide the dialog:

   SetWindowPos(hwndDlg,NULL,-10,-10,0,0,SWP_NOZORDER|SWP_NOMOVE);

and of course the trick with the invisible modless parent to prevent from appearing in
the task bar (this one also not visible – from the resources):

   HWND
hwnd=CreateDialog(NULL,MAKEINTRESOURCE(IDD_DIALOG1),NULL,NULL);

The dialog’s DialogProc has nothing special. On WM_INITDIALOG it displays the icon, on
WM_ICON_NOTIFY – LBUTTON it creates a frame with an edit in it, on WM_ICON_NOTIFY –
RBUTTON shows a context menu, WM_COMMAND – ID_POPUP_CLOSE stops the service, and
WM_CLEARALL and WM_CLOSEFRAME are messages sent by the frame. Every message handling takes
care of the icon also, by changing the icon or the tip.

After creating the thread, the StartService creates a named pipe, and two events – one
to take care of the stop service command and one for the overlapped i/o. After reading
from the pipe, it adds the text read to a buffer and, if the frame is on, it displays the
new message and drops the connection. Right click on the edit clears the text and resets
the icon’s counters.

Downloads

Download service project -44 Kb
Download send project -16 Kb
Download exes – 12 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.