首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# api 模拟按钮点击有关问题,

2012-03-29 
c# api 模拟按钮点击问题,高手请进![DllImport(user32, EntryPoint SetParent, ExactSpelling tru

c# api 模拟按钮点击问题,高手请进!
[DllImport("user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
  public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
  [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
  private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
  [DllImport("user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
  public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
  private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
  [DllImport("User32.dll", EntryPoint = "SendMessage")]
  private static extern int SendMessage(IntPtr hWnd,int Msg, IntPtr wParam, string lParam); 
  private const int WM_GETTEXT = 0x000D;
  private const int WM_SETTEXT = 0x000C;
  private const int WM_CLICK = 0x00F5;
  [DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
  private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
  private const int WM_SYSCOMMAND = 0x112;
  private const int SC_MAXIMIZE = 0xF030;
  private const int SC_MINIMIZE = 0xF020;
  private const int SC_RESTORE = 0xF120;
  public const int SW_HIDE = 0;
  public const int SW_SHOW = 5;
  [DllImport("user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
  private static extern int ShowWindow(int hwnd, int nCmdShow);

  private void timer1_Tick(object sender, EventArgs e)
  {
  IntPtr h = FindWindow("#32770", "东北证券通达信V6.03");
  SetParent(h, this.panel1.Handle); //嵌套到panel1内
  SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
  ShowWindow(h.ToInt32(), SW_SHOW);
  timer1.Enabled = false;
  //得到控件
  IntPtr MIMA = new IntPtr(0);
  IntPtr YZMA = new IntPtr(0);
  IntPtr DL = new IntPtr(0);
  if (!h.Equals(IntPtr.Zero))
  {
  //得到控件子窗体,并设置其内容 
  MIMA = FindWindowEx(h, MIMA, "SafeEdit", null);
  if (!MIMA.Equals(IntPtr.Zero))
  {
  //调用SendMessage方法设置其内容 
  SendMessage(MIMA, WM_SETTEXT, h, "123456");

  }
  YZMA = FindWindowEx(h, MIMA, "SafeEdit", null);
  if (!YZMA.Equals(IntPtr.Zero))
  {
  //调用SendMessage方法设置其内容 
  SendMessage(YZMA, WM_SETTEXT, h, "123456");

  }
  //按钮点击
  DL = FindWindowEx(h, DL, "AfxWnd42", null);

  if (!DL.Equals(IntPtr.Zero))
  {
  SendMessage(DL, WM_CLICK, h, "0");

  } 

  }

  }


为什么这个点击没有执行呢??


[解决办法]
一不小心
菜鸟就进来了
于是
帮你顶一下
[解决办法]

探讨
一不小心
菜鸟就进来了
于是
帮你顶一下

[解决办法]
SendMessage(DL, WM_CLICK, h, "0"); 
DL和h是不是反了啊
[解决办法]
C# code
     //按钮点击                 //DL = FindWindowEx(h, DL, "AfxWnd42", null); DL = FindWindowEx(h, YZMA, "AfxWnd42", null); 或者 DL = FindWindowEx(h, MIMA, "AfxWnd42", null);
[解决办法]
一不小心
菜鸟看到了
于是
帮你顶一下
[解决办法]
如果真的找到了按钮的指针,完全可以用API找到按钮的区域,然后用API把光标挪到那个区域然后模似一个左键单击。
[解决办法]
BM_CLICK是"BUTTON"类的消息,不知道这个"AfxWnd42"类是否响应这个消息。
BM_CLICK消息要求后两个参数都是0,并且按钮所在窗口必须处于激活状态才会响应。
可以试试向父窗口发BN_CLICKED事件(通过WM_COMMAND消息);或者向按钮Post鼠标消息。
[解决办法]
没有做过。顶你一下。
[解决办法]
帮你项
[解决办法]
探讨
一不小心
菜鸟就进来了
于是
帮你顶一下

[解决办法]
这是我早期写的一个测试工具,
你自己看看里面的模拟单击事件的步骤。
枚举窗体控件 发送文本 单击事件
[解决办法]
C++编写。
[解决办法]
应该是 SendMessage(hWnd, BM_CLICK, 0, 0); 一句是发送单击事件的。

热点排行