如何向其他程序窗口中某一个Edit控件里发送文本?(50分)

  • 主题发起人 主题发起人 w8u
  • 开始时间 开始时间
name 不同啊![:D]
 
那个地址的程序可以实现的,<br>不过要注意大小写。<br>你再试试看。
 
var MPoint:TPoint;<br>&nbsp; &nbsp; controlhwnd: Integer;<br><br>getcaretpos(MPoint);<br>controlhwnd:=windowfrompoint(MPoint);<br><br>这个例子从光标处获得句柄,这样就避免了Caption的同名问题。
 
TO:iseek<br>你这样做不是很好吧?如果要用来显示密码框还有点用的。<br><br>========================<br>if StrPas(WindowCaption)=Form1.Edit1.Text then &nbsp; &nbsp;//注意大小写<br><br>if Pos('EDIT',UpperCase(StrPas(WindowClass))) &gt; 0 then &nbsp; //EDIT改为DBEDIT
 
to 影 子:<br>我现在已经能够找到一个窗体上所有的控件的handle,但就是不知道怎么样确定是我想要的那个控件.<br>我的步骤是:<br>1.通过.hwnd1:=FindWindow(nil,'窗口标题');得到窗口handle.<br>2.通过 EnumChildWindows(hWnd1,@EnumChildWndProc,0);列举该窗口上所有的控件.<br>3.在 EnumChildWndProc函数中对获得的控件handle处理.<br>现在的问题是我怎么确定某一个控件就是我想要的呢?我只能通过GetClassName得到控件的ClassName.<br>如:<br>DBEDit_Zgbh:TDBEdit;<br>DBEdit_zbgh 是控件名称.<br>TDBEdit 是类名.ClassName;<br>现在我要得到控件名称为 DBEdit_zgbh的DBEdit控件怎么办?<br>
 
TO ISEEK:<br>&gt; 这个例子从光标处获得句柄,这样就避免了Caption的同名问题。<br>我要的是批发送,每个点一次岂不是失去意义了,我很头痛啊。<br>其实我是要测试一个程序,就是要看它在很多客户端类似并发的情况下服务器会不会出错。<br>
 
仔细看看。<br>不管位置如何,<br>最后一个放下的DBEDIT的值会改变成1,<br>倒数第二个变为2,<br>...<br>如此类推。<br>一个程序的DBEDIT已经固死,<br>按顺序是否作改动就行了。<br>
 
"最后一个放下的DBEDIT的值会改变成1,"<br>什么值?
 
我说的是这个地址下的程序。<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=296144<br>之中有Inc(cnt);不断加1,并sendMessage。<br>意思是,最后的DBEDIT会首先接收到Message,类推下去。
 
感谢影 子,成功了.<br>我是这么做的:<br>先运行一个程序通过sendMessage写数字到那些控件上去并记住我要的控件的数字然后再编另一个程序来控制.
 
在向其他程序窗口中某一个控件里发送文本时,我做了这么一个函数,<br>但执行时连窗口都找不到,大家看看,想想办法。<br><br><br>function ShowChildWinID( WinCaption:string; CtrlClass:string ):boolean;<br>var<br>&nbsp; cnt: integer;<br><br>&nbsp; function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean;<br>&nbsp; var<br>&nbsp; &nbsp; WindowCaption,WindowClass:array[0..254] of Char;<br>&nbsp; begin<br>&nbsp; &nbsp; GetClassName(Hwnd,WindowClass,255);<br>&nbsp; &nbsp; if Pos('CtrlClass',UpperCase(StrPas(WindowClass))) &gt; 0 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; Inc(cnt);<br>&nbsp; &nbsp; &nbsp; SendMessage(Hwnd,WM_SETTEXT,0,LongInt(PChar(IntToStr(cnt))));<br>&nbsp; &nbsp; &nbsp; //if cnt = ChildWinID then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;这里是为了向固定的ChildWinID显示S &nbsp; &nbsp; &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; //SendMessage(Hwnd,WM_SETTEXT,0,LongInt(PChar(s)));<br>&nbsp; &nbsp; end;<br>&nbsp; &nbsp; Result := True;<br>&nbsp; end;<br><br>&nbsp; function EnumWindowsProc(Hwnd:THandle;lParam:LParam):boolean;<br>&nbsp; var<br>&nbsp; &nbsp; WindowCaption:array[0..254] of Char;<br>&nbsp; &nbsp; WinCapStr:string;<br>&nbsp; begin<br>&nbsp; &nbsp; GetWindowText(Hwnd,WindowCaption,255);<br>&nbsp; &nbsp; if StrPas(WindowCaption)= WinCaption then<br>&nbsp; &nbsp; WinCapStr := StrPas(WindowCaption);<br>&nbsp; &nbsp; if WinCapStr = WinCaption then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; cnt := 0;<br>&nbsp; &nbsp; &nbsp; EnumChildWindows(Hwnd,@EnumChildProc,0);<br>&nbsp; &nbsp; &nbsp; Result := False;<br>&nbsp; &nbsp; &nbsp; Exit;<br>&nbsp; &nbsp; end;<br>&nbsp; &nbsp; Result := True;<br>&nbsp; end;<br><br>begin<br>&nbsp; Enumwindows(@EnumWindowsProc,0);<br>end;<br><br>///////////////////////////////////////////////////////////////////////////<br>调用方法<br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>&nbsp; ShowChildWinID('FormCustom','Edit');<br>end;
 
后退
顶部