PostMessage BM_CLICK到LinkLabel不起作用

时间:2013-12-30 20:20:57

标签: c# .net winforms winapi

我正在使用以下代码:

PostMessage(handle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);

这可以点击Button,但不能点击LinkLabel。任何线索,为什么不呢?是否有解决方法?

(将光标移动到那里然后点击是不合适的,除非有办法从它的手柄中获取LinkLabel的坐标。我宁愿不这样做,除非没有别的方法。另外,这应该是仅在调用者的代码中完成,不会更改LinkLablel的应用程序代码。)

1 个答案:

答案 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();