SendMessage 获取静态文本内容

a396360609 2008-07-12 12:56:06



在一个窗体上有一个label,信息如上,它的内容会变的,我用SendMessage获取它的上面文本内容始终只是"静态"两字,但事实上它显示的不是这两个字

请教一下,有什么办法可以获取真实的内容呢?
...全文
585 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
c2u 2008-07-14
  • 打赏
  • 举报
回复


SendMessage(hwnd, WM_SETTEXT, buffer_size, buffer);
//重绘
this.Refresh();


StringBuilder buffer2 = new StringBuilder(buffer_size);
SendMessage(hwnd, WM_GETTEXT, buffer_size, buffer2);
MessageBox.Show(buffer2.ToString());

c2u 2008-07-14
  • 打赏
  • 举报
回复
Mark
a396360609 2008-07-14
  • 打赏
  • 举报
回复
再顶一下
a396360609 2008-07-14
  • 打赏
  • 举报
回复
我是获取其它程序的信息,具体怎么操作呢?
a396360609 2008-07-13
  • 打赏
  • 举报
回复
再顶一下
JeffChung 2008-07-13
  • 打赏
  • 举报
回复
没遇到过,窗口查看器看到的也是静态两个字,不知道那里怎么弄了
a396360609 2008-07-13
  • 打赏
  • 举报
回复
自已顶一下先,,谁帮一帮,,,,没遇见过这种情况呢
ccb8888 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 JeffChung 的回复:]
没遇到过,窗口查看器看到的也是静态两个字,不知道那里怎么弄了
[/Quote]
a396360609 2008-07-13
  • 打赏
  • 举报
回复
有谁帮忙吗?
..很奇怪的问题
a396360609 2008-07-12
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;


namespace test
{

class sendMessage
{
#region Dll Import

[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

// SendMessage
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hwnd, int wmsg, int wparam, StringBuilder lparam);


[DllImport("User32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, StringBuilder lParam);

/* GetWindowText
[DllImport("User32.dll")]
static extern int GetWindowText(IntPtr handle, StringBuilder text, int MaxLen);

[DllImport("user32.dll", EntryPoint = "GetWindowText")]
public static extern int GetWindowText(int hwnd, StringBuilder lpString, int cch);
*/


#endregion

const int WM_GETTEXT = 0x000D;
const int WM_SETTEXT = 0x000C;
const int WM_CLICK = 0x00F5;
const int WM_GETTEXTLENGTH = 0x000E;
//得到与一个窗口有关的文本的长度(不包含空字符)
const int buffer_size = 1024;

#region SearchWindow

private int SearchWindow()
{
int retval = 0; //增加一个返回值用来判断操作是否成功

//下面的这些参数都可以用Spy++查到
string lpszParentClass = "#32770"; //"#32770" 整个窗口的类名
string lpszParentWindow = "Bake Ice LineageII ";//窗口标题
string lpszClass = "Static"; //需要查找的子窗口的类名,也就是输入框

IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);
IntPtr EdithWnd2 = new IntPtr(0);

//查到窗体,得到整个窗体
ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);

//判断这个窗体是否有效
if (!ParenthWnd.Equals(IntPtr.Zero))
{
//得到User Name这个子窗体,并设置其内容
EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, lpszClass, null);
if (!EdithWnd.Equals(IntPtr.Zero))
{

//调用SendMessage方法设置其内容
//!!!!这里设置后,实际该文本内容显示却没有改变,但是用 <窗口类名查看器>查看却是设置成功了,

string txt =DateTime.Now.ToString();
SendMessage(EdithWnd, WM_SETTEXT, (IntPtr)255, txt);
//MessageBox.Show(txt);

/******************奇怪的地方************************
* 这里获取文本的内容为什么不是显示出来的那个呢?
* 但是假如获取其它文本内容却又正常....
* 如果想获取显示出来的那个要怎么做呢?请高人指点,谢谢
****************************************************/
StringBuilder buffer = new StringBuilder(buffer_size);
SendMessage(EdithWnd, WM_GETTEXT, buffer_size, buffer);
MessageBox.Show(buffer.ToString());

retval++;
}
}

return retval;
}
#endregion

#region Load

private Thread thread;
/// <summary>
///搜索窗体
///</summary>
public void Run()
{
//运行
thread = new Thread(new ThreadStart(Watch));
thread.IsBackground = true;
thread.Start();
}

private void Watch()
{
//循环查找这个窗口,直到成功为止
while (true)
{
int i = this.SearchWindow();

if (i == 1)
//MessageBox.Show("找到该窗体,要退出线程了");
break;
}
}

#endregion

}
}
a396360609 2008-07-12
  • 打赏
  • 举报
回复

我上传了实验资料

里面包括:

一个实验目标程序.exe

一个<窗口类名查看器.jpg>截图

一个<我的代码.cs>--C#编写

一个<要获取的文本内容.bmp>----这是我的目的是获取它显示出来的文本内容

///// 下载地址如下 /////

http://www.live-share.com/files/335998/LineageII.rar.html
JeffChung 2008-07-12
  • 打赏
  • 举报
回复
看不到图,不知道你说的问题具体是怎样的
a396360609 2008-07-12
  • 打赏
  • 举报
回复
对其它Label有效,但对这个就是上面说的那种问题
JeffChung 2008-07-12
  • 打赏
  • 举报
回复

[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hwnd, int wmsg, int wparam, StringBuilder lparam);

private void button3_Click(object sender, EventArgs e)
{
int WM_GETTEXT = 0x000D;
IntPtr hwnd = this.label1.Handle;
const int buffer_size = 1024;
StringBuilder buffer = new StringBuilder(buffer_size);
SendMessage(hwnd, WM_GETTEXT, buffer_size, buffer);
MessageBox.Show(buffer.ToString());
}

a396360609 2008-07-12
  • 打赏
  • 举报
回复
改这个Label 的内容时改了也没显示,但用<窗口类名查看器>查看,
确实是改了,,,不明白为什么没显示我改过的内容,还是它原来的值
myh0305 2008-07-12
  • 打赏
  • 举报
回复
没碰到过这种情况, 绑定

111,125

社区成员

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

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

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