这问题300分~~~~~~~~~~~~~~~ ( 积分: 300 )

  • 主题发起人 主题发起人 wwwvw
  • 开始时间 开始时间
W

wwwvw

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个外部程序,这个程序窗体的caption:='TestForm',<br>里面有一个 RadioButton1 控件,默认状态是没有被选中(也就是 Checked:=false).<br>怎么在我的程序里发消息使这个外部程序里 RadioButton1控件的 Checked:=true<br>这是一个关于消息句柄的问题,相信很多人都写过这个,要求给出详细代码并有注释<br>谢谢~~!
 
有一个外部程序,这个程序窗体的caption:='TestForm',<br>里面有一个 RadioButton1 控件,默认状态是没有被选中(也就是 Checked:=false).<br>怎么在我的程序里发消息使这个外部程序里 RadioButton1控件的 Checked:=true<br>这是一个关于消息句柄的问题,相信很多人都写过这个,要求给出详细代码并有注释<br>谢谢~~!
 
procedure TCustomCheckBox.SetState(Value: TCheckBoxState);<br>begin<br> &nbsp;if FState &lt;&gt; Value then<br> &nbsp;begin<br> &nbsp; &nbsp;FState := Value;<br> &nbsp; &nbsp;if HandleAllocated then<br> &nbsp; &nbsp; &nbsp;SendMessage(Handle, BM_SETCHECK, Integer(FState), 0);<br> &nbsp; &nbsp;if not ClicksDisabled then Click;<br> &nbsp;end;<br>end;<br>这是CheckBox的原代码,你可以看看,应该对你有帮助的
 
问题的关键是找到RadioButton1 控件的句柄,然后使用SendMessage(RadioButton1.Handle, BM_SETCHECK, BST_CHECKED, 0);<br><br>你可以用[句柄查看器]获得RadioButton1 控件的句柄!
 
是不是要先取得窗口的句柄才能进一步取得控件的句柄<br>leosoft 能具体写几段代码吗
 
楼上的兄弟RadioButton1.Handle,好像是本程序吧<br><br>下面的代码测试过,没问题<br>procedure TForm2.Button1Click(Sender: TObject);<br>var<br> &nbsp; H, HRad : THandle;<br>begin<br> &nbsp; H := FindWindow(nil, PChar('TestForm'));<br> &nbsp; if H &gt; 0 then begin<br> &nbsp; &nbsp; &nbsp; HRad := FindWindowEx(H, 0, PChar('TRadioButton'), PChar('RadioButton1'));<br> &nbsp; &nbsp; &nbsp; PostMessage(HRad, BM_SETCHECK, 1, 0);<br> &nbsp; end;<br>end;
 
0桁骀 你的代码运行后没效果<br>是不是哪里没考虑到啊
 
如果有多个这样的对象,能够指定哪一个接收吗。
 
把<br> &nbsp; &nbsp; &nbsp; PostMessage(HRad, BM_SETCHECK, 1, 0);<br>换成<br>SendMessage(btnWnd,WM_LBUTTONDOWN,MK_LBUTTON,0); <br>SendMessage(btnWnd,WM_LBUTTONUP,0,0); <br><br>btnWnd就是hrad,RadioButton1 控件的句柄
 
[red]不能用打死我![/red]<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br> &nbsp; hForm, hBtn : THandle;<br>begin<br> &nbsp; hForm := FindWindow(nil, 'TestForm');<br> &nbsp; if hForm &gt; 0 then <br> &nbsp; begin<br> &nbsp; &nbsp; &nbsp; hBtn := FindWindowEx(hForm, 0, 'TRadioButton', 'RadioButton1');<br> &nbsp; &nbsp; &nbsp; PostMessage(hBtn, BM_CLICK, 1, 0);<br> &nbsp; end;<br>end;
 
呵呵,楼上的兄弟是不是说的太绝对了,你说的好像只限于Delphi与的吧,如果要查找的窗体是用其它语言写的呢?如VC,我想最好还是用Spy++看一下好
 
呵呵,那你就让你的客户用SPY去查看吧.呵呵。不管是用什么语言写的,只要ClassName和WindowText写得正确,效果都一样。FindWindow和FindWindEx本来就是调用了API。懂了吧?
 
刚写的,不知道对你有没有用<br>//AWindow:窗口的标题<br>//HandleIndex:该窗口上第几个控件,想找到你的RadioButton,试着更换HandleIndex<br>//调用代码示例:GetHandle('文件下载',4);<br>function GetHandle(AWindow: string;<br> &nbsp;HandleIndex: integer): THandle;<br>var<br> &nbsp;H: HWND;<br> &nbsp;HTemp, HTemp2: THandle;<br> &nbsp;I: integer;<br>begin<br> &nbsp;I := 0;<br> &nbsp;H := FindWindow(nil, pchar(AWindow));<br> &nbsp;HTemp := 0;<br> &nbsp;HTemp2 := 0;<br> &nbsp;while I &lt; HandleIndex do<br> &nbsp;begin<br> &nbsp; &nbsp;HTemp := FindWindowEx(H, Htemp2, nil, nil);<br> &nbsp; &nbsp;HTemp2 := HTemp;<br> &nbsp; &nbsp;I := I + 1;<br> &nbsp;end;<br> &nbsp;Result := HTemp;<br>end;
 
后退
顶部