大师您好,想请教您C#关于操作Windows窗体的问题。

ahhisoft 2008-05-07 12:42:11
我想编写一个游戏的辅助喊话工具,已经可以捕获窗口了,但是我找不到方法把想要输入的文字输入到游戏界面并且发送出去。这个问题已经困扰我几天了。想请您帮我指点一下。

我的问题:
1、怎样往指定窗体的发言框上发送汉字?
2、游戏禁止使用CTRL+V。

希望大师能给我解决这个问题的思路,不甚感激!
...全文
160 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahhisoft 2008-06-16
  • 打赏
  • 举报
回复
这个答案并不是我想要的。
因为我要接受的窗体不是项目里的窗体,而是另外一个客户端的程序。
目前我用了Sendkey方法,不过使用起来不是很理想。

请教大师有没有办法更好的了?
ericzhangbo1982111 2008-05-07
  • 打赏
  • 举报
回复
不知道是不时你想要的
你可以用sendMessage方法来实现
首先
findwindow 找到窗体 然后发送WM_COPYDATA数据
IntPtr hwnd_win;
IntPtr hwnd_textbox;
hwnd_win = FindWindow(null, "Form4");
hwnd_textbox = FindWindowEx(hwnd_win, new IntPtr(0), null, "button2");
const int BM_CLICK = 0x00F5;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = "Test Message";
cds.cbData = 14;

Message msg = Message.Create(hwnd_textbox, BM_CLICK, new IntPtr(0), new IntPtr(0));
//PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
//SendMessage(hwnd_textbox, BM_CLICK, 0, ref cds);
SendMessage(hwnd_win, WM_COPYDATA, 0, ref cds);


相应dllimport
const int WM_COPYDATA = 0x004A;

[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
IntPtr hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
ref COPYDATASTRUCT lParam // second message parameter
);
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}

在接受的窗体从写DefWndProc
const int WM_COPYDATA = 0x004A;
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
//mystr就是数据
break;
default:
base.DefWndProc(ref m);
break;

}

}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧