利用API函数向外部应用程序发送消息

转载 2007年10月08日 09:00:00

//为了使用Win32 API,需要先引入下面这个命名空间
using System.Runtime.InteropServices;

namespace k8
{
    public partial class _3k8Frm : Form
    {
        #region Dll Import 添加对API的引用

            //获取主窗口句柄的API函数
            [DllImport("User32.dll", EntryPoint = "FindWindow")]
            private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
           
            //获取子窗口句柄的API函数
            [DllImport("User32.dll", EntryPoint = "FindWindowEx")]
            private static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);

            //向指定句柄的窗口发送消息
            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(IntPtr hWnd,int Msg,IntPtr wParam,string lParam);

            const int WM_GETTEXT = 0x000D;
            const int WM_SETTEXT = 0x000C;
            const int WM_CLICK = 0x00F5;

        #endregion

        #region 声明字段 用Spy++查到的
            //下面的这些参数都可以用Spy++查到
            string lpszParentClass = "TForm1"; //整个窗口的类名
            string lpszParentWindow = "Form1"; //窗口标题
            string lpszClass = "TEdit"; //需要查找的子窗口的类名,也就是输入框
            string lpszClass_Submit = "TBitBtn"; //需要查找的Button的类名
            string lpszName_Submit = "确定"; //需要查找的Button的标题
            string text = "";

            string lpszClass1 = "TPanel";//多了一个类,输入框和按钮都放在这个类上的!

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

            //下面的参数设定登陆用户名及密码
            string UserID_3k8 = "4898";
            string Pwd_3k8="2";

        #endregion

        #region 构造函数
       
        public _3k8Frm()
        {
            InitializeComponent();
        }
        #endregion
        
        #region SearchWindow 核心部分,查找窗体并对它进行登陆操作

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

            //查到窗体,得到整个窗体
            ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
            ParenthWnd_sub = FindWindowEx(ParenthWnd, EdithWnd, lpszClass1, "");


             //判断这个窗体是否有效
            if (!ParenthWnd_sub.Equals(IntPtr.Zero))
            {
                //得到User Name这个子窗体,并设置其内容
                EdithWnd = FindWindowEx(ParenthWnd_sub, EdithWnd, lpszClass, "");
                if (!EdithWnd.Equals(IntPtr.Zero))
                {
                    text = Pwd_3k8.Trim(); //this.tbUserName.Text.Trim();
                    //调用SendMessage方法设置其内容
                    SendMessage(EdithWnd, WM_SETTEXT, (IntPtr)0, text);
                    retval++;
                }

                //得到Password这个子窗体,并设置其内容
                EdithWnd = FindWindowEx(ParenthWnd_sub, EdithWnd, lpszClass, "");
                if (!EdithWnd.Equals(IntPtr.Zero))
                {
                    text = UserID_3k8; //this.tbPassword.Text.Trim();
                    SendMessage(EdithWnd, WM_SETTEXT, (IntPtr)0, text);
                    retval++;
                }

                 //得到Button这个子窗体,并触发它的Click事件
                EdithWnd = (IntPtr)0;
                EdithWnd = FindWindowEx(ParenthWnd_sub, EdithWnd, lpszClass_Submit, lpszName_Submit);
                if (!EdithWnd.Equals(IntPtr.Zero))
                {
                    SendMessage(EdithWnd, WM_CLICK, (IntPtr)0, "0");
                    retval++;
                }

                return retval;
        }

        #endregion

    }

相关文章推荐

驱动向应用程序发送消息

驱动向应用程序发送消息 这里介绍一下常见的两种办法。   1、驱动程序调用API SendNotifyMessage,发送特定的消息给应用程序,这就要求应用程序要有消息循环机制并且要事先做好消...

iPhone消息推送机制(Push)实现及通过.net应用程序发送消息给ios应用程序

转自 :http://www.cocoachina.com/bbs/read.php?tid=82245 1 请把"\"sendmsg('pw_ajax.php',...
  • ssihc0
  • ssihc0
  • 2012年02月07日 19:45
  • 815

Win32 API消息函数:SendMessage(发送消息)

Win32 API消息函数:SendMessage(发送消息) 函数功能: 该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程 序处理完消息再返回。...

MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序

MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() ...

VC2008中如何为MFC应用程序添加和删除消息响应函数

最近重温《MFC Windows应用程序设计》第二版这本书,里面的代码全部是使用VC6.0写的,我Win7下安装的是VS2008开发环境。在学习到为单文档框架的CView子类添加消息响应函数时犯难了,...

MFC应用程序中处理消息,创建窗口的过程,关闭窗口(非模态窗口),打开模式对话框等的函数调用顺序 .

MFC应用程序中处理消息的顺序 ·   MFC应用程序创建窗口的过程 ·   MFC应用程序关闭窗口的顺序(非模态窗口) ·   MFC应用程序中打开模式对话框的函数调用顺序 ·   MFC应...

通过挂钩API函数给加了保护的应用程序内嵌补丁

http://www.pediy.com/kssd/pediy08/pediy8-793.htm 通过挂钩API函数 给加了保护的应用程序内嵌补丁 原著:SUB Z3R0 主题:Spirit ...

飞信发送消息程序整个安装包

  • 2013年12月31日 16:59
  • 4.95MB
  • 下载

模拟QQ聊天程序发送消息

  • 2015年11月11日 19:25
  • 128KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用API函数向外部应用程序发送消息
举报原因:
原因补充:

(最多只允许输入30个字)