Почему то ловятится та программа, которая вызывает DLL- с WH_CBT
, хотся хук задается так
CBTSysHook = SetWindowsHookEx(WH_CBT, &CBTProc, hInst, 0)
Вид такой
ClassName || WindowText
#327700 || myMonitor
#327700 || myMonitor
HHOOK SysHook, CBTSysHook, WNDSysHook;
HINSTANCE hInst;
struct myStr
{
CString cWind, cClass;
};
CList<myStr, myStr&> myWindList;
...
LRESULT CALLBACK CBTProc(
int code, // hook code
WPARAM wParam, // removal flag
LPARAM lParam // address of structure with message
)
{
if (code < 0) return CallNextHookEx(CBTSysHook, code, wParam, lParam);
if(code == HCBT_ACTIVATE)
{
HWND hwnd = (HWND) wParam;
if (IsWindow(hwnd)==TRUE)
{
myStr str;
GetClassName( hwnd, myStr.cClass.GetBuffer(64), 64);
GetWindowText( hwnd, myStr.cWind.GetBuffer(64), 64);
myWindList.AddTail(str);
}
}
return 0;
}
...
void RunStopHook(BOOL State)
{
if (State == TRUE)
{
//SysHook = SetWindowsHookEx(WH_SHELL, &ShellProc, hInst, 0);
CBTSysHook = SetWindowsHookEx(WH_CBT, &CBTProc, hInst, 0);
//WNDSysHook = SetWindowsHookEx(WH_CALLWNDPROCRET, &CallWndRetProc, hInst, 0);
}
else
{
//UnhookWindowsHookEx(SysHook);
UnhookWindowsHookEx(CBTSysHook);
//UnhookWindowsHookEx(WNDSysHook);
AfxDaoInit(); // preparing for DAO
CDaoDatabase database;
CDaoRecordset recordset(& database);
// Open database and recordset
database.Open("d:\\¦юш фюъєьхэЄv\\+рчv фрээvї\\hookBase.mdb");
recordset.Open(AFX_DAO_USE_DEFAULT_TYPE,
"SELECT * FROM testHook", 0);
myStr str;
POSITION pos = myWindList.GetHeadPosition();
for (int i=0;i < myWindList.GetCount();i++)
{
str = myWindList.GetNext(pos);
if ((strlen( str.cWind ) < 255) &&
(strlen( str.cClass ) < 255))
{
recordset.AddNew();
recordset.SetFieldValue("lpszName", (LPCSTR) str.cWind.GetString());
recordset.SetFieldValue("lpszClass", (LPCSTR) str.cClass.GetString());
recordset.Update();
}
else
{
CString strC, strD;
strC.AppendFormat("%i", strlen( str.cWind ));
strD.AppendFormat("%i", strlen( str.cClass));
recordset.AddNew();
recordset.SetFieldValue("lpszName", (LPCSTR) strC.GetString());
recordset.SetFieldValue("lpszClass", (LPCSTR) strD.GetString());
recordset.Update();
}
}
myWindList.RemoveAll();
recordset.Close();
database.Close();
AfxDaoTerm();
}
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
19.10.06 18:36: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, redkin_pavel, Вы писали:
_>Почему то ловятится та программа, которая вызывает DLL- с WH_CBT
_>, хотся хук задается так
_>_>CBTSysHook = SetWindowsHookEx(WH_CBT, &CBTProc, hInst, 0)
_>
Тема global hooks обсуждалась буквально на прошлой неделе, ищите да обрящете.