P
proudjia
Unregistered / Unconfirmed
GUEST, unregistred user!
<br>function EnumChildWindowsProc(hwnd: Integer; lparam: Longint): Boolean; stdcall;<br>//得到窗口(是一个MDIChild类型)中每个控件的 Text 内容(TEdit,TMaskEdit...),成功了。<br>var<br> buffer: array[0..255] of char;<br> s: string;<br>begin<br> Result := True;<br> GetClassName(hwnd, buffer, 256);<br> s := STRPAS(BUFFER);<br> if ((s <> 'TStaticText') and (s <> 'TGroupBox') and (s <> 'TPanel') and (s <> 'TStatusBar') and (s <> 'TButton')<br> and (s <> 'TBitBtn') and (s <> 'MDIClient') and (s <> 'TWjfDBGrid')) then<br> begin<br> form1.ListBox2.Items.Add(inttostr(hwnd) + ' ' + StrPas(Buffer));<br> SetLength(s, 256);<br> SendMessage(hwnd, WM_GETTEXT, 256, LongInt(S));<br> form1.ListBox1.Items.Add(S);<br> end;<br>end;<br><br>function EnumChildWindowsSendDJSW(hwnd: Integer; lparam: Longint): Boolean; stdcall;<br>//想法是把 ListBox2 中的文字再按读出时的顺序写回,虽然我注意了一下这一过程中没个控件也是按上面<br>//的顺序遍历的(hwnd的出现顺序完全同上),但执行完了字符却没写回到相应的地方,哪里有问题吗?<br>//是因为 MDI 子窗口?还是不能在回调函数中写 SendMessage ?还是方法不对?还是。。。其他原因?<br>var<br> buffer: array[0..255] of char;<br> s: string;<br>begin<br> Result := True;<br> GetClassName(hwnd, buffer, 256);<br> s := STRPAS(BUFFER);<br> if ((s <> 'TStaticText') and (s <> 'TGroupBox') and (s <> 'TPanel') and (s <> 'TStatusBar') and (s <> 'TButton')<br> and (s <> 'TBitBtn') and (s <> 'MDIClient') and (s <> 'TDjwjfFMnzqy1') and (s <> 'TWjfDBGrid')) then<br> begin<br> i := i + 1;<br> SendMessage(hwnd,WM_SETTEXT,0,LongInt(PChar(form1.ListBox2.Items.Strings[form1.ListBox3.Items.count - i])));<br> end;<br>end;<br><br>//下面是得到所有编辑控件中的字符。<br> hwnd := FindWindow('<另外一个别人写的程序(Delphi)>', nil);<br> if hwnd <> 0 then<br> EnumChildWindows(hwnd, @EnumChildWindowsProc, Integer(@buffer[0]));<br><br>//下面是想把字符再写回去<br> hwnd := FindWindow('<另外一个别人写的程序(Delphi)>', nil);<br> if hwnd <> 0 then<br> EnumChildWindows(hwnd, @EnumChildWindowsSend, Integer(@buffer[0]));<br><br><br>也看过以前各位高手提供的解决方法,但一般例程仅解决一个窗口上放一个EDIT控件的,我这里的上面有60几个Edit呢,<br>怎么解决顺序的问题呢???(其实我现在就是顺序不对了,获得和写回功能都行了,仅仅是顺序问题)