文章收藏-FAQ 位置:电脑学习网

捕捉消息框中的文字

把桌面上弹出的消息框中的文字取出来

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Xml;
using System.Runtime.InteropServices;
namespace WindowsApplication26
...{
    public partial class Form1 : Form
    ...{

        public class HookMsg
        ...{

            Win32 API functions#region Win32 API functions
            private const int WH_CBT = 0x5;
            private const int IDC_OK = 0x1;
            private const int IDC_Text = 0xFFFF;


            [DllImport(“user32.dll“)]
            protected static extern IntPtr SetWindowsHookEx(int code, HookProc func, IntPtr hInstance, int threadID);
            [DllImport(“user32.dll“)]
            protected static extern int UnhookWindowsHookEx(IntPtr hhook);
            [DllImport(“user32.dll“)]
            protected static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);


            [DllImport(“user32.dll“)]
            protected static extern int GetWindowText(IntPtr hwnd, [Out]StringBuilder lpString, int nMaxCount);

            [DllImport(“user32.dll“)]
            protected static extern int GetClassName(IntPtr hwnd, [Out]StringBuilder lpString, int nMaxCount);

            [DllImport(“user32.dll“)]
            protected static extern int SetWindowText(IntPtr hWnd, string lpString);

            [DllImport(“user32.dll“)]
            protected static extern IntPtr GetDlgItem(IntPtr hwnd, int id);
            [DllImport(“User32“)]
            protected static extern int SetDlgItemText(IntPtr hDlg, int nIDDlgItem, string lpString);
            [DllImport(“user32.dll“)]
            protected static extern int GetDlgItemText(IntPtr hDlg, int nIDDlgItem, [Out] StringBuilder lpString, int nMaxCount);

            [DllImport(“user32.dll“, EntryPoint = “MessageBox“)]
            protected static extern int _MessageBox(IntPtr hwnd, string text, string caption,
                int options);

            [DllImport(“user32.dll“)]
            protected static extern IntPtr GetActiveWindow();

            [DllImport(“user32.dll“)]
            protected static extern void DestroyWindow(IntPtr hwnd);

            #endregion

            private static System.IntPtr m_hhook;

            public delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);

            protected static HookProc m_filterFunc;

            static HookMsg()
            ...{
                if (m_filterFunc == null)
                    m_filterFunc = new HookProc(CoreHookProc);
            }

            public static void Install()
            ...{

                m_hhook = SetWindowsHookEx(WH_CBT, m_filterFunc, IntPtr.Zero, AppDomain.GetCurrentThreadId());
            }

            public static void Uninstall()
            ...{
                UnhookWindowsHookEx(m_hhook);
            }

            //CallBack
            protected static int CoreHookProc(int code, IntPtr wParam, IntPtr lParam)
            ...{

                if (code == 5)
                ...{

                    StringBuilder sb = new StringBuilder();
                    sb.Capacity = 255;
                    //Title
                    GetWindowText(wParam, sb, 255);
                    string strTitle = “jinjazz看到了:“ + sb.ToString();

                    //Text
                    GetDlgItemText(wParam, IDC_Text, sb, 255);
                    string strText = “jinjazz看到了:“ + sb.ToString();

                    //获取按钮
                    int style = 0;
                    for (int i = 0; i 〈= 5; i++)
                    ...{
                        if (GetDlgItem(wParam, i) != IntPtr.Zero)
                            style += i;
                    }

                    SetDlgItemText(wParam, IDC_Text, strText);
                    SetWindowText(wParam, strTitle);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.No), “jinjazzOK“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.Cancel), “jinjazzCancel“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.Abort), “jinjazzAbort“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.Ignore), “jinjazzIgnore“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.None), “jinjazzNone“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.OK), “jinjazzOK“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.Retry), “jinjazzRetry“);
                    SetWindowText(GetDlgItem(wParam, (int)DialogResult.Yes), “jinjazzYes“);
                }

                //    return CallNextHookEx(this.m_hhook, code, wParam, lParam);
                return 0;
            }
        }

        public Form1()
        ...{
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        ...{

        }

        private void button1_Click(object sender, EventArgs e)
        ...{
            MessageBox.Show(this,“确定按钮                                    “,“标题“);
        }

        private void button2_Click(object sender, EventArgs e)
        ...{
            MessageBox.Show(this, “确定按钮                                    “, “标题“, MessageBoxButtons.YesNoCancel);
        }

        private void button3_Click(object sender, EventArgs e)
        ...{
            MessageBox.Show(this, “确定按钮                                    “, “标题“, MessageBoxButtons.AbortRetryIgnore);
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        ...{
            if (this.checkBox1.Checked)
            ...{
                HookMsg.Install();
            }
            else
            ...{
                HookMsg.Uninstall();
            }
        }
    }
}

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822