我是编程新手。
我将制作一个程序,可以将输入/文本发送到名为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?
}
}
}
}
答案 0 :(得分:1)
这取决于您要发送到窗口的消息。 Windows消息的完整列表可用here和here。 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