1.设置一个WH_CALLWNDPROC钩子,在CallWndProc中:判断Notepad句柄,然后
处理WM_CLOSE消息,
2。后来运行的线程,是否会创建窗口,如果创建,你可以截获WM_CREATE消息。
3。找到'A'的ASCII码

解决方案 »

  1.   

    to  kingzai():
      1、我所指的不是Notepad的Close,而是例如名为SetHook的程序的Close
      2、那个WM_CREATE消息在那儿截获,是Progman吗?
      3、正在试验中!
      

  2.   

    to  kingzai():
      3、不行呀,'A'的ASCII码就是0x41,还是小写'a'
      

  3.   

    1.你可以在钩子中设置一个BOOL变量flag,当SetHook的程序的Close,flag=1;然后UnInstallHookEx.
    2.截获WM_CREATE设置在钩子中
    3。试试WM_CHAR
      

  4.   

    1、我不太懂你的意思,flag有什么用?还有我希望的是调用SetWindowLong来还原Notepad的WndProc入口地址,问题是SetWindowLong只能在Notepad的进程空间调用才有效,我希望有一种变通的方法能在Notepad外进行类似操作。
    2、钩子已钩住了正在运行的线程,新运行的线程没有钩住,钩子不知道新线程的WM_CREATE呀。
    3、实验中
      

  5.   

    1、我不是这个意思,举例说,有一个名为HookDll.dll的动态库进行SetHook、UnHook和Subclass的工作,现写了一个名为TestHook的程序调用HookDll.dll中的SetHook将Notepad挂上钩子,然后SubClass掉了Notepad的WndProc,然后退出TestHook程序,钩子被UnHook掉,HookDll.dll退出Notepad进程空间,于是Notepad找不到WndProc的入口地址挂掉。我希望在TestHook程序退出前将Notepad原来的WndProc还原回去,该怎么办?2、钩子已钩住了运行中的线程,还想钩住将要运行的线程,WM_CREATE的主还没有出现,钩子怎么知道有线程CREATE了?3、实验中
      

  6.   

    PostMessage(hEdit, WM_CHAR, 0x41, 0);
      

  7.   

    1.在DLL的ExitInstance或DLL_PROCESS_DETACH时调用SetWindowLong
     
    2.你可以使用WH_CBT钩子钩住将要创建的窗口进程,在CBTProc中监控HCBT_CREATEWND。
      

  8.   

    WM_CHAR的机制是什么?好像和WM_KEYDOWN不一样,
    因为我感觉WM_CHAR好像做了两次WM_KEYDOWN和WM_UP操作
      

  9.   

    to  kingzai() :
      1、OK,非常感谢。
      2、钩住将要创建的窗口进程?我的问题恰好在此,怎么知道有新的进程要创建了,举个例子,我先运行TestHook做了个钩子,然后希望能钩住将要运行的Notepad,怎么知道什么时候Notepad运行了。
      

  10.   

    2.做个定时器,FindWindow,如果找到notepad的句柄为真,则知道NotePad已经在运行了。
      

  11.   

    不一定非用钩子,问题2答案等待中问题3:WM_CHAR发送一次却有多次响应??例如
    PostMessage(h_Wnd,WM_CHAR,0x41,l_Param)一次却有两个'A'出现
      

  12.   

    2.就用定时器的方法把,比较简单。
    SendMessage(h_Wnd,WM_CHAR,0x41,0);看看
      

  13.   

    使用PretranslateMessage来处理消息把
      

  14.   

    3. WM_CHAR消息在每次WM_KEYDOWN和WM_KEYUP都会出发,所以是2次
      

  15.   

    3. WM_CHAR的wParam中有一位是标志所按键是按下还是放开的(自己查一下MSDN吧,我忘了)
      

  16.   

    ::PostMessage(this->m_hWnd,WM_KEYDOWN,0x41,1);
    最后参数表示重复次数。
    如果是0,肯定是不对的了,呵呵
      

  17.   

    如果是全局钩子的话,Desktop里的所有窗口,包括在装了hook后再启动的,都会被钩住。
      

  18.   

    用WH_SHELL,当nCode=HSHELL_WINDOWCREATED时,判断窗口标题是不是notepad,如果是再SetWindowsHoodEx
      

  19.   

    还有,kingzai()兄:
      因为同题目的贴子已给了全分,所以这个贴字就把分给其他人了,对不起。