¡ÚVC++¡Û¥á¡¼¥ë¥¹¥í¥Ã¥È¤ÇñÊý¸þ¥×¥í¥»¥¹´ÖÄÌ¿®¤ò¹Ô¤¦
¡ãµ¡Ç½¡ä
¡Ê£±¡Ë¥á¡¼¥ë¥¹¥í¥Ã¥È¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤òºîÀ®¤·¤Þ¤¹
¡Ê£²¡Ë¥á¡¼¥ë¥¹¥í¥Ã¥È¤ò»È¤Ã¤Æ£²¤Ä¤Îexe´Ö¤Ç¥×¥í¥»¥¹´ÖÄÌ¿®¤ò¹Ô¤¤¤Þ¤¹
¡Ê£³¡Ë¥¯¥é¥¤¥¢¥ó¥È¤Ï[Á÷¿®]¥Ü¥¿¥ó²¡²¼¤Ë¤è¤ê¥á¥Ã¥»¡¼¥¸¤òÁ÷ÉÕ¤·¤Þ¤¹
¡Ê£´¡Ë¥µ¡¼¥Ð¤Ï¼õ¿®¥á¥Ã¥»¡¼¥¸¤ò¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤Ëɽ¼¨¤·¤Þ¤¹
¡Ê£µ¡Ë¥¯¥é¥¤¥¢¥ó¥Èµ¯Æ°»þ¤Ë¥µ¡¼¥Ð¤âµ¯Æ°¤·¤Þ¤¹
¡¡¡Ê¥µ¡¼¥Ð¤«¤é¥¯¥é¥¤¥¢¥ó¥È¤Îµ¯Æ°¤Ê¤Ê¤·¡Ë
¡ã¼Â¹Ô¥¤¥á¡¼¥¸¡ä
¾å¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ï¥á¡¼¥ë¥¹¥í¥Ã¥È¥¯¥é¥¤¥¢¥ó¥È(MFCApplication1)
²¼¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ï¥á¡¼¥ë¥¹¥í¥Ã¥È¥µ¡¼¥Ð(MFCApplication2)
¡ãÆ°ºî¸¡¾Ú¡õ³«È¯´Ä¶¡ä
Visual Studio Community 2017
¡ã»È¤¤Êý¡ä
£±¡¥MFCApplication1¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹
£²¡¥MFCApplication1¥½¥ê¥å¡¼¥·¥ç¥ó¤ËMFCApplication2¥×¥í¥¸¥§¥¯¥È¤òÄɲä·¤Þ¤¹
¡¡¡Ê¤É¤Á¤é¤â¥À¥¤¥¢¥í¥°¥Ù¡¼¥¹¤Ç¤¹¡Ë
¥µ¥ó¥×¥ë¤Î¥½¥ê¥å¡¼¥·¥ç¥ó¹½À®
MFCApplication1(¥½¥ê¥å¡¼¥·¥ç¥ó¥Õ¥©¥ë¥À)
¡¡øDebug
¡¡øMFCApplication1(¥×¥í¥¸¥§¥¯¥È¥Õ¥©¥ë¥À)
¡¡øMFCApplication2(¥×¥í¥¸¥§¥¯¥È¥Õ¥©¥ë¥À)
¡¡øRelease
¡¡øMFCApplication1.sln
£³¡¥¥³¥ó¥È¥í¡¼¥ë¤òÄɲÃ
MFCApplication1
MFCApplication2
£´¡¥¥á¥ó¥ÐÊÑ¿ô¤òÄɲÃ
MFCApplication1
¡¡IDC_EDIT1¡§
MFCApplication2
¡¡IDC_LIST1¡§
£µ¡¥MFCApplication2¤Ë¥¤¥Ù¥ó¥È¤òÄɲÃ
¡¡WM_TIMER¡Ê¥¿¥¤¥Þ¡¼¥¤¥Ù¥ó¥È¤Ç¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¡Ë
¡¡WM_DESTROY¡Ê²èÌ̽ªÎ»¥¤¥Ù¥ó¥È¤Ç¥á¡¼¥ë¥¹¥í¥Ã¥È¤È¥¿¥¤¥Þ¡¼Ää»ß¡Ë
£µ¡¥¥½¡¼¥¹¤òÄɲÃ
MFCApplication1¡Ê¥¯¥é¥¤¥¢¥ó¥È¡ÖÁ÷¿®¡×¦¥¢¥×¥ê¡Ë
MFCApplication1Dlg.h
{
//¡Á¾Êά¡Á¡Á
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();
};
BOOL CMFCApplication1Dlg::OnInitDialog()
//¡Á¾Êά¡Á¡Á
//¢¨ËÜ¥µ¥ó¥×¥ë¤Ç¤Ï¼õ¿®Â¦¤ÈÁ÷¿®Â¦¤¬Æ±°ì¥Õ¥©¥ë¥À¤Ë½ÐÎϤµ¤ì¤Æ¤¤¤ë¤â¤Î¤È¤·¤Þ¤¹¤¬¼Â¹Ô´Ä¶¤Ë¹ç¤ï¤»¤Æ½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤
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);
}
´Ø¿ô̾ 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);
}
delete cMsg;
}
MFCApplication2¡Ê¥µ¡¼¥Ð¡Ö¼õ¿®¡×¦¥¢¥×¥ê¡Ë
{
//¡Á¾Êά¡Á¡Á
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;
};
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);
}
´Ø¿ô̾ 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);
}
}
¤è¤í¤·¤±¤ì¤Ð¥Ý¥Á¥Ã¤È²¡¤·¤Æ¤¯¤À¤µ¤¤
- 2018.02.18 Sunday
- VC++
- 18:28
- -
- -
- by ¤¦¡¼¤Á¤ã¤ó