SendMessage API到java程序 - 如何

时间:2011-06-12 22:59:59

标签: c# sendmessage minecraft

我是编程新手。

我将制作一个程序,可以将输入/文本发送到名为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? 
            }

        }
    }
}

1 个答案:

答案 0 :(得分:1)

这取决于您要发送到窗口的消息。 Windows消息的完整列表可用herehere。 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