个人建议Hook API CreateFile

解决方案 »

  1.   

    这个最开始有做,但是没办法确定是另存为动作啊,其他功能也经常调用这API,总不能都进行处理吧
      

  2.   

    Hook comdlg32.dll中的对应函数?
      

  3.   

    Hook comdlg32.dll中的对应函数?我也试了这个DLL中的getsavefilename,可惜没反应,显示没调用到
      

  4.   

    用SetWindowLong接管记事本主窗口的消息循环,
    处理WM_COMMAND消息就行了,
      

  5.   

    Hook comdlg32.dll中的对应函数?我也试了这个DLL中的getsavefilename,可惜没反应,显示没调用到
    先单步或设断点调试一下notepad.exe
      

  6.   

    我用FindWindow查找记事本的另存为窗口,用setwindowlong来设置窗口子类化,但没有监视到任何消息;另外,单纯处理WM_COMMAND消息,这条件会不会太广了?而且我是想判断用户另存为时的文件名(后缀),再决定是否作处理,COMMAND消息如何获取这个文件名啊?
    我是菜鸟,问题太多,见谅啊
      

  7.   

    Hook comdlg32.dll中的对应函数?我也试了这个DLL中的getsavefilename,可惜没反应,显示没调用到
    先单步或设断点调试一下notepad.exe
    这个HOOK API的方式,还真不会单步或断点调试,一般我是输出文字到控制台窗口
      

  8.   

    我用FindWindow查找记事本的另存为窗口,用setwindowlong来设置窗口子类化,但没有监视到任何消息;另外,单纯处理WM_COMMAND消息,这条件会不会太广了?而且我是想判断用户另存为时的文件名(后缀),再决定是否作处理,COMMAND消息如何获取这个文件名啊?
    我是菜鸟,问题太多,见谅啊
    我之前找到这个信息,是不是这个的缘故:如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函数失败!
      

  9.   

    你必须要写个DLL注入到记事本进程才可以,不同进程不可以子类化.
    然后用SPY++看下菜单ID.BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,  // handle to DLL module
    DWORD fdwReason,     // reason for calling function
    LPVOID lpReserved )  // reserved
    {
    // Perform actions based on the reason for calling.
    switch( fdwReason ) 

    case DLL_PROCESS_ATTACH:
    HWND hWnd = FindWindow(NULL, TEXT("新建文本文档.txt - 记事本"));
    SetWindowLong(hWnd, GWL_WNDPROC, ......)
    break; case DLL_THREAD_ATTACH:
    // Do thread-specific initialization.
    break; case DLL_THREAD_DETACH:
    // Do thread-specific cleanup.
    break; case DLL_PROCESS_DETACH:
    // Perform any necessary cleanup.
    break;
    }
    return TRUE;  // Successful DLL_PROCESS_ATTACH.
    }
      

  10.   

    我再问下啊:notepad的菜单ID是不变的吗?要是可变的,不是就不行了?另外,这样应该就局限于notepad进程了,我若是有.doc或其他文件,不是也得一个个进程的找“另存为”菜单ID?谢谢啊
      

  11.   

    同样的程序菜单ID固定不变的,比如记事本,每个记事本进程的另存为菜单ID都是一样的.
    如果是其他进程,要先找到菜单ID,才可以HOOK
      

  12.   


    实在万分感谢,分不多,有的全给你了,发了几个贴,第一次有人这么耐心跟我讲解。最后一个不是问题的问题,只是确认下:按这么说,实际做法可以是先自己找出几个常用进程如notepad.winword之类的菜单ID,进行消息HOOK吧
      

  13.   


    实在万分感谢,分不多,有的全给你了,发了几个贴,第一次有人这么耐心跟我讲解。最后一个不是问题的问题,只是确认下:按这么说,实际做法可以是先自己找出几个常用进程如notepad.winword之类的菜单ID,进行消息HOOK吧
    是的,然后自己调用API GetSaveFileName()打开另存为对话框