一劳永逸找准操作对应的Hook


PW中有上百个hook,如何知道某一操作和哪个hook对应从而对该动作进行自定义呢?

 当然最直接的方法是搜索PW SDK官方文档,或者查询PW开发包.h文件,找到与动作一致或类似的Hook ID,然后一个个去试,这个方法的缺点是效率很低,经常是找了半天一无所获。

 这里有个更好的办法,整体思路如下:

 1. 新建一个Dll工程,加载PW所有类型的hook,hook类型列举如下:

 2. 在总的hook回调函数里通过传回的hook id得到对应的hook name:

AAHOOK_DELETE_DOCUMENT, L"AAHOOK_DELETE_DOCUMENT",
AAHOOK_MODIFY_DOCUMENT, L"AAHOOK_MODIFY_DOCUMENT", 
AAHOOK_CHECKOUT_DOCUMENT, L"AAHOOK_CHECKOUT_DOCUMENT", 
AAHOOK_COPYOUT_DOCUMENT, L"AAHOOK_COPYOUT_DOCUMENT", 
AAHOOK_EXPORT_DOCUMENT, L"AAHOOK_EXPORT_DOCUMENT",
AAHOOK_CHECKIN_DOCUMENT, "AAHOOK_CHECKIN_DOCUMENT",
AAHOOK_PURGE_DOCUMENT_COPY, L"AAHOOK_PURGE_DOCUMENT_COPY",
AAHOOK_FREE_DOCUMENT, L"AAHOOK_FREE_DOCUMENT",
AAHOOK_REFRESH_DOC_SERV_COPY, L"AAHOOK_REFRESH_DOC_SERV_COPY",
AAHOOK_REFRESH_DOCUMENT_COPY, L"AAHOOK_REFRESH_DOCUMENT_COPY",
AAHOOK_CHANGE_DOC_VERSION, L"AAHOOK_CHANGE_DOC_VERSION",
AAHOOK_CHANGE_DOC_STATE, L"AAHOOK_CHANGE_DOC_STATE",
AAHOOK_CREATE_REDLINE_DOC, L"AAHOOK_CREATE_REDLINE_DOC",
AAHOOK_UPDATE_LINK_DATA, L"AAHOOK_UPDATE_LINK_DATA",
AAHOOK_DELETE_LINK_DATA, L"AAHOOK_DELETE_LINK_DATA",
AAHOOK_LOCK_DOCUMENT, L"AAHOOK_LOCK_DOCUMENT",
AAHOOK_ADD_DOCUMENT_FILE, L"AAHOOK_ADD_DOCUMENT_FILE",
AAHOOK_DELETE_DOCUMENT_FILE, L"AAHOOK_DELETE_DOCUMENT_FILE",
AAHOOK_CHANGE_DOCUMENT_FILE, L"AAHOOK_CHANGE_DOCUMENT_FILE",
AAHOOK_FETCH_MULTIDOCS, L"AAHOOK_FETCH_MULTIDOCS",
AAHOOK_DELETE_DOCUMENT_EXT, L"AAHOOK_DELETE_DOCUMENT_EXT",
AAHOOK_DELETE_DOCUMENTS, L"AAHOOK_DELETE_DOCUMENTS", AAHOOK_COPY_DOCUMENT_CROSS_DS, L"AAHOOK_COPY_DOCUMENT_CROSS_DS", AAHOOK_CREATE_SET, L"AAHOOK_CREATE_SET", 
AAHOOK_ADD_SET_MEMBER, L"AAHOOK_ADD_SET_MEMBER",
AAHOOK_DELETE_SET_MEMBER, L"AAHOOK_DELETE_SET_MEMBER",
AAHOOK_VERIFY_VERSION, L"AAHOOK_VERIFY_VERSION",
AAHOOK_VERIFY_TABLES, L"AAHOOK_VERIFY_TABLES",
AAHOOK_CREATE_TABLES, L"AAHOOK_CREATE_TABLES",
AAHOOK_COPY_DOC_ATTRIBUTES, L"AAHOOK_COPY_DOC_ATTRIBUTES",
AAHOOK_DELETE_USER, L"AAHOOK_DELETE_USER",
AAHOOK_SET_DOC_FINAL_STATUS, L"AAHOOK_SET_DOC_FINAL_STATUS",
AAHOOK_DELETE_GROUP, L"AAHOOK_DELETE_GROUP",
AAHOOK_DELETE_WORKFLOW, L"AAHOOK_DELETE_WORKFLOW",
AAHOOK_DELETE_STATE, L"AAHOOK_DELETE_STATE",
AAHOOK_DEL_WORKFLOW_STATE, L"AAHOOK_DEL_WORKFLOW_STATE",
AAHOOK_DELETE_ENVIRONMENT, L"AAHOOK_DELETE_ENVIRONMENT",
AAHOOK_INVALIDATE_CACHE, L"AAHOOK_INVALIDATE_CACHE",
AAHOOK_ACTIVATE_INTERFACE, L"AAHOOK_ACTIVATE_INTERFACE",
AAHOOK_COPY_DOCUMENTS, L"AAHOOK_COPY_DOCUMENTS",
AAHOOK_DELETE_USERLIST, L"AAHOOK_DELETE_USERLIST",
AAHOOK_COPY_DOCUMENTS_CROSS_DS, L"AAHOOK_COPY_DOCUMENTS_CROSS_DS",
AAHOOK_CREATE_VIEW, L"AAHOOK_CREATE_VIEW",
AAHOOK_MODIFY_VIEW, L"AAHOOK_MODIFY_VIEW",
AAHOOK_DELETE_VIEW, L"AAHOOK_DELETE_VIEW",
AAHOOK_ENUMERATE_VIEWS, L"AAHOOK_ENUMERATE_VIEWS", 
AAHOOK_GET_VIEWCOLUMN_NAME, L"AAHOOK_GET_VIEWCOLUMN_NAME", 
AAHOOK_GEN_SETTING_SET_VALUE, L"AAHOOK_GEN_SETTING_SET_VALUE", 
AAHOOK_USER_SETTING_SET_VALUE, L"AAHOOK_USER_SETTING_SET_VALUE", 
AAHOOK_GROUP_MEMBER_CHANGE, L"AAHOOK_GROUP_MEMBER_CHANGE", 
AAHOOK_APPLICATION_EXIT, L"AAHOOK_APPLICATION_EXIT", 
AAHOOK_OPEN_DOCUMENT, L"AAHOOK_OPEN_DOCUMENT", 
AAHOOK_PRINT_DOCUMENT, L"AAHOOK_PRINT_DOCUMENT", 
AAHOOK_START_APPLICATION, L"AAHOOK_START_APPLICATION", 
AAHOOK_DOC_SEND_MAIL, L"AAHOOK_DOC_SEND_MAIL", 
AAHOOK_LOGIN_DLG, L"AAHOOK_LOGIN_DLG", 
AAHOOK_CREATE_PROJECT_DLG, L"AAHOOK_CREATE_PROJECT_DLG", 
AAHOOK_MODIFY_PROJECT_DLG, L"AAHOOK_MODIFY_PROJECT_DLG", 
AAHOOK_PROJECT_PROPERTY_DLG, L"AAHOOK_PROJECT_PROPERTY_DLG", 
AAHOOK_SELECT_PROJECT_DLG, L"AAHOOK_SELECT_PROJECT_DLG", 
AAHOOK_CREATE_DOCUMENT_DLG, L"AAHOOK_CREATE_DOCUMENT_DLG", 
AAHOOK_SAVE_DOCUMENT_DLG, L"AAHOOK_SAVE_DOCUMENT_DLG", 
AAHOOK_MODIFY_DOCUMENT_DLG, L"AAHOOK_MODIFY_DOCUMENT_DLG", 
AAHOOK_DOCUMENT_PROPERTY_DLG, L"AAHOOK_DOCUMENT_PROPERTY_DLG", 
AAHOOK_SELECT_DOCUMENT_DLG, L"AAHOOK_SELECT_DOCUMENT_DLG", 
AAHOOK_FIND_DOCUMENT_DLG, L"AAHOOK_FIND_DOCUMENT_DLG", 
AAHOOK_DOCUMENT_VERSION_DLG, L"AAHOOK_DOCUMENT_VERSION_DLG", 
AAHOOK_WORKFLOW_DLG, L"AAHOOK_WORKFLOW_DLG", 
AAHOOK_CREATE_SET_DLG, L"AAHOOK_CREATE_SET_DLG", 
AAHOOK_MODIFY_SET_DLG, L"AAHOOK_MODIFY_SET_DLG"

 3. PW里卸载掉所有其他的应用扩展,并加载该Dll工程。

 4. 这样pw每进行一个操作,对应的hook都被显示出来。

 该方法一次建立终身受益,实乃hook开发的好帮手。