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开发的好帮手。