3

在 VB.Net 中,您可以使用“DirectCast”将鼠标点击或其他事件发送到其他 DirectX 应用程序。

Delphi中是否有与此等价的功能?或者有什么其他有用的方法吗?

        Public Sub ClickToL(ByVal WindowHandle As IntPtr, ByVal X As Integer, ByVal Y As Integer)
        Dim num As Integer = Me.MakeLong(X, Y)
        Form1.SendMessage(WindowHandle, DirectCast(&H201, IntPtr), IntPtr.Zero, DirectCast(num, IntPtr))
        Form1.SendMessage(WindowHandle, DirectCast(&H202, IntPtr), IntPtr.Zero, DirectCast(num, IntPtr))
    End Sub

此示例将鼠标单击发送到最小化的应用程序 (DirectX)

4

2 回答 2

3

你不需要演员来调用 SendMessage:

SendMessage(WindowHandle, WM_LBUTTONDOWN, 0, MakeLong(X, Y));
SendMessage(WindowHandle, WM_LBUTTONUP, 0, MakeLong(X, Y));

对于它的价值,您的 VB.net 代码错误地将 SendMessage 的第二个参数声明为 IntPtr。它应该是一个无符号的 32 位整数。

如果您确实需要在 Delphi 中实现强制转换,从一种类型到另一种类型,您有两种选择。未经检查的演员表,

X := SomeType(Y);

它将 Y 转换为 SomeType 类型而无需运行时检查。或检查演员表,

X := Y as SomeClass;

这将引发异常是 Y 不是 SomeClass。

于 2012-09-19T21:12:11.127 回答
2

Delphi 等价的DirectCast将是类型转换。

例如将引用变量转换为类Form

VB:      DirectCast(myRef, Form)

Deplhi:  Form(myRef)
于 2012-09-19T21:01:39.157 回答