• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Welcome to ErranLi's Blog!

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 174946
            • 排名 - 151

            最新評論

            閱讀排行榜

             
            http://www.shnenglu.com/erran/archive/2012/05/19/175360.html

             C#消息處理函數引用 
              /// <summary> 
            /// <para> 版 權 : Copyright (c) 20010-2011 </para>
            /// <para> 項 目 : xxxxx/RD/xxxx </para> 
            /// <para> 文件名稱 : </para>
            /// <para> 創 建 人 : lizhi </para>
            /// <para> 創建日期 : 2010-11-22 </para>
            /// <remarks> 備 注 : 
            ///     ddgooo@sina.com
            /// </remarks>
            /// </summary>
            ///
             
                 public class Win32Message
                {
                    
            /// <summary>
                    
            /// 消息
                    
            /// </summary>
                    public const int WM_COPYDATA = 0x004A;

                    
            /// <summary>
                    
            /// WM_COPYDATA消息結構體
                    
            /// </summary>
                    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
                    
            public struct COPYDATASTRUCT
                    {
                        
            /// <summary>
                        
            /// 用戶定義數據
                        
            /// </summary>
                        public IntPtr   dwData;
                        
            /// <summary>
                        
            /// 數據大小
                        
            /// </summary>
                        public int      cbData;
                        
            /// <summary>
                        
            /// 指向數據的指針
                        
            /// </summary>            
                        public IntPtr lpData;
                    }

                    
            /// <summary>
                    
            /// 注冊消息用
                    
            /// 在win7中,如果以管理員方式運行,需要加入該語句,注冊WM_COPYDATA消息,避免過濾掉該消息。
                    
            /// </summary>
                    
            /// <param name="msg"></param>
                    
            /// <param name="flags"></param>
                    
            /// <returns></returns>
                    [DllImport("user32")]
                    
            public static extern bool ChangeWindowMessageFilter(int msg, int flags);
                    

                    
            /// <summary>
                    
            /// 發送WM_COPYDATA消息
                    
            /// </summary>
                    
            /// <param name="hWnd"></param>
                    
            /// <param name="msg"></param>
                    
            /// <param name="wParam"></param>
                    
            /// <param name="lParam"></param>
                    
            /// <returns></returns>
                    [DllImport("User32.dll", EntryPoint = "SendMessage")]
                    
            public static extern int SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam);
                    
            /// <summary>
                    
            /// 發送WM_COPYDATA消息
                    
            /// </summary>
                    
            /// <param name="hWnd"></param>
                    
            /// <param name="msg"></param>
                    
            /// <param name="wParam"></param>
                    
            /// <param name="lParam"></param>
                    
            /// <returns></returns>
                    [DllImport("user32")]
                    
            public static extern bool PostMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam); 
                                    
                    
            /// <summary>
                    
            /// 查找句柄
                    
            /// </summary>
                    
            /// <param name="lpClassName"></param>
                    
            /// <param name="lpWindowName"></param>
                    
            /// <returns></returns>
                    [DllImport("User32.dll", EntryPoint = "FindWindow")]
                    
            public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

                    
            /// <summary>
                    
            /// 查找句柄
                    
            /// </summary>
                    
            /// <param name="hwndParent"></param>
                    
            /// <param name="hwndChildAfter"></param>
                    
            /// <param name="lpszClass"></param>
                    
            /// <param name="lpszWindow"></param>
                    
            /// <returns></returns>
                    [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
                    
            public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

                }
            C# 消息解析函數

            /// <summary> 
            /// <para> 版 權 : Copyright (c) 20010-2011 </para>
            /// <para> 項 目 : xxxxx/RD/xxxx </para> 
            /// <para> 文件名稱 : </para>
            /// <para> 創 建 人 : lizhi </para>
            /// <para> 創建日期 : 2010-11-22 </para>
            /// <remarks> 備 注 : 
            ///     ddgooo@sina.com
            /// </remarks>
            /// </summary>
            ///
             
                /// <summary>
                
            /// 腳本測試類
                
            /// </summary> 
                public class TestingMessage
                {   
                    
            /// <summary>
                    
            /// 消息 開始
                    
            /// </summary>
                    public const int WM_USER_START = 0x04DD;
                    
            /// <summary>
                    
            /// 消息 繼續
                    
            /// </summary>
                    public const int WM_USER_CONTINUE = 0x05F8;
                    
            /// <summary>
                    
            /// 消息 停止
                    
            /// </summary>
                    public const int WM_USER_ABORT = 0x06F9;

                    
            /// <summary>
                    
            /// 最后的消息數據
                    
            /// </summary>
                    public string testingScript = null;

                    
            /// <summary>
                    
            /// 初始化
                    
            /// </summary>
                    public bool tetsingEnable = false;

                    
            /// <summary>
                    
            /// 初始化
                    
            /// </summary>
                    
            /// <returns></returns>
                    public bool Initiate()
                    {    
                        Win32Message.ChangeWindowMessageFilter(Win32Message.WM_COPYDATA, 
            1);

                        tetsingEnable 
            = true;

                        
            return true;
                    }

                    
            /// <summary>
                    
            /// 解析消息
                    
            /// </summary>
                    
            /// <param name="msg"></param>
                    
            /// <returns></returns>
                    public bool DoMessage(ref System.Windows.Forms.Message msg)
                    {
                        
            bool tested = false;

                        
            switch (msg.Msg)
                        {
                            
            case Win32Message.WM_COPYDATA :
                                DoMsgCopyData(
            ref msg);
                                tested 
            = true;
                                
            break;

                            
            case WM_USER_START :
                                DoMsgStart(
            ref msg);
                                tested 
            = true;
                                
            break;

                            
            case WM_USER_CONTINUE :
                                DoMsgContinue(
            ref msg);
                                tested 
            = true;
                                
            break;

                            
            case WM_USER_ABORT :
                                DoMsgAbort(
            ref msg);
                                tested 
            = true;
                                
            break;

                            
            default :
                                
            break;
                        }

                        
            return tested;
                    }
                    
                    
            /// <summary>
                    
            /// 處理拷貝數據
                    
            /// </summary>
                    
            /// <param name="msg"></param>
                    
            /// <returns></returns>
                    public bool DoMsgCopyData(ref System.Windows.Forms.Message msg)
                    {
                        
            bool tested = false;

                        
            if (tetsingEnable)
                        {
                            
            try
                            {
                                Win32Message.COPYDATASTRUCT mystr 
            = new Win32Message.COPYDATASTRUCT();
                                Type mytype 
            = mystr.GetType();
                                mystr 
            = (Win32Message.COPYDATASTRUCT)msg.GetLParam(mytype);
                                Byte[] scriptbytes 
            = new Byte[mystr.cbData];
                                Marshal.Copy(mystr.lpData, scriptbytes, 
            0, mystr.cbData);
                                System.Text.Encoding utf8 
            = System.Text.Encoding.UTF8;
                                testingScript 
            = utf8.GetString(scriptbytes);

                                System.Windows.Forms.MessageBox.Show(testingScript);

                                tested 
            = true;
                            }
                            
            catch
                            {
                                tested 
            = false;
                            }
                        }

                        
            return tested;
                    }


                    
            /// <summary>
                    
            /// 開始
                    
            /// </summary>
                    
            /// <param name="msg"></param>
                    
            /// <returns></returns>
                    public bool DoMsgStart(ref System.Windows.Forms.Message msg)
                    {
                        
            bool tested = false;

                        
            if (tetsingEnable)
                        {
                            
            try
                            {
                                
            if (testingScript != null)
                                {
                                    tested 
            = XXXX.Parser.TestingParser.Instance.TestRunning(testingScript);

                                    System.Windows.Forms.MessageBox.Show(
            "SERVER DoMsgStart");
                                }
                            }
                            
            catch
                            {
                                tested 
            = false;
                            }
                        }

                        
            return tested;
                    }

                    
                    
            /// <summary>
                    
            /// 繼續
                    
            /// </summary>
                    
            /// <param name="msg"></param>
                    
            /// <returns></returns>
                    public bool DoMsgContinue(ref System.Windows.Forms.Message msg)
                    {
                        
            bool tested = false;

                        
            if (tetsingEnable)
                        {
                            
            try
                            {
                                
            if (testingScript != null)
                                {
                                    tested 
            =  XXXX .Parser.TestingParser.Instance.TestContinue();

                                    System.Windows.Forms.MessageBox.Show(
            "SERVER DoMsgContinue");
                                }
                            }
                            
            catch
                            {
                                tested 
            = false;
                            }
                        }

                        
            return tested;
                    }


                    
            /// <summary>
                    
            /// 繼續
                    
            /// </summary>
                    
            /// <param name="msg"></param>
                    
            /// <returns></returns>
                    public bool DoMsgAbort(ref System.Windows.Forms.Message msg)
                    {
                        
            bool tested = false;

                        
            if (tetsingEnable)
                        {
                            
            try
                            {
                                
            if (testingScript != null)
                                {
                                    tested 
            =  XXXX .Parser.TestingParser.Instance.TestAbort();
                                    testingScript 
            = null;

                                    System.Windows.Forms.MessageBox.Show(
            "SERVER DoMsgAbort");
                                }
                            }
                            
            catch
                            {
                                tested 
            = false;
                            }
                        }

                        
            return tested;
                    }

                }
            C# 窗體
            /// <summary> 
            /// <para> 版 權 : Copyright (c) 20010-2011 </para>
            /// <para> 項 目 : xxxxx/RD/xxxx </para> 
            /// <para> 文件名稱 : </para>
            /// <para> 創 建 人 : lizhi </para>
            /// <para> 創建日期 : 2010-11-22 </para>
            /// <remarks> 備 注 : 
            ///     ddgooo@sina.com
            /// </remarks>
            /// </summary>
            ///
             
               public partial class FormMain : Form
                {

                    
            /// <summary>
                    
            /// 消息解析
                    
            /// </summary>
                    private TestingMessage testingMessage = null;

                    
            /// <summary>
                    
            /// 構造
                    
            /// </summary>
                    public FormMain()
                    {
                        testingMessage 
            = new TestingMessage();

                        InitializeComponent();
                    }

                    
            /// <summary>
                    
            /// 加載
                    
            /// </summary>
                    
            /// <param name="sender"></param>
                    
            /// <param name="e"></param>
                    private void FormMain_Load(object sender, EventArgs e)
                    {
                        testingMessage.Initiate();
                    }

                    
            /// <summary>
                    
            /// 關閉
                    
            /// </summary>
                    
            /// <param name="sender"></param>
                    
            /// <param name="e"></param>
                    private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
                    {
                        System.Windows.Forms.Message msg 
            = new Message();
                        testingMessage.DoMsgAbort(
            ref msg);
                        testingMessage 
            = null;
                    }

                    
            /// <summary>
                    
            /// 消息處理函數
                    
            /// </summary>
                    
            /// <param name="m"></param>
                    protected override void DefWndProc(ref System.Windows.Forms.Message msg)
                    {
                        
            if (!testingMessage.DoMessage(ref msg))
                        {
                            
            base.DefWndProc(ref msg);
                        }
                    }

                }

            MFC DLL 消息發送端

            CTestingMessage::CTestingMessage(
            void)
            {
                initializeSuccessed 
            = false;

                processAppHandle 
            = NULL;

                processAppName 
            = _T("\\\\XXXX\\XXXX.XXXXX.XXXX.exe");
                processWindowName 
            = _T("XXXXXXXX");    
            }

            CTestingMessage::
            ~CTestingMessage(void)
            {
            }


            CTestingMessage
            * CTestingMessage::Instance()
            {
                
            static CTestingMessage* ins = NULL;
                
            if (ins == NULL)
                {
                    ins 
            = new CTestingMessage();
                }
                
            return ins;
            }

            bool CTestingMessage::InitTesting(void)
            {
                
            bool bFlag = false;

                processMutex.Lock();

                
            try
                {
                    ::ChangeWindowMessageFilter(WM_COPYDATA, 
            1);
                    
            /*
                    TCHAR exepath[MAX_PATH];
                    memset(exepath, 0, MAX_PATH);
                    GetModuleFileName(NULL, exepath, MAX_PATH);    

                    CString strdir = exepath;
                    strdir = strdir.Left(strdir.ReverseFind('\\'));
                    
                    CString szAppName = strdir;
                    szAppName += processAppName;

                    MessageBox(NULL, szAppName, _T(""), 0);

                    PROCESS_INFORMATION pi;    
                                
                    bFlag = ::CreateProcess(szAppName, 
                        NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, NULL, &pi);

                    if (bFlag)
                    {
                        processAppHandle = pi.hProcess;
                    } 
            */
                    bFlag 
            = true;
                }
                
            catch(CException* e)
                {
                    bFlag 
            = false;    
                    processAppHandle 
            = NULL;
                }
                
                initializeSuccessed 
            = bFlag;

                processMutex.Unlock();

                
            return bFlag;
            }


            bool CTestingMessage::ExitTesting(void)
            {
                
            bool bFlag = false;

                processMutex.Lock();

                initializeSuccessed 
            = false;

                
            if (processAppHandle != NULL)
                {
                    ::TerminateProcess(processAppHandle, 
            0);
                     CloseHandle(processAppHandle);
                    processAppHandle 
            = NULL;        
                }

                bFlag 
            = true;    

                processMutex.Unlock();

                
            return bFlag;
            }


            bool CTestingMessage::StartTesting(LPCSTR pScript)
            {
                
            bool bFlag = false;

                processMutex.Lock();    

                
            if (initializeSuccessed)
                {
                    HWND hWnd 
            = ::FindWindow(NULL, processWindowName);
                    
            if (hWnd != NULL)
                    {
                        
            // 發送數據
                        COPYDATASTRUCT cd;
                        cd.cbData 
            = strlen(pScript);
                        cd.dwData 
            = WM_COPYDATA;
                        cd.lpData 
            = (void*)pScript;
                        ::SendMessage(hWnd, WM_COPYDATA, 
            0, (LPARAM)(&cd));

                        
            // 發送命令
                        ::SendMessage(hWnd, WM_USER_START, 00);
                        
                        bFlag 
            = true;
                    }
                }

                processMutex.Unlock();

                
            return bFlag;
            }

            bool CTestingMessage::AbortTesting()
            {
                
            bool bFlag = false;

                processMutex.Lock();
                
                
            if (initializeSuccessed)
                {
                    HWND hWnd 
            = ::FindWindow(NULL, processWindowName);
                    
            if (hWnd != NULL)
                    {            
                        ::SendMessage(hWnd, WM_USER_ABORT, 
            00);
                        
                        bFlag 
            = true;
                    }
                }

                processMutex.Unlock();

                
            return bFlag;    
            }

            void CTestingMessage::ContinueTesting()
            {
                
            bool bFlag = false;

                processMutex.Lock();

                
            if (initializeSuccessed)
                {
                    HWND hWnd 
            = ::FindWindow(NULL, processWindowName);
                    
            if (hWnd != NULL)
                    {            
                        ::SendMessage(hWnd, WM_USER_CONTINUE, 
            00);
                        
                        bFlag 
            = true;
                    }
                }

                processMutex.Unlock();
            }


            posted on 2012-05-19 09:27 erran 閱讀(881) 評論(0)  編輯 收藏 引用 所屬分類: dotNet
            四虎影视久久久免费| 久久国产乱子精品免费女| 亚洲国产精品一区二区久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产成人无码精品久久久久免费 | 久久99久久99小草精品免视看| 色婷婷综合久久久中文字幕| 久久无码国产| 国产一区二区三精品久久久无广告 | 伊人久久精品无码av一区| 日韩人妻无码一区二区三区久久99| 天天综合久久一二三区| 老男人久久青草av高清| 亚洲国产精品无码久久一区二区 | AV无码久久久久不卡蜜桃| 久久精品国产亚洲AV麻豆网站| .精品久久久麻豆国产精品| 久久99精品国产麻豆| 热久久这里只有精品| 麻豆久久| 久久亚洲精品国产精品| 国产精品18久久久久久vr| 久久99亚洲综合精品首页| 色欲综合久久躁天天躁| 午夜精品久久久久久中宇| 久久中文娱乐网| 亚洲精品美女久久久久99小说| 久久精品一本到99热免费| 久久99热狠狠色精品一区| 久久人人超碰精品CAOPOREN| 久久人与动人物a级毛片| 精品一区二区久久久久久久网站| 久久精品二区| 久久精品无码专区免费青青| 久久99精品久久久久久9蜜桃| 狠狠色丁香久久婷婷综合_中| 精品久久久噜噜噜久久久| 久久精品免费大片国产大片| 久久午夜无码鲁丝片| 久久综合精品国产一区二区三区 | MM131亚洲国产美女久久|