首先我应该道歉,因为一开始没有把我的最终任务写出来,让大家走了些弯路:
我在自己的程序里用了DragDrop控件,当从IE里拉出一段文字拖放到悬浮窗口时,
我要保存这段选中文字。
目的:
1。以文本格式保存选中文字。已经做到。
2。同时保存当前IE窗口的URL。我用GetURL函数(见后),不过在Win2000下运行
正常,在Win98+IE4里,GetURL不工作,且不返回,影响了后续指令的运行。
3。保存当前IE窗口里的选中文字的HTML源码。原因很简单,因为HTML源码带有字体
信息,看起来更美观些。但实现起来就不好办了。我的想法是知道IE窗口的handle,
为什么没有一个办法直接得到它的IHTMLDocument2或是其它的什么接口呢?只要得
到了接口,接下来的事情就好办了。
4。在(3)的基础上更进一步,以MHT格式保存选中文字部分及图片部分。道理同上。
但是我想难度会更大些。
只要较好地解决了上述问题,我会视解决程度最少追加100分。
function GetUrl:string;
var
ThisURL:array[0..255] of Char;
Buffer: array[0..10] of Char;
function GetWndClassName(H: HWnd):string ;
var
buf: array[0..10] of Char;
begin
GetClassName(h,buf,10);
result:=trim(Buf);
end;
//callback过程,用于查找窗口控件
function EnumChildWindowsProc(H: HWnd; lparam: longint): Boolean; stdcall;
begin
Result := True; //設定為True才會再找下一個
begin
if GetWndClassName(H)='Edit' then
begin
SendMessage(h,WM_GETTEXT,249,Integer(@ThisUrl));
Result:=False;//設定為false不找下一個
end;
end;
end;
begin
ThisURL:='';
if GetWndClassName(GetForegroundWindow)='IEFrame' then
EnumChildWindows(GetForegroundWindow, @EnumChildWindowsProc, 0);
result:=ThisURL;
end;