메시지 맵 이용 방법.
나중에 잊어버릴 경우 여길 검색해서 찾기위해..
단 BC++ 6.0 사용 시 Vista 와 Win7에서는 장치 이름이 정상적으로 출력되지 않고 앞 글자 하나만 출력됨.
유니코드 문제... 유니코드 지원하는 버전 사용 시 정상적으로 얻어옴.
* h
void __fastcall OnDeviceChange(TMessage& Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE , TMessage, OnDeviceChange)
END_MESSAGE_MAP(TForm)
* cpp
#include
void __fastcall TForm1::OnDeviceChange(TMessage& Message)
{
PDEV_BROADCAST_PORT pdbcp = (PDEV_BROADCAST_PORT) Message.LParam;
// 장치가 연결되었을 경우
if(Message.WParam == DBT_DEVICEARRIVAL) {
// 연결된 장치가 Port인 경우.
if (pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
//AnsiString sTemp;
char *COMPort = pdbcp->dbcp_name;
AnsiString sMessage;
sMessage.printf("[%s]Port가 연결됨.", COMPort);
MessageBox(0, sMessage.c_str(), "", MB_ICONWARNING|MB_OK);
}
}
// 장치가 해지된 경우
else if(Message.WParam == DBT_DEVICEREMOVECOMPLETE) {
// 해지된 장치가 Port인 경우.
if(pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
//AnsiString sTemp;
char *COMPort = pdbcp->dbcp_name;
AnsiString sMessage;
sMessage.printf("[%s]Port가 연결 해지 됨.", COMPort);
MessageBox(0, sMessage.c_str(), "", MB_ICONWARNING|MB_OK);
}
}
}
C++ Builder 2010 이용할 경우 정상적으로 장치 이름 얻어옴. ㅡㅡ;
(Project 옵션 Directories and Conditionals / _TCHAR maps to : wchar_t 로 설정)
#include
#include
void __fastcall TForm1::OnDeviceChange(TMessage& Message)
{
PDEV_BROADCAST_PORT pdbcp = (PDEV_BROADCAST_PORT) Message.LParam;
// 장치가 연결되었을 경우
if(Message.WParam == DBT_DEVICEARRIVAL) {
// 연결된 장치가 Port인 경우.
if (pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
_TCHAR *COMPort = pdbcp->dbcp_name;
String sMessage;
sMessage.printf(_T("[%s]Port가 연결됨."), COMPort);
MessageBox(0, sMessage.c_str(), _T(""), MB_ICONWARNING|MB_OK);
}
}
// 장치가 해지된 경우
else if(Message.WParam == DBT_DEVICEREMOVECOMPLETE) {
// 해지된 장치가 Port인 경우.
if(pdbcp->dbcp_devicetype == DBT_DEVTYP_PORT) {
_TCHAR *COMPort = pdbcp->dbcp_name;
String sMessage;
sMessage.printf(_T("[%s]Port가 연결 해지 됨."), COMPort);
MessageBox(0, sMessage.c_str(), _T(""), MB_ICONWARNING|MB_OK);
}
}
}
검색어 : ComPort / USB to Serial / 장치 연결 / 장치 해지 / ComPort 빠짐 / ComPort 연결 /