想通过一个小程序获取一个叫“客户信息”窗口中不为空编辑框的内容
窗口有四个编辑框,请大家指教。
窗口有四个编辑框,请大家指教。
解决方案 »
- 求在XP/2K 下实现 Win+Ctrl+Del 等键的屏蔽的方法
- 关于用delphi实现组合
- 求MAPX DELPHI例子 200502
- 求点击题头排序的TListView控件
- 大虾帮忙!!如何根据SQLServer的错误代码处理插入记录重复?
- 深度探索DBGrid问题,想必大家都用到这个哈,来者有分!周末散分了哈~~~~~
- 用qiuckreport做的报表的顶部20mm的内容怎样也不能显示出来的
- 小弟求救,比较简单的问题,答对必谢!!!
- 为何说“在映象文件里找不到相应的资源”
- 急急急!!!把delphi的应用程序转换为activeform组件的问题??
- Delphi怎么调用函数接口?
- 求教TMemoryStream 如何通过inty9(tcp)用 Record传输/接收
我用hWindow := FindWindow(nil,'客户信息');找到了窗口,但不知道如何查找其中的编辑框及取其内容。
然后用下面的函数获取编辑框里面的内容:
function GetWndText(ThWnd: hWnd): string;
var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret := SendMessage(ThWnd, WM_GETTEXTLENGTH, 0, 0) + 1;
GetMem(mText,Ret);
try
Buf := LongInt(mText);
SendMessage(ThWnd, WM_GETTEXT, Ret, Buf);
Result := StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;
2.EnumChildWindows 找出所有子窗体
循环再判一下就成了
要读内存,用下面的函数: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;