在Notepad关闭时,将其文本内容保存到指定文件,初学用HOOK,难度大,用WH_CBT钩子,怎么都实现不了,以下是钩子,请各位老哥帮看一下,在????处如何做
function CBTProc(iCode:integer; wParam: WParam; lParam: lparam): lresult;stdcall;export;
var
hWnd: Thandle;
nLen: Integer;
Buff: array[0..4095] of Char;
PackFile:textFile;
i:integer;
begin
if iCode <0 then
begin
......
end;
if iCode=HCBT_DESTROYWND then
begin
hWnd := Thandle(wparam);
GetClassName(hWnd, @Buff, 128);
if CompareStr(Buff,'Notepad')=0 then
begin
hWnd := FindWindowEx(hWnd, 0, @Buff,nil );
nLen := GetWindowText(hWnd, @Buff, SizeOf(Buff));
// 这儿保存Buff里的文字到文件'E:\b.txt'????此处如何做,下面的代码行不通
begin
AssignFile(PackFile,'E:\b.txt');
Rewrite(PackFile);
try
for i:=0 to nlen-1 do begin
write(PackFile,buff[i]);
end;
finally
closeFile(PackFile);
end;
end;
end;
end;
......
end;
function CBTProc(iCode:integer; wParam: WParam; lParam: lparam): lresult;stdcall;export;
var
hWnd: Thandle;
nLen: Integer;
Buff: array[0..4095] of Char;
PackFile:textFile;
i:integer;
begin
if iCode <0 then
begin
......
end;
if iCode=HCBT_DESTROYWND then
begin
hWnd := Thandle(wparam);
GetClassName(hWnd, @Buff, 128);
if CompareStr(Buff,'Notepad')=0 then
begin
hWnd := FindWindowEx(hWnd, 0, @Buff,nil );
nLen := GetWindowText(hWnd, @Buff, SizeOf(Buff));
// 这儿保存Buff里的文字到文件'E:\b.txt'????此处如何做,下面的代码行不通
begin
AssignFile(PackFile,'E:\b.txt');
Rewrite(PackFile);
try
for i:=0 to nlen-1 do begin
write(PackFile,buff[i]);
end;
finally
closeFile(PackFile);
end;
end;
end;
end;
......
end;
解决方案 »
- 熟悉FastMM的进来看下
- 如何实现checkbox全选中或全部不选中呀?
- 数据库导出文本文件
- 怎样用TADOQUERY查找所有条件等于LISTVIEW.ITEM.Caption值的记录
- 请问那里可以下载1stClass3000的开发指南
- 求一SQL语句,(可能有点难),谢谢大家参于。
- socket 接收网络字节序的问题请教
- 请问一个关与DBgrid控件的问题??
- 关于命名空间(菜鸟莫入!!!!!)
- 在dephi5.0下,在保存sql的Text字段时,总是提示我'Non-blob column in table required to perform operation' 为什么?请各位提示一下?
- 怎样让cxGrid自动获取一个数据集的所有字段?
- 求鼠标全局hook的例子!!急!分不够再加!!
var
Fstr:TFileStream;
begin
....
Fstr:=TFileStream.create('E:\b.txt',fmcreate);
try
Fstr.write(buff,sizeof(buff));
finally
Fstr.Free;
end;
end;
//hWnd := FindWindowEx(hWnd, 0, @Buff,nil ); //这句使hWnd为0
//意思就是在hWnd寻找类名为“Buff”值('Notepad')的窗体
//可Notepad窗体中哪有Notepad窗体?
//真正有文本内容的是Edit窗体~~
GetClassName(hWnd, Buff, 128);
if SameText(Buff, 'Notepad') then
begin
hWnd := FindWindowEx(hWnd, 0, 'Edit', nil);
SendMessage(hWnd, WM_GETTEXT, SizeOf(Buff), Integer(@Buff[0]));
{ TODO : 保存Buff }
end;
if SameText(Buff, 'Notepad') then
begin
hWnd := FindWindowEx(hWnd, 0, 'Edit', nil);
{ TODO : 保存Buff }
with TFileStream.Create('E:\b.txt', fmCreate) do try
Write(Buff[0], SendMessage(hWnd, WM_GETTEXT, SizeOf(Buff), Integer(@Buff[0])));
finally
Free;
end;
end;