C#获取当前窗体句柄及该窗体里的信息
不是当前屏幕的主窗口 是某一窗口,就是QQ的个人资料那个窗口。 展开
C#获取当前窗体句柄及该窗体里的信息可以参考以下的代码:
FindWindow(
lpClassName, {窗口的类名}
lpWindowName: PChar {窗口的标题}
): HWND; {返回窗口的句柄; 失败返回 0}
//FindWindowEx 比 FindWindow 多出两个句柄参数:
FindWindowEx(
Parent: HWND; {要查找子窗口的父窗口句柄}
Child: HWND; {子窗口句柄}
ClassName: PChar; {}
WindowName: PChar {}
): HWND;
扩展资料:
句柄语句
HINSTANCE hInstance;
可以改成:
HANDLE hInstance;
上面的2条语句都是对的,表达的是一个意义.
一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。
另外,WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序,应用程序一旦获得了一个确定项的句柄,便可在WINDOWS环境下的任何地方对这个句柄进行操作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。
参考资料来源:百度百科-句柄
我的意思其实是通过代码去获取QQ个人资料的那个窗口句柄 然后通过句柄获取窗体对象,再遍历窗体对象中的控件,返回文本框中的值,并保存到记事本中。 要不你有没有其他的什么办法可以获取到QQ个人资料的那个窗口里的文字信息 并取出来保存到记事本中。
PS:用API获取窗体句柄的函数是
FindWindow或者FindWindowEx
首先还是谢谢你这么耐心的给我讲解!那获取窗体上控件和控件内容 要怎么实现呢? 现在我能够获取窗体的句柄。接下来该怎么做才能获取窗体上控件和控件内容?
每一个控件在窗体上都被认为是一个子窗体
获取到窗体句柄之后
IntPtr hwnd = FindWindow(null, "你需要获取的窗体的标题,例如:Form1");
IntPtr ButtonHwnd= FindWindowEx(hwnd, IntPtr.Zero, "控件的名字", null);
这样就能得到控件的句柄
SendMessage(ButtonHwnd, WM_SETTEXT, IntPtr.Zero, name);
这样就能更改控件的内容了
如果是button控件
可以这样
SendMessage(ButtonHwnd, WM_LBUTTONDOWN, IntPtr.Zero, null);
SendMessage(ButtonHwnd, WM_LBUTTONUP, IntPtr.Zero, null);
这样就是点击一次按钮
根据不同的控件你可以发送不同的控件消息来控制
读取内容的话用
GetWindowText(ButtonHwnd, szClassName, null);//里面的参数具体形式忘记了,你可以查看下Msdn,非常抱歉我比较忙没有帮你整理出现成的代码。
但是有些控件貌似没有句柄,那样的话就不能读了。就得用内存注入的形式获取存放控件内容的内存地址,然后从内存地址上直接readprocessmemory这个API来读取了(这个就是外挂里读取一些人物信息的方法,例如读出血值,魔法值都是用这个方法)
C#调用windows API的方法你要是不会的话可以追问下,我这有现成的可以给你找找