// CuWaitKeyEven.h
class CuWaitKeyEven
{
CuWinThread *m_pProcessThread;
public:
wstring m_strSys;
HANDLE *_pHandleArray;
wstring *_pStrEven;
int _nNumEvent;
// 程式設定檔
CuWaitKeyEven();
virtual ~CuWaitKeyEven();
void Init();
static DWORD Process(LPVOID lpVoid);
};
// CuWaitKeyEven.cpp
CuWaitKeyEven::CuWaitKeyEven()
:m_strSys(L"HardKey_sys.cfg")
,_pHandleArray(NULL)
,_nNumEvent(0)
,_pStrEven(NULL)
,m_pProcessThread(NULL)
{
}
CuWaitKeyEven::~CuWaitKeyEven()
{
if( m_pProcessThread )
{
m_pProcessThread->Delete();
}
if( _pHandleArray )
{
for( int i = 0 ; i < _nNumEvent ; i++ )
{
CloseHandle(_pHandleArray[i]);
}
delete [] _pHandleArray;
}
if( _pStrEven )
delete [] _pStrEven;
}
DWORD CuWaitKeyEven::Process(LPVOID lpVoid)
{
CuWaitKeyEven *pWaitKeyEven = (CuWaitKeyEven *)lpVoid;
DWORD dwResult;
int nIndex;
while (1)
{
dwResult = WaitForMultipleObjects(pWaitKeyEven->_nNumEvent, pWaitKeyEven->_pHandleArray, FALSE, INFINITE);
keybd_event(VK_F12, 0, 0 ,0);
keybd_event(VK_F12, 0, KEYEVENTF_KEYUP,0);
nIndex = dwResult - WAIT_OBJECT_0;
ResetEvent(pWaitKeyEven->_pHandleArray[nIndex]);
PostMessage(GetTheApp()->m_hWnd, WM_HR_PROCESS, (WPARAM)(void*)pWaitKeyEven->_pStrEven[nIndex].c_str(), (LPARAM)pWaitKeyEven);
}
return 0;
}
void CuWaitKeyEven::Init()
{
CuModuleFile mf;
wstring strTempSysName = mf.GetModuleFileName(m_strSys.c_str());
IuFileLex *pFileLex;
pFileLex = new CuFileLex;
pFileLex->Open(strTempSysName.c_str(), L"r");
pFileLex->_readInt(_nNumEvent);
if( _nNumEvent )
{
_pHandleArray = new HANDLE[_nNumEvent];
_pStrEven = new wstring[_nNumEvent];
wstring strEven;
for( int i = 0 ; i < _nNumEvent ; i++ )
{
pFileLex->_readString(strEven);
_pStrEven[i] = strEven;
_pHandleArray[i] = CreateEvent( NULL, TRUE, FALSE, strEven.c_str()) ;
}
m_pProcessThread = ::_BeginThread((_THREADPROC)CuWaitKeyEven::Process, (LPVOID)this);
}
pFileLex->Release();
}
2010年2月1日 星期一
CuWaitKeyEven - 等待外部文字檔標示的EVENT
訂閱:
張貼留言 (Atom)
這個算是復合應用類別, 將前面的基礎類別結合, 就能用極少的碼完成特別的功能! -- 將收到的EVENT轉為WM Message 丟回 theApp Main windows.
回覆刪除