home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 March / VPR9803A.ISO / OLS / Windows / WBAT137P / wbat137p.lzh / SAMPLE / WBAPISMP.C < prev    next >
C/C++ Source or Header  |  1996-05-18  |  6KB  |  203 lines

  1. // apismp.c        Sample Program for WinBatchEh API 2.02
  2. //                (Borland C/C++ 4.52)
  3.  
  4. #define STRICT
  5. #include <windows.h>
  6. #pragma hdrstop
  7. #include <windowsx.h>
  8.  
  9. // #include <stdarg.h>
  10.  
  11. #include "wbatapi.h"
  12.  
  13.  
  14. #define        BUF_SIZE    8192        // 文字列受け渡しに使うバッファのサイズ
  15.  
  16.  
  17.  
  18. HWND                hwnd;            // カレントアクティブウィンドウのHWND
  19.  
  20.  
  21. void msgbox0(unsigned char *msg)
  22. {
  23.     MessageBox(hwnd, msg, "APISMP", MB_OK);
  24. }
  25.  
  26. /*
  27. void msgbox2(void *s, ...)
  28. {
  29. unsigned char    p[512];
  30. va_list            ap;
  31.  
  32.     va_start(ap, s);
  33.     wvsprintf(p, s, ap);
  34.     va_end(ap);
  35.     msgbox0(p);
  36. }
  37. */
  38.  
  39.  
  40. #pragma argsused
  41. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  42.         LPSTR lpszCmd, int cmdShow)
  43. {
  44. int                    i;
  45. LRESULT                result;                // リターンなどを受け取る
  46. HWND                bhwnd;                // WinBatchEhExecのHWND
  47. unsigned char         work[1024];            // ワークバッファ
  48. unsigned char far    *buf;                // 受け渡しのバッファの物理ポインタ
  49. unsigned char        str_wbshell[]="WinBatchEhShell"; // WinBatchEhのクラス名
  50. #ifndef __WIN32__
  51. HGLOBAL            g_buf;
  52. #else
  53. HANDLE            g_buf;
  54. HANDLE            hf_buf;
  55. DWORD            idprocess;
  56. HANDLE            hprocess;
  57. #endif
  58.  
  59.     hwnd=GetActiveWindow();
  60.  
  61.     // Windowを見つける処理
  62. #ifndef __WIN32__
  63.     if ( (bhwnd=FindWindow(str_wbshell,
  64.                 "WinBatchEhShell - APISMP16.EXE")) == NULL &&    // for OLD Ver
  65.          (bhwnd=FindWindow(str_wbshell,
  66.                 "WinBatchEhShell - APISMP16")) == NULL ) {
  67. #else
  68.     if ( (bhwnd=FindWindow(str_wbshell,
  69.                 "WinBatchEhShell - APISMP32.EXE")) == NULL && // for OLD Ver
  70.          (bhwnd=FindWindow(str_wbshell,
  71.                 "WinBatchEhShell - APISMP32")) == NULL ) {
  72. #endif
  73.         MessageBox(hwnd, "WinBatchEh上ではありません", "APISMP", MB_OK);
  74.         return NULL;
  75.     }
  76.  
  77.     // 別のWinBatchEhが動作しているときの為にウィンドウタイトルを変更しておく
  78.     SetWindowText(bhwnd, "");
  79.  
  80.     if ( ( SendMessage(bhwnd, WM_WB_GETVER, 0, 0L) & 0xff00 )
  81.                                 != ( WINBAT_API_VER & 0xff00 ) ) {
  82.         msgbox0("バージョンエラー");
  83.         return NULL;
  84.     }
  85.  
  86.  
  87. #ifndef __WIN32__
  88.     if ( (g_buf=GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, BUF_SIZE)) == NULL ) {
  89.         msgbox0("メモリ不足(1)");
  90.         return NULL;
  91.     }
  92.     if ( (buf=GlobalLock(g_buf)) == NULL ) {
  93.         msgbox0("メモリ不足(2)");
  94.         return NULL;
  95.     }
  96. #else
  97.     if ( (hf_buf=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
  98.                     PAGE_READWRITE, 0, (DWORD)BUF_SIZE ,NULL)) == NULL ) {
  99.         msgbox0("メモリ不足(1)");
  100.         return NULL;
  101.     }
  102.     if ( (buf=MapViewOfFile(hf_buf, FILE_MAP_ALL_ACCESS, 0, 0, 0)) == NULL ) {
  103.         msgbox0("メモリ不足(2)");
  104.         CloseHandle(hf_buf);
  105.         return NULL;
  106.     }
  107.     GetWindowThreadProcessId(bhwnd, &idprocess);
  108.     hprocess=OpenProcess(PROCESS_DUP_HANDLE, TRUE, idprocess);
  109.     DuplicateHandle( GetCurrentProcess(), hf_buf, hprocess, &g_buf,
  110.                 0, TRUE, DUPLICATE_SAME_ACCESS );
  111. #endif
  112.  
  113. // WM_WB_PUTCHAR
  114.     for ( i=0 ; i<79 ; i++ ) {
  115.         SendMessage(bhwnd, WM_WB_PUTCHAR, (WPARAM)'S', (LPARAM)0);
  116.     }
  117.     SendMessage(bhwnd, WM_WB_PUTCHAR, (WPARAM)0x0a, (LPARAM)0);
  118.  
  119. // WM_WB_ERRPUTCHAR
  120.     for ( i=0 ; i<79 ; i++ ) {
  121.         SendMessage(bhwnd, WM_WB_ERRPUTCHAR, (WPARAM)'E', (LPARAM)0);
  122.     }
  123.     SendMessage(bhwnd, WM_WB_ERRPUTCHAR, (WPARAM)0x0a, (LPARAM)0);
  124.  
  125. // WM_WB_PUTSTR
  126.     lstrcpy(buf, "APISMPからの出力テストです(STDOUT).\n");
  127.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  128.  
  129. // WM_WB_ERRPUTSTR
  130.     lstrcpy(buf, "再びAPISMPからの出力テストです(ERROUT).\n");
  131.     SendMessage(bhwnd, WM_WB_ERRPUTSTR, (WPARAM)0, (LPARAM)g_buf);
  132.  
  133. // WM_WB_GETBATNAME
  134.     SendMessage(bhwnd, WM_WB_GETBATNAME, (WPARAM)0, (LPARAM)g_buf);
  135.     lstrcpy(work, buf);
  136.     wsprintf(buf, "バッチファイル名は[%s]です.\n", work);
  137.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  138.  
  139. // WM_WB_GETNOWLINE, GETBATNOWLINE
  140.     result=SendMessage(bhwnd, WM_WB_GETNOWLINE, (WPARAM)0, (LPARAM)0);
  141.     SendMessage(bhwnd, WM_WB_GETBATNOWLINE, (WPARAM)0, (LPARAM)g_buf);
  142.     lstrcpy(work, buf);
  143.     wsprintf(buf, "現在バッチは[%d]行目で内容は[%s]です.\n", (int)result, work);
  144.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  145.  
  146. // WM_WB_GETBATNUMLINE
  147.     SendMessage(bhwnd, WM_WB_GETBATNUMLINE, (WPARAM)0, (LPARAM)g_buf);
  148.     lstrcpy(work, buf);
  149.     wsprintf(buf, "バッチの1行目の内容は[%s]です.\n", work);
  150.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  151.  
  152. // WM_WB_SETNOWLINE
  153.     lstrcpy(buf, "バッチの現在位置を10行目に設定しました.\n");
  154.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  155.     SendMessage(bhwnd, WM_WB_SETNOWLINE, (WPARAM)9, (LPARAM)0);
  156.  
  157. // WM_WB_GETERRORLEVEL
  158.     result=SendMessage(bhwnd, WM_WB_GETERRORLEVEL, (WPARAM)0, (LPARAM)0);
  159.     wsprintf(buf, "ERRORLEVELは[%d]でした.\n", result);
  160.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  161.  
  162. // WM_WB_SETERRORLEVEL
  163.     lstrcpy(buf, "ERRORLEVELを230に設定しました.\n");
  164.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  165.     SendMessage(bhwnd, WM_WB_SETERRORLEVEL, (WPARAM)230, (LPARAM)0);
  166.  
  167.  
  168. // WM_WB_GETENV
  169.     lstrcpy(buf, "PATH");
  170.     SendMessage(bhwnd, WM_WB_GETENV, (WPARAM)0, (LPARAM)g_buf);
  171.     lstrcpy(work, buf);
  172.     wsprintf(buf, "環境変数 PATH は [%s] に設定されています.\n", work);
  173.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  174.  
  175. // WM_WB_PUTENV
  176.     lstrcpy(buf, "SETTEST=STRINGS");
  177.     if ( SendMessage(bhwnd, WM_WB_PUTENV, (WPARAM)0, (LPARAM)g_buf) == 0 ) {
  178.         lstrcpy(buf, "環境変数 SETTEST を [STRINGS] に設定しました.\n");
  179.     } else {
  180.         lstrcpy(buf, "環境変数 SETTEST を [STRINGS] に設定が失敗しました.\n");
  181.     }
  182.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  183.  
  184.  
  185.  
  186.  
  187.     lstrcpy(buf, "APISMPからのテスト終了.\n");
  188.     SendMessage(bhwnd, WM_WB_PUTSTR, (WPARAM)0, (LPARAM)g_buf);
  189.  
  190.  
  191. #ifndef __WIN32__
  192.     GlobalUnlock(g_buf);
  193.     GlobalFree(g_buf);
  194. #else
  195.     CloseHandle(hprocess);
  196.     UnmapViewOfFile(buf);
  197.     CloseHandle(g_buf);
  198.     CloseHandle(hf_buf);
  199. #endif
  200.  
  201.     return NULL;
  202. }
  203.