Listing 5: msclient.cpp
Mail Slot Client
// msclient.cpp #include <tchar.h> #include <windows.h> #include "msname.h" #include "msclient.h" BOOL CALLBACK ClientDlgProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE hInst; //--------------------------------------------------------------- int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { // This client opens the mailslot and writes messages to it. hInst = hInstance; DialogBox(hInst, MAKEINTRESOURCE(CLIENT_DLG), NULL, ClientDlgProc); return 0; } // WinMain //--------------------------------------------------------------- int CALLBACK ClientDlgProc(HWND hDlg, UINT Message,WPARAM wParam, LPARAM lParam) { switch (Message) { case WM_INITDIALOG: CheckRadioButton(hDlg,ID_LOCAL,ID_PRIMARY, ID_LOCAL); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_WRITE: { TCHAR szSlotName[1024], sz[1024]; DWORD dwMaxMsgSize = 0, dwNextMsgSize = 0, dwMsgCount = 0, dwReadTimeout = 0; // Form name of mailslot if(IsDlgButtonChecked(hDlg,ID_LOCAL)) { // mailslot on local computer lstrcpy(sz, TEXT(".")); } else if(IsDlgButtonChecked(hDlg,ID_REMOTE)) { // mailslot on remote computer GetDlgItemText(hDlg,ID_COMPUTERNAME,sz,64); } else if (IsDlgButtonChecked(hDlg,ID_DOMAIN)){ // all computers on the domain GetDlgItemText(hDlg,ID_DOMAIN,sz,64); } else { // all computers on the primary domain lstrcpy(sz, TEXT("*")); } wsprintf(szSlotName, TEXT("\\\\%s\\mailslot\\%s"), sz, MY_MAILSLOT_NAME); // Open the mailslot HANDLE hMailSlot; hMailSlot = CreateFile(szSlotName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hMailSlot != INVALID_HANDLE_VALUE) { // Write message to mailslot DWORD dwBytes, dwBytesWritten; GetDlgItemText(hDlg, ID_MESSAGE,sz, 1024); dwBytes = (lstrlen(sz)+1) * sizeof(TCHAR); WriteFile(hMailSlot, (LPBYTE)sz, dwBytes, &dwBytesWritten, NULL); // Close the mailslot handle. CloseHandle(hMailSlot); } break; } } break; case WM_CLOSE: EndDialog(hDlg, 1); break; default: return FALSE; } return FALSE; } // ClientDlgProc