2022年Api用C#调用WindowsAPI和其它进程通信 .pdf
《2022年Api用C#调用WindowsAPI和其它进程通信 .pdf》由会员分享,可在线阅读,更多相关《2022年Api用C#调用WindowsAPI和其它进程通信 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用 C#调用 Windows API 和其它进程通信作者:边城浪子 2005-01-16 关键字:C#,API,FindWindow,FindWindowEx,SendMessage,进程,注册表设计初衷:公司为了便于网络管理,使用了IEEE 802.1X 的网络访问控制,这样每次开机需要输入两次登录密码,于是我就研究了一下用C#来帮我输入第二此登录的密码设计思想:主要是通过调用 Windows API 中的一些方法,主要使用的也就是FindWindow,FindWindowEx和 SendMessage 这三个函数,循环遍历当前的所有窗口,找到目标窗口和进程以后把保存在特定位置的用户名密码以
2、及域信息自动填入输入框中,然后再触发一下button 事件,最后程序本身退出。环境:在 Windows 2000中文版 +sp4,VS.net 2003 中文版下开发在 Windows 2000中文版下测试通过程序截图:具体设计这个 Form的代码就略过不详细说了为了使用 Win32 API,需要先引入下面这个命名空间:using System.Runtime.InteropServices;另外还需要用到进程和注册表,所以还需要引入下面的两个命名空间:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -using System.Threading;using Micros
3、oft.Win32;下面的代码是用来添加对API 的引用:#region Dll Import DllImport(User32.dll,EntryPoint=FindWindow)privatestaticextern IntPtr FindWindow(string lpClassName,string lpWindowName);DllImport(user32.dll,EntryPoint=FindWindowEx)privatestaticextern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string
4、 lpszClass,string lpszWindow);DllImport(User32.dll,EntryPoint=SendMessage)privatestaticexternint SendMessage(IntPtr hWnd,int Msg,IntPtr wParam,string lParam);#endregion主要用到的就是这三个方法,具体的我这里就不详细介绍了,请参考MSDN。需要用到的一些参数:constint WM_GETTEXT=0 x000D;constint WM_SETTEXT=0 x000C;constint WM_CLICK=0 x00F5;从名称上应
5、该就可以了解这些参数具体的含义是什么了,而且这些参数都可以通过 VS附带的工具 Spy+查到。下面是整个程序的核心部分,查找窗体并对它进行操作:#region SearchWindow privateint SearchWindow()int retval=0;/增加一个返回值用来判断操作是否成功 /下面的这些参数都可以用Spy+查到名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -string lpszParentClass=#32770;/整个窗口的类名string lpszParentWindow=本地连接;/窗口标题string lpszClass=Edit;/需
6、要查找的子窗口的类名,也就是输入框string lpszClass_Submit=Button;/需要查找的 Button 的类名string lpszName_Submit=确定;/需要查找的 Button 的标题string text=;IntPtr ParenthWnd=new IntPtr(0);IntPtr EdithWnd=new IntPtr(0);/查到窗体,得到整个窗体 ParenthWnd=FindWindow(lpszParentClass,lpszParentWindow);/判断这个窗体是否有效if (!ParenthWnd.Equals(IntPtr.Zero)/得
7、到 User Name这个子窗体,并设置其内容 EdithWnd=FindWindowEx(ParenthWnd,EdithWnd,lpszClass,);if (!EdithWnd.Equals(IntPtr.Zero)text=this.tbUserName.Text.Trim();/调用 SendMessage 方法设置其内容 SendMessage(EdithWnd,WM_SETTEXT,(IntPtr)0,text);retval+;/得到 Password 这个子窗体,并设置其内容 EdithWnd=FindWindowEx(ParenthWnd,EdithWnd,lpszClas
8、s,);if (!EdithWnd.Equals(IntPtr.Zero)text=this.tbPassword.Text.Trim();SendMessage(EdithWnd,WM_SETTEXT,(IntPtr)0,text);retval+;/得到 Domain这个子窗体,并设置其内容 EdithWnd=FindWindowEx(ParenthWnd,EdithWnd,lpszClass,);if (!EdithWnd.Equals(IntPtr.Zero)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -text=this.tbDomain.Text.Trim
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Api用C#调用WindowsAPI和其它进程通信 2022 Api C# 调用 WindowsAPI 其它 进程 通信
限制150内