我想从没有涉及到我的程序窗口,以“读”的信息。 如果我有一个进程ID和一个窗口句柄:
Process Proc = Process.GetProcessById(ProcID);
IntPtr hdl = Proc.MainWindowHandle;
而我从谍照信息++告诉我,控制ID我感兴趣的是00000003EA元素的,我怎么能与C#访问它?
谢谢你的帮助!
编辑_____________________________________
如果有人有兴趣,我这是怎么得到它的工作:
Process p = Process.GetProcessById(ProcID);
IntPtr hdl = p.MainWindowHandle;
byte[] buffer = new byte[1024]; //Assume that 1024 bytes are enough! Better would be to get the text length..
UTF8Encoding enc = new UTF8Encoding();
uint Test = GetDlgItemText((int)hdl, Convert.ToInt32("0x000003EA", 16), buffer, 1024);
string TextFromOtherWindow = enc.GetString(buffer);
[DllImport("user32.dll")]
public static extern uint GetDlgItemText(
int hDlg, //A handle to the dialog box that contains the control.
int nIDDlgItem, //The identifier of the control whose title or text is to be retrieved.
byte[] lpString, //The buffer to receive the title or text.
int nMaxCount //The maximum length, in characters, of the string to be copied to the
//buffer pointed to by lpString. If the length of the string, including
//the null character, exceeds the limit, the string is truncated.
);
byte[] buffer
是其中来自其他窗口中的文本被写回到缓冲器。 我以为,文字不超过1024字节长,但它会更好地得到实际尺寸...
至于编码推移,所不同的可能是更适合您的需求。
需要在十六进制的句柄被转换为一个整数: Convert.ToInt32("0x000003EA", 16)
GetDlgItemText是最适合的(我觉得)我得到的静态文本,而不是“SendMessage函数 ”和“WM_GETTEXT”的要求。
感谢所有谁帮我指出正确的方向!
来源GetDlgItemText: MSDN
编辑_________________________________
嗯。 我说话太快...元素ID是每个程序启动时间而改变。 我在打开一个新的问题持续元素标识 。