C#获取当前窗体句柄及该窗体里的信息

用C#获取当前屏幕上主窗体(就是当前操作的窗口,不知道是不是叫主窗体)句柄,通过句柄获取窗体对象,再遍历窗体对象中的控件,返回文本框中的值,并保存到记事本中。还有就是,我... 用C#获取当前屏幕上主窗体(就是当前操作的窗口,不知道是不是叫主窗体)句柄,通过句柄获取窗体对象,再遍历窗体对象中的控件,返回文本框中的值,并保存到记事本中。还有就是,我要做这个应该是建立windows窗体应用程序还是 控制台应用程序? 新手初学 望见谅。谢谢
不是当前屏幕的主窗口 是某一窗口,就是QQ的个人资料那个窗口。
展开
 我来答
四舍五不入6
高粉答主

2019-10-29 · 醉心答题,欢迎关注
知道答主
回答量:147
采纳率:100%
帮助的人:2.1万
展开全部

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的程序设计。

参考资料来源:百度百科-句柄

未能完成
2011-07-17
知道答主
回答量:27
采纳率:0%
帮助的人:15.7万
展开全部
这个是建立windows窗体应用程序哈,这个可以新建一个form(就是窗体)然后点击主窗体的特定地方出现这个窗体,这里注意的是你要像QQ一样的话,这里就需要两个窗体都要同时显示出来。
追问
我的意思其实是通过代码去获取QQ个人资料的那个窗口句柄  然后通过句柄获取窗体对象,再遍历窗体对象中的控件,返回文本框中的值,并保存到记事本中。     要不你有没有其他的什么办法可以获取到QQ个人资料的那个窗口里的文字信息  并取出来保存到记事本中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yujian1125
推荐于2017-11-24 · TA获得超过884个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:245万
展开全部
你是想进程注入是吧?这个跟外 G程序很像啊。。还需要用到几个工具呢 ,这个得借助一些内存调试工具才能搞定。至于句柄你可以用VS里自带的工具Spy++去获取,很方便简单,你要是想在内存里动态获取窗体句柄并且读出信息的话也可以调研windows API去实现这个功能,但是可不是你想的那么简单的,要获取窗体句柄,然后获取窗体上控件(就是你想得到的文字信息的承载控件)的句柄,然后读出信息,读出的信息不知道是否加密,如果加密了还要解密(要是加密了我看你还是放弃吧,因为有破解加密算法的能力的话随便破解个腾讯的加密算法就能卖个几十万到几百万的)
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的方法你要是不会的话可以追问下,我这有现成的可以给你找找
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式