查看單個文章
舊 2007-10-20, 09:34 AM   #4 (permalink)
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9694小時 | 升級還需:103小時級別:96 | 在線時長:9694小時 | 升級還需:103小時級別:96 | 在線時長:9694小時 | 升級還需:103小時級別:96 | 在線時長:9694小時 | 升級還需:103小時級別:96 | 在線時長:9694小時 | 升級還需:103小時級別:96 | 在線時長:9694小時 | 升級還需:103小時
註冊日期: 2002-12-07
文章: 13261
精華: 0
現金: 26261 金幣
資產: 3024071 金幣
預設

找到一個折衷的寫法
(雖沒有達到理想境界,但可以接受)
c++ 可能需用到 函式指標 觀念
個人大部分是寫 VB

會用到的WinAPI
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

原理是
得到各函式記憶體位址
接著經過一次的判讀決定用哪一個函式
而迴圈統一固定使用 CallWindowProc

經過測試
的確有省略時間
用 OllyDbg 可發現
CallWindowProc 會 push 五個參數
而 If 有 60% 的可能性會被編譯器轉成
虛擬機器判讀語法
如此就會超過
CallWindowProc 總共 6條 組合語言指令

(聽不懂就當本人在自說自話吧~畢竟花了兩個星期研究,有點一言難盡)

至於實作
已在個人 新版 檔案清單列表機 使用到
而範例...
如有版友有興趣
方 打包貼出來分享

mini 目前離線  
送花文章: 2001, 收花文章: 7962 篇, 收花: 26757 次
回覆時引用此帖