[問題] 除錯器加 MouseHook

看板C_and_CPP (C/C++)作者 (麵T)時間10年前 (2015/08/27 22:13), 10年前編輯推噓0(1115)
留言17則, 3人參與, 最新討論串1/1
BCB 6.0 //定義.h //全域變數 extern int DBG__LINE__; extern char DBG__FILE__[1024]; extern char DBG__FUNC__[1024]; //定義 DBG #ifndef DebugH #define DebugH void debug(char *fmt, ...); #define DBG\ {\ DBG__LINE__ = __LINE__;\ strcpy(DBG__FILE__,__FILE__);\ strcpy(DBG__FUNC__,__FUNC__);\ }debug #endif //實作.cpp void debug(char *fmt, ...) { //儲存錯誤資訊 DBG__LINE__, DBG__FILE__ ... } //應用.cpp void 按鈕事件() { DBG("儲存訊息",);//舉例這裡行號為第20行 } 以上在儲存除錯訊息時可以自動補上行號(20)、檔名(應用.cpp) 在真正執行 debug() 副程式前先記錄目前行號、檔名 但缺點就是每個按鈕事件都要寫DBG 所以想加掛勾進去 SetWindowsHookEx ( WH_MOUSE_LL, (HOOKPROC)DBG_AUTO, GetModuleHandle (NULL), NULL ); 但這樣一來就無法用類似的方法 #define DBG_AUTO\ {\ DBG__LINE__ = __LINE__;\ strcpy(DBG__FILE__,__FILE__);\ strcpy(DBG__FUNC__,__FUNC__);\ }LowLevelMouseProc 來先行取得行數、檔名等等 (其實我也不確定 #define DBG 紅色部分寫法是否正確) 請問用掛勾(Hook)要怎麼取得進入掛勾前的行數、檔名資料呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.27.2.150 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1440684823.A.82B.html

08/27 23:39, , 1F
沒辦法
08/27 23:39, 1F

08/27 23:42, , 2F
那退一步想,有沒有辦法得知按鈕名稱?
08/27 23:42, 2F

08/27 23:43, , 3F
我目前可以得到hwnd classname
08/27 23:43, 3F

08/27 23:44, , 4F
button_caption
08/27 23:44, 4F

08/27 23:45, , 5F
但是無法得到 button name
08/27 23:45, 5F

08/29 07:39, , 6F
Enum
08/29 07:39, 6F

08/29 07:42, , 7F
GetClassName
08/29 07:42, 7F
GetClassName 最終只能得到 "TButton" 這個字串,並無法區分是哪個按鈕

08/29 07:42, , 8F
按錯sorry
08/29 07:42, 8F

08/29 07:45, , 9F
你是想要一次hook所有按鈕然後按下時debug訊息自動抓
08/29 07:45, 9F

08/29 07:45, , 10F
取class name吧?
08/29 07:45, 10F

08/29 08:20, , 11F
提供你一個比較容易的方法,建一個ButtonOnMouseDown
08/29 08:20, 11F

08/29 08:20, , 12F
事件,第一個參數TObject *Sender轉型成TButton *btn
08/29 08:20, 12F

08/29 08:20, , 13F
,然後直接對btn存取物件資料還有輸出debug訊息,接著
08/29 08:20, 13F

08/29 08:20, , 14F
你只需要對所有Form上所有的Button設定OnMouseDown事
08/29 08:20, 14F

08/29 08:20, , 15F
件,就能達成了
08/29 08:20, 15F
看來要 debug 只能在每個按鈕事件中手動寫下要除錯的資訊。 ※ 編輯: noodleT (36.237.231.124), 08/30/2015 21:08:22

08/31 07:53, , 16F
一個OnMouseDown可以設定到所有Button上啊,VCL也有提
08/31 07:53, 16F

08/31 07:53, , 17F
供遍歷所有元件的方法讓你一次套用
08/31 07:53, 17F
文章代碼(AID): #1LtniNWh (C_and_CPP)
文章代碼(AID): #1LtniNWh (C_and_CPP)