zoukankan      html  css  js  c++  java
  • 关于获取其它程序窗口编辑框内容解决思路

    关于获取其它程序窗口编辑框内容
    想通过一个小程序获取一个叫“客户信息”窗口中不为空编辑框的内容
    窗口有四个编辑框,请大家指教。

     


    ------解决方案--------------------
    先获取到编辑框的句柄,可以根据Z序查找到句柄,你用Spy++看下;
    然后用下面的函数获取编辑框里面的内容:

    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;


    ------解决方案--------------------
    既然找到了句柄,直接用api GetWindowText不就得了
    ------解决方案--------------------
    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);
  • 相关阅读:
    【CF103D】Time to Raid Cowavans-分块+离线处理
    【BZOJ3992】序列统计(SDOI2015)-NTT+循环卷积+快速幂
    【BZOJ3527】力(ZJOI2014)-FFT
    【HDU4609】3-idiots-FFT+生成函数
    【LuoguP3803】多项式乘法-FFT/NTT模板题(附带FFT/NTT简单介绍)
    网络流24题解题总结(更新中)
    【BZOJ3531】旅行(SDOI2014)-树链剖分+动态加点线段树
    [Noip2012]借教室
    bzoj3394:[Usaco2009 Jan]Best Spot 最佳牧场
    [NOIP2014]无线网站发射器选址
  • 原文地址:https://www.cnblogs.com/jijm123/p/6487308.html
Copyright © 2011-2022 走看看