首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

跨进程,操作TDBNavigator?解决方法

2012-04-11 
跨进程,操作TDBNavigator?library dllusesWindows,StrUtils,Messages,SysUtils,Variants,Classes,Graphic

跨进程,操作TDBNavigator?
library dll;

uses
  Windows,
  StrUtils,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  ADODB,
  DB,
  DBCtrls,
  ExtCtrls,
  ActiveX;
  

{$R *.res}

var
  ControlAtom: TAtom;
  ControlAtomString: string;
  RM_GetObjectInstance: DWORD; // registered window message

  DBNavigatorE: TDBNavigator;


function FindControl(Handle: HWnd): TWinControl;
var
  OwningProcess: DWORD;
begin
  Result := nil;
  if (Handle <> 0) and (GetWindowThreadProcessID(Handle, OwningProcess) <> 0) and
  (OwningProcess = GetCurrentProcessId) then
  begin
  if GlobalFindAtom(PChar(ControlAtomString)) = ControlAtom then
  Result := Pointer(GetProp(Handle, MakeIntAtom(ControlAtom)))
  else
  Result := Pointer(SendMessage(Handle, RM_GetObjectInstance, 0, 0));
  end;
end;

begin
  ControlAtomString := Format('ControlOfs%.8X%.8X', [GetModuleHandle(nil), GetCurrentThreadID]);
  ControlAtom := GlobalAddAtom(PChar(ControlAtomString));
  RM_GetObjectInstance := RegisterWindowMessage(PChar(ControlAtomString));

  DBNavigatorE:= TDBNavigator(FindControl(722830));
  DBNavigatorE.BtnClick(int(nbInsert));//这老是不触发事件,出错。实例我已经能抓到
   
  GlobalDeleteAtom(ControlAtom);
  ControlAtomString := '';
end.


[解决办法]
晕倒!!设计不对。换一个解决方案吧

热点排行