На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> WH_CBT. Почему не работает?
    Dpr:

    ExpandedWrap disabled
      program MainUnit;<br>Uses Windows,SysUtils;<br><br>type MyProcType = procedure (Flag: Boolean); stdcall;<br><br>Var Hook: MyProcType;<br>    HDLL:HWND;<br><br>begin<br> @Hook:=nil;<br> HDLL:=LoadLibrary(PChar('HPPCloser.dll'));<br> IF HDLL>HINSTANCE_ERROR then<br>  Begin<br>   @Hook:=GetProcAddress(HDLL,'Hook');<br>   Hook(True);<br>  End else MessageBox(0,'Error loading of hook!','Error',MB_OK or MB_ICONERROR);<br>end.


    DLL:

    ExpandedWrap disabled
      library HppCloser;<br>uses Windows, Classes;<br><br>Var SysHook:HHook=0;<br><br>Procedure PrintClassName(Hnd: HWND);<br>Var P: PChar;<br>Begin<br> New(P);<br> GetClassName(Hnd,P,255);<br> MessageBox(0,P,'info',MB_OK);<br> Dispose(P);<br>End;<br><br>Function SysCbtProc(Code:Integer; WParam:LongInt; LParam:LongInt):LongInt;<br>Begin<br> IF Code=HCBT_CREATEWND then PrintClassName(wParam);  //='#32770:Dialog';<br> Result:=CallNextHookEx(SysHook,Code,WParam,LParam);<br>end;<br><br>procedure Hook(Flag:Boolean); export; stdcall; <br>Begin <br> IF Flag then SysHook:=SetWindowsHookEx(WH_CBT,@SysCbtProc,HInstance,0) Else <br>  Begin <br>   UnhookWindowsHookEx(SysHook); <br>   SysHook:=0; <br>  End; <br>End;<br><br>exports Hook;<br><br>{$R *.res}<br><br>begin<br>end.


    И получаю в резльтате что ни один MessageBox() не выдаётся, хотя должно выдаться по меньшей мере сотня.
    stdcall ставить пробовал..

    У кого есть какие идеи?
    Сообщение отредактировано: Song -
      Проблема решена.
        как именно?
          Был перепутана форма параметров call-back ф-ии хука.
          С точки зрения Object Pascal и АПИ вообще
          x1,x2: Integer и x1: Integer; x2: Integer; - совершенно разные вещи. В стёк эти параметры передаются неодинаково, хотя выглядит как одно и тоже.
            Гы! А разве в этом проблема была? :)
            (см. >тут<)
            Сообщение отредактировано: 7in -
              2 Song:
              Покажи наглядно, как было, и как надо?
                Было: Function SysCbtProc(Code: Integer; WParam: LongInt; LParam: LongInt):LongInt;
                Надо: Function SysCbtProc(Code:Integer; WParam, LParam: LongInt): LongInt;  

                JinX оспаривает что из-за этого, но у меня его сведения не проходят, возможно проблема в разных Дельфях.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0244 ]   [ 16 queries used ]   [ Generated: 1.05.24, 23:14 GMT ]