和edit控制項不同的是,richedit支援rtf格式,採用wm_getwindowtext訊息只能得到文字資訊,因此如果需要獲取完整的rtf檔案,則需要處理em_streamout訊息,將控制項中的內容寫出。有些控制項對em_streamout進行了過濾,則需要進一步處理em_streamin來在讀入時截獲原始資料。
處理的步驟如下:
1、 獲取目標richedit視窗控制代碼;
2、 hook視窗對應的程序,並子類化該視窗;
3、 截獲em_streamin、em_streamout訊息,將對應的內容寫出。
具體的實現如下:
1、 在hookdll中實現子類化操作
lresult hookproc (
int code, // hook code
wparam wparam, // virtual-key code
lparam lparam // keystroke-message information)
return ::callnexthookex(g_hhook, code, wparam, lparam); }
用於替換的視窗過程如下:
static
lresult callback
richedit_wndproc( hwnd hwnd, uint msg, wparam wparam, lparam lparam )
return 0; }
if( msg == wm_hookspy )
return 0; }
if( g_wndproc )
return ::callwindowproca( g_wndproc, hwnd, msg, wparam, lparam );
else
return 0; }
2、在hook dll中匯出hook函式
inthookremotewindow( hwnd hremotewnd, hwnd hlocalwnd, bool bhook )
else
::unhookwindowshookex( g_hhook );
} }
return true; }
3、 在對話方塊中接受hook dll傳送的資料並顯示
static
dword callback
mystreamincallback(dword dwcookie, lpbyte pbbuff, long cb, long *pcb)
bool ccrackdlg::oncopydata(cwnd* pwnd, copydatastruct* pcopydatastruct)
4、demo如下
讀取其它程序richedit控制項的內容
和edit控制項不同的是,richedit支援rtf格式,採用wm getwindowtext訊息只能得到文字資訊,因此如果需要獲取完整的rtf檔案,則需要處理em streamout訊息,將控制項中的內容寫出。有些控制項對em streamout進行了過濾,則需要進一步處理em streamin來...
讀取其他程序的資料
typedef struct tagwndinfo wndinfo,lpwndinfo bool callback myenumproc hwnd hwnd,lparam lparam 列舉所有程序 if iswindowvisible hwnd 當前視窗是否可見 return true hwnd ...
VC獲取其他程序ListCtrl內容
vc讀寫其他程序listctrl資料到本程序的例項,下面用windows任務管理器來做測試 1 捕獲視窗控制代碼 用spy 可以看到如下父子視窗關係 新增listctrl,設定style report 關聯控制項變數m listctrl,再新增乙個按鈕,如下圖 4 程式不足 a 在獲取任務管理器 程...