讀取其它程序richedit控制項的內容

2021-05-10 11:05:36 字數 1583 閱讀 3128

和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 ...

Delphi獲取其它程序視窗控制代碼的4種方法

於 handle findwindow nil,pchar 視窗的標題 或者 procedure tform1.button1click sender tobject var hcurrentwindow hwnd wndtext string begin hcurrentwindow getwin...