用hook取得外部程序的一个form的句柄后,再获取form的实例,然后可以用Components[I]).Caption的形式来得到form上的label的值,但是如果要获取的是“stringgrid”之类的控件的某单元格的值,用Components[I]).Cell[x,y],编译时就会产生错误。貌似只能获取常用的几个属性值,如caption或者name等,其他控件专用的属性值就无法获取。不知道遇到这样的问题该如何解决,还请高手指点。
解决方案 »
- !!!!!!新增记录内容顺带问题!!!!!!
- STRINGGRID问题很急的
- 请教一个带参数的SQL问题
- Delphi如何直接调用word文档?急!在线等!
- ★请问,怎样执行指定的文件★ ____达对马上结!.在线等......
- SQL2000Server管理状态下,如何更改库名,复制库中,复制表,为什么复制粘贴都不成?
- 急!求带CHECKBOX的TREEVIEW控件!
- DELPHI中关于调用SQL SERVER存储过程???(高分相送)
- 获取对应字体的大小列表和设置字体大小
- 各位大侠,哪有Delphi 5 开发人员指南的电子文档下载????????
- 请教一个控件重绘的问题
- 怎么判断文本框内有两个小数点
if Components[i] is TStringGrid then begin
TStringGrid(Components[I]).Cell[x,y] // 這樣來取
end;
(Components[I] as TStringGrid).Cell[x,y];
function SnifferProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
var
vWinControl: TWinControl;
vCopyDataStruct: TCopyDataStruct;
I: Integer;
S: string;
begin
case code of
HC_ACTION:
begin
if PCWPStruct(lParam)^.message = WM_SNIFFWINDOW then
begin
if ControlAtomString = '' then
begin
ControlAtomString := Format('ControlOfs%.8X%.8X', [
GetWindowLong(vSnifferInfo^.rHandle, GWL_HINSTANCE),
GetWindowThreadProcessId(vSnifferInfo^.rHandle)]);
ControlAtom := GlobalAddAtom(PChar(ControlAtomString));
RM_GetObjectInstance := RegisterWindowMessage(PChar(ControlAtomString));
end;
vWinControl := FindControl(vSnifferInfo^.rHandle);
if Assigned(vWinControl) then
begin
for I := 0 to vWinControl.ComponentCount - 1 do
begin
S := '';
if SameText(vWinControl.Components[I].ClassName, 'TLabel') then
begin
S := Format('%s: %s', [vWinControl.Components[I].Name,
QuotedStr(TLabel(vWinControl.Components[I]).Caption)]);
end else if SameText(vWinControl.Components[I].ClassName, 'TStringGrid') then
begin
S := Format('%s: %s', [vWinControl.Components[I].Name,
QuotedStr(TStringGrid(vWinControl.Components[I]).Cell[2,2])]);
end;
vCopyDataStruct.cbData := Length(S);
vCopyDataStruct.dwData := 0;
vCopyDataStruct.lpData := @S[1];
SendMessage(vSnifferInfo^.rParam, WM_COPYDATA,
vSnifferInfo^.rHandle, Integer(@vCopyDataStruct));
end;
end;
end;
end;
end;
Result := CallNextHookEx(vSnifferInfo^.rHOOK, code, wParam, lParam);
end;
http://blog.csdn.net/zswang