跨进程,操作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.
[解决办法]
晕倒!!设计不对。换一个解决方案吧