读书人

关于获取其它程序窗口编辑框内容解决思

发布时间: 2013-04-21 21:18:07 作者: rapoo

关于获取其它程序窗口编辑框内容
想通过一个小程序获取一个叫“客户信息”窗口中不为空编辑框的内容
窗口有四个编辑框,请大家指教。
[解决办法]
1.FindWindows 先找主窗体
2.EnumChildWindows 找出所有子窗体
循环再判一下就成了
[解决办法]
listbox不能这么读啊
要读内存,用下面的函数:

uses CommCtrl;


function TreeNodeGetNext(mHandle: THandle; mTreeItem: HTreeItem): HTreeItem;
var
vParentID: HTreeItem;
begin
Result := nil;
if (mHandle <> 0) and (mTreeItem <> nil) then begin
Result := TreeView_GetChild(mHandle, mTreeItem);
if Result = nil then
Result := TreeView_GetNextSibling(mHandle, mTreeItem);
vParentID := mTreeItem;
while (Result = nil) and (vParentID <> nil) do begin
vParentID := TreeView_GetParent(mHandle, vParentID);
Result := TreeView_GetNextSibling(mHandle, vParentID);
end;
end;
end;

function TreeView_SelectItem_Ex(hwndTV: HWND; slText: TStringList): Boolean;
var
vItemCount: Integer;
vBuffer: array[0..255] of Char;
vProcessId: DWORD;
vProcess: THandle;
vPointer: Pointer;
vNumberOfBytesRead: Cardinal;
I: Integer;
vItem: TTVItem;//uses CommCtrl
vTreeItem: HTreeItem;
begin
Result := False;
if hwndTV = 0 then exit;
GetWindowThreadProcessId(hwndTV, @vProcessId); // ?瑕?????ID
vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
PROCESS_VM_WRITE, False, vProcessId);
if (vProcess = 0) then
Exit;
vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT,
PAGE_READWRITE);
if vPointer = nil then exit;
try
vItemCount := TreeView_GetCount(hwndTV);


vTreeItem := TreeView_GetRoot(hwndTV);
for I := 0 to vItemCount - 1 do
begin
with vItem do
begin
mask := TVIF_TEXT;
cchTextMax := SizeOf(vBuffer);
pszText := Pointer(Cardinal(vPointer) + SizeOf(vItem));
hItem := vTreeItem;
end;

if not WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(vItem),
vNumberOfBytesRead) then break;

SendMessage(hwndTV, TVM_GETITEM, 0, lparam(vPointer));

if not ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer)
+ SizeOf(TLVItem)), @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead) then
break;

slText.Add(vBuffer);
vTreeItem := TreeNodeGetNext(hwndTV, vTreeItem);
end;
finally
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
CloseHandle(vProcess);
end;
end;

读书人网 >.NET

热点推荐