1

我是编程新手。

我打算制作一个程序,它可以将输入/文本发送到一个名为 minecraft 的游戏——它是一个用 Java 制作的游戏。

我正在尝试使用 SendMessage API,但我不知道如何使用它..

到目前为止,这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace MinecraftTest2_Sendinput
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImportAttribute("User32.dll")]
        private static extern int FindWindow(String ClassName, String
        WindowName);

        [DllImportAttribute("User32.dll")]
        private static extern int SetForegroundWindow(int hWnd);

        [System.Runtime.InteropServices.PreserveSig]
        [DllImport("User32.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Ansi)]
        public static extern int SendMessage(int hWnd, uint Msg, int wParam, long lParam);


        private void button1_Click(object sender, EventArgs e)
        {
            int hWnd = FindWindow(null, "Minecraft");
            if (hWnd > 0)
            {
                SetForegroundWindow(hWnd);
                //I need to call the SendMessage here! but what should i type in the arguments? 
            }

        }
    }
}
4

1 回答 1

1

这取决于您要发送到窗口的消息。此处此处提供了完整的 Windows 消息列表。wParam 和 lParam 是消息相关的,它们充当发送到窗口消息队列的消息的参数。

这是一个将鼠标左键单击消息发送到窗口的小片段。参数均为空。

 int WM_LBUTTONDOWN = &H201;
 int WM_LBUTTONUP = &H202;
 SendMessage(hWnd, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero); // Mouse Down
 SendMessage(hWnd, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero); // Mouse Up

例如,如果您想通知窗口按下了 Control 键,只需将 MK_CONTROL 用于 wParam,如果您想指定坐标,请像这样使用 lParam

 int lParam = X + Y<<16;
 SendMessage(hWnd, WM_LBUTTONDOWN, IntPtr.Zero, lParam); // Mouse Down
于 2011-06-12T23:17:14.737 回答