¡ÚVC++¡Û¥á¡¼¥ë¥¹¥í¥Ã¥È¤ÇñÊý¸þ¥×¥í¥»¥¹´ÖÄÌ¿®¤ò¹Ô¤¦

0

    ¡ãµ¡Ç½¡ä

    ¡Ê£±¡Ë¥á¡¼¥ë¥¹¥í¥Ã¥È¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤òºîÀ®¤·¤Þ¤¹

    ¡Ê£²¡Ë¥á¡¼¥ë¥¹¥í¥Ã¥È¤ò»È¤Ã¤Æ£²¤Ä¤Îexe´Ö¤Ç¥×¥í¥»¥¹´ÖÄÌ¿®¤ò¹Ô¤¤¤Þ¤¹

    ¡Ê£³¡Ë¥¯¥é¥¤¥¢¥ó¥È¤Ï[Á÷¿®]¥Ü¥¿¥ó²¡²¼¤Ë¤è¤ê¥á¥Ã¥»¡¼¥¸¤òÁ÷ÉÕ¤·¤Þ¤¹

    ¡Ê£´¡Ë¥µ¡¼¥Ð¤Ï¼õ¿®¥á¥Ã¥»¡¼¥¸¤ò¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤Ëɽ¼¨¤·¤Þ¤¹

    ¡Ê£µ¡Ë¥¯¥é¥¤¥¢¥ó¥Èµ¯Æ°»þ¤Ë¥µ¡¼¥Ð¤âµ¯Æ°¤·¤Þ¤¹

    ¡¡¡Ê¥µ¡¼¥Ð¤«¤é¥¯¥é¥¤¥¢¥ó¥È¤Îµ¯Æ°¤Ê¤Ê¤·¡Ë

     

    ¡ã¼Â¹Ô¥¤¥á¡¼¥¸¡ä

    ¾å¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ï¥á¡¼¥ë¥¹¥í¥Ã¥È¥¯¥é¥¤¥¢¥ó¥È(MFCApplication1)

    ²¼¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ï¥á¡¼¥ë¥¹¥í¥Ã¥È¥µ¡¼¥Ð(MFCApplication2)

    MFC,VisualStudio,MailSlot,¼Â¹Ô¥µ¥ó¥×¥ë,
     

    ¡ãÆ°ºî¸¡¾Ú¡õ³«È¯´Ä¶­¡ä
    Visual Studio Community 2017

     

    ¡ã»È¤¤Êý¡ä

    £±¡¥MFCApplication1¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹

    £²¡¥MFCApplication1¥½¥ê¥å¡¼¥·¥ç¥ó¤ËMFCApplication2¥×¥í¥¸¥§¥¯¥È¤òÄɲä·¤Þ¤¹

    ¡¡¡Ê¤É¤Á¤é¤â¥À¥¤¥¢¥í¥°¥Ù¡¼¥¹¤Ç¤¹¡Ë

     

    ¥µ¥ó¥×¥ë¤Î¥½¥ê¥å¡¼¥·¥ç¥ó¹½À®

    MFCApplication1(¥½¥ê¥å¡¼¥·¥ç¥ó¥Õ¥©¥ë¥À)

    ¡¡­øDebug

    ¡¡­øMFCApplication1(¥×¥í¥¸¥§¥¯¥È¥Õ¥©¥ë¥À)

    ¡¡­øMFCApplication2(¥×¥í¥¸¥§¥¯¥È¥Õ¥©¥ë¥À)

    ¡¡­øRelease

    ¡¡­øMFCApplication1.sln

     

    £³¡¥¥³¥ó¥È¥í¡¼¥ë¤òÄɲÃ

    MFCApplication1

    MFC,VisualStudio,MailSlot,Á÷¿®,
     

    MFCApplication2

    MFC,VisualStudio,MailSlot,¼õ¿®,
     

    £´¡¥¥á¥ó¥ÐÊÑ¿ô¤òÄɲÃ

    MFCApplication1

    ¡¡IDC_EDIT1¡§

    MFC,VisualStudio,MailSlot,Á÷¿®,¥á¥ó¥ÐÊÑ¿ôÄɲÃ,¥¯¥é¥¹¥¦¥£¥¶¡¼¥É,
     

    MFCApplication2

    ¡¡IDC_LIST1¡§

    MFC,VisualStudio,MailSlot,¼õ¿®,¥á¥ó¥ÐÊÑ¿ôÄɲÃ,¥¯¥é¥¹¥¦¥£¥¶¡¼¥É,
     

    £µ¡¥MFCApplication2¤Ë¥¤¥Ù¥ó¥È¤òÄɲÃ

    ¡¡WM_TIMER¡Ê¥¿¥¤¥Þ¡¼¥¤¥Ù¥ó¥È¤Ç¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¡Ë

    ¡¡WM_DESTROY¡Ê²èÌ̽ªÎ»¥¤¥Ù¥ó¥È¤Ç¥á¡¼¥ë¥¹¥í¥Ã¥È¤È¥¿¥¤¥Þ¡¼Ää»ß¡Ë

    MFC,VisualStudio,MailSlot,¼õ¿®,¥¤¥Ù¥ó¥ÈÄɲÃ,¥¯¥é¥¹¥¦¥£¥¶¡¼¥É,
     

    £µ¡¥¥½¡¼¥¹¤òÄɲÃ

     

    MFCApplication1¡Ê¥¯¥é¥¤¥¢¥ó¥È¡ÖÁ÷¿®¡×¦¥¢¥×¥ê¡Ë

     

    MFCApplication1Dlg.h

    class CMFCApplication1Dlg : public CDialog
    {
    //¡Á¾Êά¡Á¡Á
    // ¼ÂÁõ
    protected:
        HICON m_hIcon;
        // À¸À®¤µ¤ì¤¿¡¢¥á¥Ã¥»¡¼¥¸³ä¤êÅö¤Æ´Ø¿ô
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    private:
        CString m_sendEdt;
        HANDLE m_mailSlot;
    public:
        afx_msg void OnBnClickedButton1();
    };

     

    MFCApplication1Dlg.cpp

     

    BOOL CMFCApplication1Dlg::OnInitDialog()

    {
        //¡Á¾Êά¡Á¡Á
        //¼õ¿®Â¦(MFCApplication2.exe)¤â°ì½ï¤Ëµ¯Æ°¤¹¤ë
        //¢¨ËÜ¥µ¥ó¥×¥ë¤Ç¤Ï¼õ¿®Â¦¤ÈÁ÷¿®Â¦¤¬Æ±°ì¥Õ¥©¥ë¥À¤Ë½ÐÎϤµ¤ì¤Æ¤¤¤ë¤â¤Î¤È¤·¤Þ¤¹¤¬¼Â¹Ô´Ä¶­¤Ë¹ç¤ï¤»¤Æ½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤

        TCHAR buf[2048];
        ZeroMemory(&buf, sizeof(buf));
        GetModuleFileName(NULL, buf, sizeof(buf));
        size_t ichi = wcslen(buf) - wcslen(L"MFCApplication1.exe");
        //Á÷¿®Â¦(MFCApplication1.exe)¼Â¹Ô¥Õ¥¡¥¤¥ë̾¤ò¼õ¿®Â¦(MFCApplication2.exe)¤ËÃÖ´¹
        wmemcpy_s(&buf[ichi],wcslen(buf), L"MFCApplication2.exe", wcslen(L"MFCApplication2.exe")*2);
        //¼õ¿®Â¦(MFCApplication2.exe)¤òµ¯Æ°
        ShellExecute(NULL, L"open", buf, NULL, NULL, SW_HIDE);
        //¥¨¥Ç¥£¥Ã¥È¥Ü¥Ã¥¯¥¹¤ò½é´ü²½
        m_sendEdt = L"";
        UpdateData(FALSE);
        return TRUE;  // ¥Õ¥©¡¼¥«¥¹¤ò¥³¥ó¥È¥í¡¼¥ë¤ËÀßÄꤷ¤¿¾ì¹ç¤ò½ü¤­¡¢TRUE ¤òÊÖ¤·¤Þ¤¹¡£
    }
     
    /*************************************************
    ´Ø¿ô̾ OnBnClickedButton1
    µ¡Ç½   Á÷¿®¥Ü¥¿¥ó²¡²¼¥¤¥Ù¥ó¥È
    *************************************************/

    void CMFCApplication1Dlg::OnBnClickedButton1()
    {
        CString csError;
        TCHAR cName[256];
        ZeroMemory(&cName,sizeof(cName));
        //¥¨¥Ç¥£¥Ã¥È¥Ü¥Ã¥¯¥¹¤ÎÆþÎÏÃͤò¼èÆÀ
        UpdateData(TRUE);
        m_sendEdt = m_sendEdt.Trim();
        //¥á¥Ã¥»¡¼¥¸¤¬Ì¤ÆþÎϤʤ饨¥é¡¼¤È¤¹¤ë
        if (m_sendEdt.IsEmpty())
        {
            AfxMessageBox(L"Á÷¿®Ê¸»úÎó¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤",MB_ICONERROR);
            return;
        }
        //¥³¥ó¥Ô¥å¡¼¥¿Ì¾¤ò¼èÆÀ
        //¢¨ËÜ¥µ¥ó¥×¥ë¤Ç¤ÏƱ°ì¥³¥ó¥Ô¥å¡¼¥¿¤ËÁ÷¿®¤¹¤ë

        DWORD wksize = sizeof(cName);
        if (!GetComputerName(cName, &wksize))
        {
            AfxMessageBox(L"¥³¥ó¥Ô¥å¡¼¥¿¡¼Ì¾¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿", MB_ICONERROR);
            return;
        }
        //¥á¡¼¥ë¥¹¥í¥Ã¥È¤òºîÀ®
        //¥á¡¼¥ë¥¹¥í¥Ã¥È¤Î̾Á°¤Ï ¥¥mailslot¥¥MailSlot ¤È¤¹¤ë

        //¾ÜºÙ¤ÏMSDN»²¾È
        CString csSlot;
        csSlot.Format(L"¥¥¥¥%s¥¥mailslot¥¥MailSlot", cName);
        HANDLE hSlot = CreateFile(csSlot, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,
                                        NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hSlot == INVALID_HANDLE_VALUE)
        {
            csError.Format(L"MailSlot¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿(ErrorCode=%d)¥r¥n%s",GetLastError(),csSlot);
            AfxMessageBox(csError, MB_ICONERROR);
            return;
        }
        //¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®
        LPTSTR cMsg = new TCHAR[2048];
        DWORD dwSize;
        DWORD dwWrite;
        BOOL bResult;
        //dwSize = wcslen(cMsg);
        dwSize = wsprintf(cMsg, L"%s", m_sendEdt);
        bResult = WriteFile(hSlot, cMsg, dwSize * 2, &dwWrite, NULL);
        if (!bResult) {
            csError.Format(L"MailSlot¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿(ErrorCode=%d)¥r¥n%s", GetLastError(), csSlot);
            AfxMessageBox(csError, MB_ICONERROR);
        }
        CloseHandle(hSlot);
        delete cMsg;
    }

     

    MFCApplication2¡Ê¥µ¡¼¥Ð¡Ö¼õ¿®¡×¦¥¢¥×¥ê¡Ë

     

    MFCApplication2Dlg.h
    class CMFCApplication2Dlg : public CDialog
    {
    //¡Á¾Êά¡Á¡Á
    // ¼ÂÁõ
    protected:
        HICON m_hIcon;
        // À¸À®¤µ¤ì¤¿¡¢¥á¥Ã¥»¡¼¥¸³ä¤êÅö¤Æ´Ø¿ô
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    private:
        HANDLE m_Slot;
    public:
        afx_msg void OnTimer(UINT_PTR nIDEvent);
        afx_msg void OnDestroy();
    private:
        CListBox m_recvList;
    };
     
    MFCApplication2Dlg.cpp
    BOOL CMFCApplication2Dlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
       
        //¡Á¾Êά¡Á¡Á
       
        //¥á¡¼¥ë¥¹¥í¥Ã¥È¤òºîÀ®
        //¥á¡¼¥ë¥¹¥í¥Ã¥È¤Î̾Á°¤Ï ¥¥mailslot¥¥MailSlot ¤È¤¹¤ë
        //¥á¥Ã¥»¡¼¥¸¤ÎºÇÂçĹ(¥Ð¥¤¥È¿ô)¡§0(Ǥ°Õ¥µ¥¤¥º)
        //¥á¥Ã¥»¡¼¥¸Æɤ߼è¤ê¥¿¥¤¥à¥¢¥¦¥ÈÃÍ(ms)
        //¾ÜºÙ¤ÏMSDN»²¾È

        m_Slot = CreateMailslot(L"¥¥¥¥.¥¥mailslot¥¥MailSlot", 0, 1000, NULL);
        if (m_Slot == INVALID_HANDLE_VALUE)
        {
            CString csError;
            csError.Format(L"¥á¡¼¥ë¥¹¥í¥Ã¥ÈºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿(ErrorCode=%d)", GetLastError());
            AfxMessageBox(csError, MB_ICONERROR);
            return FALSE;
        }
        //¥¿¥¤¥Þ¡¼¥¹¥¿¡¼¥È
        //1000(ms)¤´¤È¤Ë¥Á¥§¥Ã¥¯
        //¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Ê¤·

        SetTimer(DTIMER_ID, 1000, NULL);
        return TRUE;  // ¥Õ¥©¡¼¥«¥¹¤ò¥³¥ó¥È¥í¡¼¥ë¤ËÀßÄꤷ¤¿¾ì¹ç¤ò½ü¤­¡¢TRUE ¤òÊÖ¤·¤Þ¤¹¡£
    }
    /*************************************************
    ´Ø¿ô̾ OnTimer
    µ¡Ç½   ¥¿¥¤¥Þ¡¼¥¤¥Ù¥ó¥È¤Ç¼õ¿®¤ò¥Á¥§¥Ã¥¯
    *************************************************/

    void CMFCApplication2Dlg::OnTimer(UINT_PTR nIDEvent)
    {
        TCHAR cMsg[2048];
        DWORD dwRead;
        BOOL bResult;
        CString csMsg;
       
        //¥¿¥¤¥Þ¡¼Ää»ß
        KillTimer(DTIMER_ID);
        //¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ì¤Ð½èÍý¤¹¤ë
        MSG msg;
        while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
       
        //¥á¥Ã¥»¡¼¥¸¤ÎÆɤ߼è¤ê
        //¾ÜºÙ¤ÏMSDN»²¾È

        ZeroMemory(&cMsg, sizeof(cMsg));
        bResult = ReadFile(m_Slot, cMsg, sizeof(cMsg), &dwRead, NULL);
        if(bResult)
        {
            //¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤Ëɽ¼¨
            CTime ct;
            ct = CTime::GetCurrentTime();
            csMsg.Format(L"%04d/%02d/%02d %02d:%02d:%02d : %s", ct.GetYear(), ct.GetMonth(),
                ct.GetDay(), ct.GetHour(), ct.GetMinute(), ct.GetSecond(), cMsg);
            m_recvList.InsertString(-1, csMsg);
            UpdateData(FALSE);
        }else
        {
            LRESULT lrlt = GetLastError();
            if ((lrlt == ERROR_SEM_TIMEOUT) || (lrlt == ERROR_ACCESS_DENIED)) {
                //¥á¥Ã¥»¡¼¥¸¤¬¥¿¥¤¥à¥¢¥¦¥È¤Î¤È¤­¥¨¥é¡¼¤ò½Ð¤µ¤Ê¤¤
                //Ê̤Υ¨¥é¡¼¤¬½Ð¤ë¤è¤¦¤Ê¤é¥¨¥é¡¼¥³¡¼¥É¤òÄɲ乤ë

            }
            else {
                csMsg.Format(L"MailSlot¤Î¥á¥Ã¥»¡¼¥¸Æɤ߼è¤ê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿(ErrorCode=%d)", lrlt);
                AfxMessageBox(csMsg, MB_ICONERROR);
                SetTimer(DTIMER_ID, 1000, NULL);
            }
        }
        //¥¿¥¤¥Þ¡¼µ¯Æ°
        SetTimer(DTIMER_ID, 1000, NULL);
        CDialog::OnTimer(nIDEvent);
    }
     
    /*************************************************
    ´Ø¿ô̾ OnDestroy
    µ¡Ç½   ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î½ªÎ»½èÍý
    *************************************************/

    void CMFCApplication2Dlg::OnDestroy()
    {
        CDialog::OnDestroy();
        //¥¿¥¤¥Þ¡¼Ää»ß
        KillTimer(DTIMER_ID);
        //¥á¡¼¥ë¥¹¥í¥Ã¥È¤òÊĤ¸¤ë
        if (m_Slot != INVALID_HANDLE_VALUE)
        {
            CloseHandle(m_Slot);
        }
    }
     

    ¤è¤í¤·¤±¤ì¤Ð¥Ý¥Á¥Ã¤È²¡¤·¤Æ¤¯¤À¤µ¤¤

    ¥×¥í¥°¥é¥Þ¡¼ ¥Ö¥í¥°¥é¥ó¥­¥ó¥°¤Ø

     



    selected entries

    categories

    calendar

    S M T W T F S
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    << March 2024 >>

    profile

    others

    archives