home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / TSTAPP.PAK / MSGPROC.C < prev    next >
Text File  |  1995-08-29  |  4KB  |  149 lines

  1. // Borland C++ - (C) Copyright 1991, 1992 by Borland International
  2.  
  3. //*******************************************************************
  4. //
  5. // program - MsgProc.c
  6. // purpose - A windows program to send messages to MsgWnd application.
  7. //           This file is part of the TSTAPP project.
  8. //
  9. //*******************************************************************
  10.  
  11. #define  STRICT
  12. #include <windows.h>
  13. #pragma hdrstop
  14. #include <dde.h>
  15. #include <string.h>
  16.  
  17. #include "msgproc.h"
  18. #include "ddeclnt.h"
  19.  
  20. #if defined(__FLAT__)
  21. #define _fstrcpy  strcpy
  22. #define _fstrcat  strcat
  23. #endif
  24.  
  25. static HWND hChannel;
  26. static HWND hMsgWnd;
  27.  
  28. //*******************************************************************
  29. // SendMsgWndMsg - send a message to the MsgWnd application
  30. //
  31. // paramaters:
  32. //             hWnd          - The window handle of caller
  33. //             command       - The command to send to msgwnd application
  34. //             msg           - The message to send to msgwnd application
  35. //
  36. //*******************************************************************
  37. void SendMsgWndMsg(HWND hWnd, char *command, char *msg)
  38. {
  39.     HANDLE      hmsg;
  40.     LPSTR       lpmsg;
  41.  
  42.     // If the msgwnd application is running and we have a conversation
  43.     // channel established with it, lets send our text message to it.
  44.     if (GetMsgLink(hWnd))
  45.     {
  46.         // Allocate some shared memory to put message into.
  47.         hmsg = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
  48.                            (DWORD) (strlen(command) + (msg  ? strlen(msg) : 0) + 8));
  49.         if (hmsg)
  50.         {
  51.             // Lock it down to get addres of memory.
  52.             lpmsg = GlobalLock(hmsg);
  53.             if (lpmsg)
  54.             {
  55.                 // Build print command to send to msgwnd application.
  56.                 _fstrcpy(lpmsg, "[");
  57.                 _fstrcat(lpmsg, command);
  58.                 if (msg)
  59.                 {
  60.                     _fstrcat(lpmsg, " (\"");
  61.         _fstrcat(lpmsg, msg);
  62.                     _fstrcat(lpmsg, "\")");
  63.                 }
  64.                 _fstrcat(lpmsg, "]");
  65.  
  66.                 // Send the command.
  67.                 DDEExecute(hChannel, lpmsg, 0);
  68.  
  69.                 GlobalUnlock(hmsg);
  70.             }
  71.  
  72.             GlobalFree(hmsg);
  73.         }
  74.     }
  75. }
  76.  
  77. //*******************************************************************
  78. // GetLines - get number of lines printed by msgwnd
  79. //
  80. // paramaters:
  81. //             hWnd          - The window handle of caller
  82. //
  83. // returns:
  84. //          handle to 'lines' data item.
  85. //            or
  86. //          NULL if it was not returned.
  87. //
  88. //*******************************************************************
  89. HANDLE GetLines(HWND hWnd)
  90. {
  91.     HANDLE hTmp;
  92.  
  93.     hTmp = 0;
  94.  
  95.     // If the msgwnd application is running and we have a conversation
  96.     // channel established with it, lets send our text message to it.
  97.     if (GetMsgLink(hWnd))
  98.     {
  99.         // Go ask for the 'lines' data item from msgwnd application.
  100.         hTmp = DDERead(hChannel, "lines", 5);
  101.     }
  102.  
  103.     // Return handle to 'lines' data item or NULL if it was not returned.
  104.     return(hTmp);
  105. }
  106.  
  107. //*******************************************************************
  108. // CloseMsgWnd - close dde message link to the MsgWnd application
  109. //
  110. //*******************************************************************
  111. void CloseMsgWnd()
  112. {
  113.     // Tell msgwnd application we want to terminate our conversation.
  114.     DDEClientClose(hChannel);
  115.     hChannel = 0;
  116. }
  117.  
  118. //*******************************************************************
  119. // GetMsgLink - establish link to msgwnd application
  120. //
  121. //*******************************************************************
  122. int GetMsgLink(HWND hWnd)
  123. {
  124.     char msgbuf[80];
  125.  
  126.     // See if msgwnd application is already running.
  127.     hMsgWnd = FindWindow("msgwnd", NULL);
  128.     if (!hMsgWnd)
  129.     {
  130.   // If not, try to activate it.
  131.         strcpy(msgbuf, "MSGWND.EXE");
  132.         WinExec(msgbuf, SW_SHOWNORMAL);
  133.   hMsgWnd = FindWindow("msgwnd", NULL);
  134.         hChannel = 0;
  135.     }
  136.  
  137.     // Have we started a conversation with the msgwnd application yet?
  138.     if (!hChannel)
  139.     {
  140.         // No, try to start one.
  141.         hChannel = DDEClientOpen(hWnd, "msgwnd", "screen");
  142.     }
  143.  
  144.     return((int) hChannel);
  145. }
  146.  
  147. //*******************************************************************
  148. 
  149.