我正在使用以下代码:
PostMessage(handle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
这可以点击Button
,但不能点击LinkLabel
。任何线索,为什么不呢?是否有解决方法?
(将光标移动到那里然后点击是不合适的,除非有办法从它的手柄中获取LinkLabel的坐标。我宁愿不这样做,除非没有别的方法。另外,这应该是仅在调用者的代码中完成,不会更改LinkLablel的应用程序代码。)
答案 0 :(得分:2)
那将是
LinkLabel label = (LinkLabel)Control.FromHandle( handle );
((IButtonControl)label).PerformClick();
(虽然没有测试过)
诀窍是获取对实际链接标签的引用,以便您可以使用它实现IButtonControl
接口的事实。
编辑1 :那怎么样:
int WM_LBUTTONDOWN = 0x201;
int WM_LBUTTONUP = 0x202;
int MK_LBUTTON = 1;
PostMessage( handle, WM_LBUTTONDOWN, MK_LBUTTON, 0 );
PostMessage( handle, WM_LBUTTONUP, MK_LBUTTON, 0 );
编辑2 :这也应该有效(受David Heffernan建议的启发)
AutomationElement label = AutomationElement.FromHandle( handle );
var invokePattern = label.GetCurrentPattern( InvokePattern.Pattern ) as InvokePattern;
invokePattern.Invoke();