Возникает ошибка RSDN@Home при установке своего хука WH_CBT
От: redkin_pavel  
Дата: 26.08.06 07:29
Оценка:
Код моего хука такой:
CallNextHookEx(SysHook, code, wParam, lParam);
if (( code == HCBT_CREATEWND ) )
{


LONG myStyle = ((CBT_CREATEWND *)lParam)->lpcs->style,
lCaption = WS_CAPTION, lVisible = WS_VISIBLE;
if ( ((myStyle & WS_CAPTION) == WS_CAPTION) )
{
CStringW cstrwWindowsTitleName( TEXT("nothing") ),
cstrwWindowsClassName( TEXT("nothing") );

if ( AfxIsValidAddress((CBT_CREATEWND *)lParam, sizeof(CBT_CREATEWND), FALSE) )
{
if (AfxIsValidString( ((CBT_CREATEWND *)lParam)->lpcs->lpszName ) && AfxIsValidString(((CBT_CREATEWND *)lParam)->lpcs->lpszClass) )
{
cstrwWindowsTitleName.SetString( ((CBT_CREATEWND *)lParam)->lpcs->lpszName ),
cstrwWindowsClassName.SetString( ((CBT_CREATEWND *)lParam)->lpcs->lpszClass );
};
};

CStringW cstrFind;
cstrFind.AppendFormat(TEXT("lpszName = '%s' AND lpszClass = '%s'"), cstrwWindowsTitleName.GetString(), cstrwWindowsClassName.GetString());
CTime myTime(CTime::GetCurrentTime());

Ошибка такая:

System.Runtime.InteropServices.SEHException: Внешний компонент создал исключение.
at System.Windows.Forms.UnsafeNativeMethods.IntCreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
at System.Windows.Forms.UnsafeNativeMethods.CreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.Form.CreateHandle()
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Rsdn.Janus.ApplicationManager.Run()
at Rsdn.Janus.Janus.Main()
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Возникает ошибка RSDN@Home при установке своего хука WH_
От: mcf  
Дата: 26.08.06 12:33
Оценка:
Здравствуйте, redkin_pavel, Вы писали:

_>Код моего хука такой:

LONG myStyle = ((CBT_CREATEWND *)lParam)->lpcs->style,
и
if ( AfxIsValidAddress((CBT_CREATEWND *)lParam, sizeof(CBT_CREATEWND), FALSE) )

Уже нестыковочка.
А вообще проверять указатели на валидность страшная вещь. Во-первых это говорит о потенциальной ошибке, которую вы допускаете, но не можете найти. Во-вторых эта функция работает очень медленно.
Re[2]: Возникает ошибка RSDN@Home при установке своего хука
От: redkin_pavel  
Дата: 27.08.06 10:39
Оценка:
Здравствуйте, mcf, Вы писали:

mcf>Здравствуйте, redkin_pavel, Вы писали:


_>>Код моего хука такой:

mcf>LONG myStyle = ((CBT_CREATEWND *)lParam)->lpcs->style,
mcf>и
mcf>if ( AfxIsValidAddress((CBT_CREATEWND *)lParam, sizeof(CBT_CREATEWND), FALSE) )

mcf>Уже нестыковочка.

mcf>А вообще проверять указатели на валидность страшная вещь. Во-первых это говорит о потенциальной ошибке, которую вы допускаете, но не можете найти. Во-вторых эта функция работает очень медленно.
А как узнать когда можно считать название окна и имя класса окна при его создании, а то на Light Alloy вылетает и бывает в других местах, а считываю когда у окна есть заголовок ( WS_CAPTION )?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.