利用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

    }

第二章Shell的结构

“Shell 编程”的大伞之下有大量的API函数和COM接口。这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程。函数和接口并不是两种提供相同功能的等价途径,相反,它们...
  • bruce135lee
  • bruce135lee
  • 2017年12月08日 14:43
  • 56

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

Win32 API消息函数:SendMessage(发送消息) 函数功能: 该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程 序处理完消息再返回。...
  • u011392772
  • u011392772
  • 2016年08月18日 22:35
  • 4296

PHP调用外部程序的方法

在PHP中调用外部命令,可以用如下三种方法来实现:   方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(...
  • whatday
  • whatday
  • 2017年02月05日 13:59
  • 3084

微信开发之发送消息接口

发送消息,是指用户公众号向用户发送相应形式的消息。根据微信开发文档,由以下四种形式:被动回复,群发接口,客服消息接口以及模板消息接口。本文将基于Java语言以及个人微信测试号,说明被动回复、客服消息接...
  • u013248535
  • u013248535
  • 2016年12月23日 16:53
  • 10136

微信api 群发 图文消息

header('Content-type: text/html; charset=utf-8');#设置头信息 require_once('zhphpWeixinApi.class.php'); ...
  • echocdzh
  • echocdzh
  • 2016年01月29日 17:50
  • 1327

在windows下打开关闭外部应用程序的方法。

项目里有几个应用程序,它们之间有先后关系,有时需要在某个程序中,重新启动另外一个应用程序,因此需要找到windows api来实现。 在这里列举三种情况:在程序中,纯粹打开外部应用程序、纯粹关闭外部...
  • daye704
  • daye704
  • 2016年04月12日 12:32
  • 980

阿里旺旺聊天发包CALL发送消息

之所以需要这个CALL是因为之前在淘宝卖一个软件时需要自动发消息功能,自己有时可能不在电脑旁,客人付款后就要把软件激活码及时发送出去。模拟按键又不太准确,所以找到了这个CALL。这段CALL代码是20...
  • hats8888
  • hats8888
  • 2016年10月10日 10:01
  • 626

[转]利用winapi向其它进程发送键盘按键消息

向任意应用程序(包括后台的)发送任意按键消息(包括普通字符键、功能键、Shift/Control/Alt加任意按键的组合键),以实现自动执行特定功能,是一个用途很广、很有实用价值的功能,很多人都受困于...
  • qidizi
  • qidizi
  • 2013年04月09日 21:06
  • 1351

SAP 发送邮件例子(外部)

*......................................................................* *: Report ZSAPTALK        ...
  • Trassion
  • Trassion
  • 2013年05月06日 13:30
  • 2129

MQTT实现消息推送

MQTT实现消息接收(接收消息需实现MqttSimpleCallback接口并实现它的publishArrived方法)必须注册接收消息方法 [java] view plain co...
  • a2274335673
  • a2274335673
  • 2016年09月06日 12:36
  • 2560
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用API函数向外部应用程序发送消息
举报原因:
原因补充:

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