| C++ºô´õ Æ÷·³ |
|
|
|
|
|
|
|
| º¼·£µåÆ÷·³ Ȩ |
|
|
|
|
|
|
|
|
|
|
|
| ȸ¿ø ¸Þ´º |
|
|
 |
|
|
|
|
 |
|

|
|
| [516] WM_COPYDATA¸¦ »ç¿ëÇÑ C++ºô´õ¿¡¼ µÎ°³ÀÇ application °£ ¸Þ½ÃÁö ±³È¯ ¹æ¹ý |
|
ºñº£½Ã·¯ []
|
1271 ÀÐÀ½ 2010-01-28 23:17 |
C++ºô´õ¿¡¼ µÎ°³ÀÇ application °£ ¸Þ½ÃÁö ±³È¯ ¹æ¹ý¿¡ ´ëÇÑ ³»¿ëÀÔ´Ï´Ù.
WM_COPYDATA¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù.
ºñÁÖ¾óC++¿¡´Â ¸¹Àº ÀÚ·á°¡ Àִµ¥, ã¾Æº¸´Ï ¾ø´Â°Í °°¾Æ
¹ÚÁöÈÆ´ÔÀÇ µµ¿òÀ» ¹Þ¾Æ ÀÛ¼ºÇÏ¿´½À´Ï´Ù.
µµ¿òÀ» ¹ÞÀº °ÍÀÌ´Ï ¾Æ³¦¾øÀÌ °ø°³ÇÕ´Ï´Ù.
Á¦°¡ ³»°øÀÌ ¸¹Áö ¾Ê¾Æ ¼³¸íÀ̳ª ÁÖ¼®µî ³»¿ë¿¡ ¿À·ù°¡ ÀÖÀ» ¼ö Àִµ¥,
¸¹ÀÌ ¾Æ½Ã´Â ºÐµéÀÌ ´ñ±Û·Î ¼öÁ¤ÇØÁÖ½Ã¸é ¿µ±¤À̰ڳ׿ä.
¾ÕÀ¸·Î´Â ¾¾ºô´õµµ ¸¹Àº ÀÚ·áµéÀÌ ³ÑÃijª±æ ¹Ù¶ø´Ï´Ù.
¾²¸é¾µ¼ö·Ï ÁÁÀº ÅøÀÎ°Í °°Àºµ¥.....½Ç·ÂÀÌ ¾ø¾î Âü ¾Æ½¬¿òÀÌ ¸¹½À´Ï´Ù.
¼Û½ÅºÎ
1. Åë½ÅÀ¸·Î ÁÖ°í ¹ÞÀ» ÀÚ·á Çü ¼±¾ð
mJigNum : Áö±× ¹øÈ£ Index
mData : ¿¹ºñ
sData : Àü´Þ ÇØÁÙ String µ¥ÀÌÅÍ
typedef struct DataInfo{
int mJigNum;
int mData;
char sData[100];
}DINFO, *PINFO;
2. ¼Û½Å ÇÒ ºÎºÐ¿¡¼ Çϱâ¿Í °°ÀÌ Ã³¸®ÇÑ´Ù.
DINFO myInfo;
//------------------
// ¼Û½Å µ¥ÀÌÅÍ ÀÔ·Â
//------------------
myInfo.mJigNum =1;
myInfo.mData =0;
strcpy(myInfo.sData,"TEST PROGRAM");
// WM_COPYDATA ¸Þ½ÃÁö¸¦ ÀÌ¿ëÇϱâ À§Çؼ´Â
// COPYDATASTRUCT¿¡ °ªÀ» ½Ç¾î¼ º¸³»°í ¹Þ´Â´Ù.
COPYDATASTRUCT copyData;
copyData.dwData = 333; // ÀÓÀÇÀÇ IndexÀÓ
copyData.cbData = sizeof(myInfo);
copyData.lpData = &myInfo;
// ¼ö½Å À©µµ¿ì ÇÚµé ã±â
HWND hTarWnd = FindWindow(NULL, TEXT("Server") );
// hTarWnd : º¸³¾ À©µµ¿ì ÇÚµé
// Handle : ³» ÇÁ·Î±×·¥ ÇÚµé
SendMessage( hTarWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM) ©Data);
3. TargetÀÇ À©µµ¿ì ÇÚµéÀ» ¾ò±â À§ÇØ ÇØ´ç ÇÁ·Î±×·¥ÀÇ caption Á¤º¸¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù.
4. SendMessageÈÄ Target¿¡¼ ¸Þ½ÃÁö¸¦ ¹Þ¾Ò´ÂÁö È®ÀÎ ÇÏ´Â ¹æ¹ý ?
dwData´Â ÀÓÀÇÀÇ °ªÀ¸·Î »ç¿ëÇϰí, lpDataÇüÀº Àü¼ÛµÉ µ¥ÀÌÅ͸¦ »ç¿ëÀÚ ÀÚ·áÇü¿¡ ³Ö°í, À̸¦ lpData¿¡ ¾îµå·¹½º¸¦ ½Ç¾î¼ SendMessage·Î º¸³½´Ù. cbData´Â »ç¿ëÀÚ ÀÚ·áÇüÀÇ Å©±â¸¦ ³Ö¾î ÁØ´Ù.
typedef struct DataInfo{
int mJigNum;
int mData;
char sData[100];
}DINFO, *PINFO;
myInfo.mJigNum =1;
myInfo.mData =0;
strcpy(myInfo.sData,"TEST PROGRAM");
COPYDATASTRUCT copyData;
copyData.dwData = 333;
copyData.cbData = sizeof(myInfo);
copyData.lpData = &myInfo;
// ¼ö½Å À©µµ¿ì ÇÚµé ã±â
HWND hTarWnd = FindWindow(NULL, TEXT("Server") )
//¸Þ½ÃÁö Àü¼Û
SendMessage( hTarWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM) ©Data);
¼ö½ÅºÎ
1. Åë½ÅÀ¸·Î ÁÖ°í ¹ÞÀ» ÀÚ·á Çü ¼±¾ð
typedef struct DataInfo{
int mJigNum;
int mData;
char sData[100];
}DINFO, *PINFO;
2. Ŭ·¡½º ¼±¾ðºÎ¿¡ À©µµ¿ì ¸Þ½ÃÁö ¸Ê ¼±¾ð
ºñÁÖ¾ó C++ÀÇ °æ¿ì Class Wizard¸¦ ÀÌ¿ëÇϰí, BCBÀÇ °æ¿ì Äڵ巹º§¿¡¼ ÀÔ·ÂÇØÁØ´Ù.
BEGIN_MESSAGE_MAP
// WM_COPYDATA¿¡ ´ëÇÑ ¸Þ½ÃÁö ¸Ê ÀÛ¼º
// TMessage¸¦ »ç¿ëÇÑ´Ù.
VCL_MESSAGE_HANDLER(WM_COPYDATA, TMessage, GetCopyData );
END_MESSAGE_MAP(TForm);
3. ÇØ´ç ó¸® ÇÔ¼ö ¼±¾ð
void __fastcall GetCopyData(TMessage &Msg);
4. ¸Þ½ÃÁö ó¸® ÇÔ¼ö¿¡¼ ó¸®
void __fastcall TForm1::GetCopyData(TMessage &Msg)
{
Print("Message Received");
// copyÇÒ µ¥ÀÌÅÍ ±¸Á¶Ã¼
DINFO myInfo;
// ¸Þ½ÃÁö ¼Û¼ö½Å ±¸Á¶Ã¼
COPYDATASTRUCT *pCopyData;
// MsgÀÇ ÀÎÀÚÁß LParamÀÌ ¼ö½Å Á¤º¸À̹ǷÎ, À̰ÍÀ» °¡¸£Å²´Ù.
// WM_COPYDATA¸¦ »ç¿ëÇϹǷÎ, COPYDATASTRUCTURE°¡ À̰ÍÀ» °¡¸£Å°°Ô ÇÑ´Ù.
pCopyData = (COPYDATASTRUCT*) Msg.LParam; // LParam(copydata)¸¦ °¡¸£Å²´Ù.
// COPYDATASTRUCTÀÇ 3°³ ¸â¹ö º¯¼ö·Î access
int dwdata = pCopyData->dwData;
Print( "dwdata DATA = ", dwdata );
int cbdata = pCopyData->cbData;
Print( "CB DATA = ", cbdata );
// COPYDATASTRUCTÀÇ 3°³ ¸â¹ö º¯¼ö Áß
// lpdata°¡ string°ªÀ» ÀúÀåÇßÀ¸¹Ç·Î, À̰ÍÀ» °¡¸£Å²´Ù.
// ±¸Á¶Ã¼·Î ¸¸µé¾ú±â ¶§¹®¿¡ (¼ø¼´ë·Î ²¨³»¿À±â À§Çؼ)
PINFO cpInfo = (PINFO)pCopyData->lpData;
int JigNum = cpInfo->mJigNum;
Print( "JIG NUM= ", JigNum );
int mData = cpInfo->mData;
Print( "mData NUM= ", mData );
AnsiString sData = cpInfo->sData;
Print( "sData = " + sData );
}
¸Þ½ÃÁö ó¸®ÇÔ¼ö´Â ÀÎÀÚ·Î TMessageÇüÀ» ¹ÞÀ¸¸ç, Á¤ÀÇ´Â Çϱâ¿Í °°´Ù. µ¥ÀÌÅ͸¦ ´ã¾Æ¼ º¸³»´Â ÆÄ¶ó¹ÌÅÍ´Â LParamÀ̸ç, WM_COPYDATA ¸Þ½ÃÁö¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â COPYDATASTRUCT ±¸Á¶Ã¼¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
struct TMessage
{
Cardinal Msg;
union
{
struct
{
Word WParamLo;
Word WParamHi;
Word LParamLo;
Word LParamHi;
Word ResultLo;
Word ResultHi;
};
struct
{
int WParam;
int LParam;
int Result;
};
};
} ;
typedef struct tagCOPYDATASTRUCT { // cds
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT;
dwData
Specifies up to 32 bits of data to be passed to the receiving application.
cbData
Specifies the size, in bytes, of the data pointed to by the lpData member.
lpData
Points to data to be passed to the receiving application. This member can be NULL.
¸Þ½ÃÁö ó¸® ÇÔ¼öÀÇ ÀÎÀÚÀÎ MsgÀÇ Msg.LParamÀ» COPYDATASTRUCTURE°¡ °¡¸£Å°µµ·Ï Çϰí
pCopyData = (COPYDATASTRUCT*) Msg.LParam; // LParam(copydata)¸¦ °¡¸£Å²´Ù.
COPYDATASTRUCTURE ±¸Á¶Ã¼ÀÇ ¸â¹ö º¯¼ö´Â ÇϱâÀÇ ¹æ¹ýÀ¸·Î Access ÇÑ´Ù.
int dwdata = pCopyData->dwData;
Print( "dwdata DATA = ", dwdata );
int cbdata = pCopyData->cbData;
Print( "CB DATA = ", cbdata );
// COPYDATASTRUCTÀÇ 3°³ ¸â¹ö º¯¼ö Áß
// lpdata°¡ string°ªÀ» ÀúÀåÇßÀ¸¹Ç·Î, À̰ÍÀ» °¡¸£Å²´Ù.
// ±¸Á¶Ã¼·Î ¸¸µé¾ú±â ¶§¹®¿¡ (¼ø¼´ë·Î ²¨³»¿À±â À§Çؼ)
»ç¿ëÀÚ Á¤ÀÇ ¸Þ½ÃÁö¸¦ ¾ò±â À§Çؼ ÇϱâÀÇ ¹æ¹ýÀ» ÀÌ¿ëÇÑ´Ù.
COPYDATASTRUCT Æ÷ÀÎÅÍ º¯¼ö¸¦ ÀÌ¿ëÇØ »ç¿ëÀÚ Á¤ÀÇ ¸Þ½ÃÁö ±¸Á¶Ã¼·Î Á¢±ÙÇÑ´Ù.
PINFO cpInfo = (PINFO)pCopyData->lpData;
PINFO cpInfo = (PINFO)pCopyData->lpData;
int JigNum = cpInfo->mJigNum;
Print( "JIG NUM= ", JigNum );
int mData = cpInfo->mData;
Print( "mData NUM= ", mData );
AnsiString sData = cpInfo->sData;
Print( "sData = " + sData );
<<ÀÀ¿ë ÇÁ·Î±×·¥ ¿¹>>
¼Û½ÅºÎ
¼ö½ÅºÎ
|
°ü·Ã ±Û ¸®½ºÆ®
|
ÇÊ¿äÇØ¼... À¥Çϵå ÇÒ ¶§µµ Çѹø »ç¿ëÇß´Â µ¥...
SendMessage ÀÌ ³ðÀº Àú´Â Àß »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ÀÀ´ä ¿Ã ¶§±îÁö...
±â´Ù¸®Áö¿ä... ±×·¡¼ ´ëºÎºÐÀº PostMessage¸¦ »ç¿ëÇÏÁö¿ä.
±×·±µ¥ WM_COPYDATA´Â SendMessage ¾Æ´Ï¸é ¾ÈµÇÁö¿ä.
±×·±µ¥ ¹®Á¦´Â À©µµ¿ì ÇÚµéÀº ÀÖ´Â µ¥ ¸¸¾à Ȥ ¼ö½Å ÇÁ·Î±×·¥ÀÌ... ¹«ÇÑ·çÇÁ³ª
ÀÀ´äÇÒ ¼ö ¾ø´Â »óÅ·ΠµÇ¾î ÀÖ´Ù¸é º¸³»´Â ÇÁ·Î±×·¥µµ ¸ØÃß¾î ¹ö¸®´Â
Çö»óÀÌ ÀϾÁö¿ä.
±×·¡¼ ÀÏÁ¤ ½Ã°£ °æ°ú ÈÄ ºüÁ® ³ª¿À´Â ³ðÀ¸·Î...
LRESULT SendMessageTimeout( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT fuFlags, UINT uTimeout, PDWORD_PTR lpdwResult );
¼ö½ÅÂʵµ ±×·² °æ¿ì´Â µå¹°Áö¸¸...
°ª¸¸ ¼ö½Å ¹Þ°í ¹Ù·Î BOOL ReplyMessage(LRESULT lResult); À» »ç¿ëÇØ¼
¼Û½ÅÂÊ¿¡ Àß ¹Þ¾Ò´Ù´Â ¸®ÅϰªÀ» º¸³À´Ï´Ù. ±×·¯¸é ¼Û½ÅÂÊÀº ¹Ù·Î ´ÙÀ½ ÀÏÀ» ó¸®ÇÒ ¼ö
ÀÖ°ÚÁö¿ä... PostMessage¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸´Ï... ÃÖ´ëÇÑ PosticÇÏ°Ô »ç¿ëÇÕ´Ï´Ù.
Á¦°¡ WM_COPYDTA¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ̾ú½À´Ï´Ù ^^