传神自动登陆研究

来源:互联网 发布:java基础入门pdf下载 编辑:程序博客网 时间:2024/04/27 23:09

如果大家玩过传奇,那么肯定知道外挂巴,尤其是脱机外挂比较好使。

近日,本人研究了利用传神私服代理,风雪验证器和热血传神脱机外挂得使用,如果用户需要挂机得话,必须自己一步一步来,很是麻烦。

因此,我编写了这个自动登陆的外挂。

主要用倒的是FindwindowEx和SendMessage,很简单的。

说一下功能:

1。自动运行,自动登陆

2。自动添加私服

3。自动执行脚本,解决小退招宝宝问题

4。解决异常窗口弹出

目前对云龙传奇有效。

不说了,贴代码。

/////////////////////////////////////////////////////////////.h////////////////////////////////////////////////////

class CMirDlg : public CDialog
{
// Construction
public:
 CMirDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
 //{{AFX_DATA(CMirDlg)
 enum { IDD = IDD_MIR_DIALOG };
 CString m_PSW;
 CString m_User;
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CMirDlg)
 public:
 virtual BOOL DestroyWindow();
 virtual BOOL PreTranslateMessage(MSG* pMsg);
 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 HICON m_hIcon;

 // Generated message map functions
 //{{AFX_MSG(CMirDlg)
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 afx_msg void OnButtonBegin();
 afx_msg void OnTimer(UINT nIDEvent); 
 afx_msg void OnButtonSet();
 afx_msg void OnButton1();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()

private:
 BOOL CheckAllProgram();
 void RegisterProgram();
 void ActionScript();
 BOOL SearchStr(LPCSTR lpBuf,int count,LPCSTR lpstr);
 BOOL GetScriptState();
 void ReadInfoFromRegister();
 void WriteInfoToRegister();
 BOOL FindHotPanel();
 BOOL IsLoginOK();
 BOOL FindRichEdit();
 BOOL FindHotCSpnLogin();
 BOOL FindHotCSDlg();
 BOOL Find51pywgButton();
 BOOL Find51pywgDlg();
 BOOL FindWgButton();
 BOOL FindWgComBox();
 BOOL FindWgDlg();
 BOOL CreateWgDlg(LPCSTR lpAppPath,PROCESS_INFORMATION *pi);
 HWND hWgDlg;    //˽·þ¾ä±ú
 HWND hWgComBox;    //˽·þÏÂÀ­Áбí
 HWND hWgButton;    //˽·þ¿ªÊ¼°´Å¥ 
 HWND h51pywg;    //51pywg¾ä±ú
 HWND h51pywgButton;   //51pywg°´Å¥¾ä±ú
 HWND hHotWnd;    //ÈÈѪ¾ä±ú
 HWND hHotLoadButton;  //ÈÈѪµÇ½¾ä±ú
 HWND hHotEdit;    //ÈÈѪ±à¼­¾ä±ú
 HWND hHotUserEdit;
 HWND hHotPSWEdit;
 HWND hHotPanel;
 PROCESS_INFORMATION  mypi[3];
 int nState;
 int iReLoadTimeOut;
 DWORD ulTimeOut;
 char apppath[256];
 BOOL bLoadState;
 CString strwgPath;
 CString str51PywgPath;
 CString strHotcsPath;
 CString strwgName;
 UINT uPort;
 BOOL bAutoRun;
 BOOL bAutoLoad;
 BOOL bAutoSave;
 BYTE byteIPAddress[4];
 int  iWinState;
 
};

 

*********************cpp*********************************

// mirDlg.cpp : implementation file
//

#include "stdafx.h"
#include "mir.h"
#include "mirDlg.h"
#include "DialogSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
static BOOL CALLBACK enumProc(HWND hwnd, LPARAM lParam);
char szSection[]="ÍÑ»úÍâ¹ÒÖ®×Ô¶¯°æ";

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();

// Dialog Data
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
  // No message handlers
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMirDlg dialog

CMirDlg::CMirDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CMirDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CMirDlg)
 m_PSW = _T("");
 m_User = _T("");
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMirDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CMirDlg)
 DDX_Text(pDX, IDC_EDIT_PSW, m_PSW);
 DDV_MaxChars(pDX, m_PSW, 20);
 DDX_Text(pDX, IDC_EDIT_USER, m_User);
 DDV_MaxChars(pDX, m_User, 20);
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMirDlg, CDialog)
 //{{AFX_MSG_MAP(CMirDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_BUTTON_BEGIN, OnButtonBegin)
 ON_WM_TIMER() 
 ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)
 ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMirDlg message handlers

BOOL CMirDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add "About..." menu item to system menu.

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon
 
 // TODO: Add extra initialization here 
 int i,len;
 
 if(!RegisterHotKey(m_hWnd,0xA002,MOD_CONTROL|MOD_ALT,VK_F7))
 {
    //DWORD error=GetLastError();
    return FALSE;
 }
 iWinState=0;
 GetModuleFileName(AfxGetInstanceHandle(),apppath,256);
 len=strlen(apppath);
 i=1;
 while(len>0)
 {
  if(apppath[len-i]=='//')
  {
   apppath[len-i]='/0';
   break;
  }
  i++;
 }
 ulTimeOut=0;
 nState=0;
 hWgDlg=NULL;    //˽·þ¾ä±ú
 hWgComBox=NULL;    //˽·þÏÂÀ­Áбí
 hWgButton=NULL;    //˽·þ¿ªÊ¼°´Å¥ 
 h51pywg=NULL;    //51pywg¾ä±ú
 h51pywgButton=NULL;   //51pywg°´Å¥¾ä±ú
 hHotWnd=NULL;    //ÈÈѪ¾ä±ú
 hHotLoadButton=NULL;  //ÈÈѪµÇ½¾ä±ú
 hHotEdit=NULL;    //ÈÈѪ±à¼­¾ä±ú
 hHotUserEdit=NULL;
 hHotPSWEdit=NULL;
 hHotPanel=NULL;
 SetTimer(1,1000,NULL);
 iReLoadTimeOut=0;
 bLoadState=0;
 ReadInfoFromRegister();
 if(!bAutoSave)
 {
  m_User="";
  m_PSW="";
  bAutoLoad=FALSE;
  WriteInfoToRegister();
 }
 else
 {
  if(bAutoLoad)
  {
   UpdateData(FALSE);
   OnButtonBegin();
  }
 }
 
 RegisterProgram();
 UpdateData(FALSE);
 return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMirDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMirDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;

  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMirDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}

void CMirDlg::OnButtonBegin()
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE); 
 bLoadState=!bLoadState;
 if(bLoadState)
 {
  GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("×¢Ïú");
  GetDlgItem(IDC_EDIT_USER)->EnableWindow(FALSE);
  GetDlgItem(IDC_EDIT_PSW)->EnableWindow(FALSE);
  GetDlgItem(IDC_BUTTON_SET)->EnableWindow(FALSE);
 }
 else
 {
  GetDlgItem(IDC_BUTTON_BEGIN)->SetWindowText("µÇ½");
  GetDlgItem(IDC_EDIT_USER)->EnableWindow(TRUE);
  GetDlgItem(IDC_EDIT_PSW)->EnableWindow(TRUE);
  GetDlgItem(IDC_BUTTON_SET)->EnableWindow(TRUE);
 }

 if(bLoadState) nState=1;
 else
 {
  ::SendMessage(hHotWnd,WM_CLOSE,0,0);
  //::SendMessage(h51pywg,WM_QUIT,0,0);
  //::SendMessage(h51pywg,WM_CLOSE,0,0);
  ::SendMessage(hWgDlg,WM_CLOSE,0,0);
  ::TerminateProcess(mypi[1].hProcess,0);
 }
// WriteInfoToRegister();
}

BOOL CMirDlg::CreateWgDlg(LPCSTR lpAppPath,PROCESS_INFORMATION *pi)
{
 CString str;
 STARTUPINFO startInfo; 

 startInfo.cb          = sizeof(STARTUPINFO);
    startInfo.lpReserved  = NULL;
    startInfo.lpTitle     = "";
    startInfo.lpDesktop   = NULL;
    startInfo.dwX         = 0;
    startInfo.dwY         = 0;
    startInfo.dwXSize     = 0;
    startInfo.dwYSize     = 0;
    startInfo.dwXCountChars    = 0;
    startInfo.dwYCountChars    = 0;
    startInfo.dwFlags     = STARTF_USESTDHANDLES;
    startInfo.wShowWindow = 0; //SW_SHOWDEFAULT;
    startInfo.lpReserved2 = NULL;
    startInfo.cbReserved2 = 0;
    startInfo.hStdInput   = GetStdHandle(STD_INPUT_HANDLE);
    startInfo.hStdOutput  = GetStdHandle(STD_OUTPUT_HANDLE);
    startInfo.hStdError   = GetStdHandle(STD_ERROR_HANDLE);
 
 if(CreateProcess(lpAppPath,NULL,NULL,NULL,0,0,NULL,NULL,&startInfo,pi))
 {
  return TRUE;  
 }
 return FALSE;
}

BOOL CMirDlg::FindWgDlg()

 hWgDlg=NULL;
 hWgDlg=FindWindowEx(NULL,hWgDlg,"ThunderRT6FormDC","£¨·½Ð°棩----´«Éñ˽·þÍâ¹Ò");
 if(hWgDlg)
 {
  return TRUE;
 }
 return FALSE;
}

BOOL CMirDlg::FindWgComBox()
{
 if(hWgDlg==NULL)return FALSE;
 unsigned short int nID;
 hWgComBox=NULL;
 hWgComBox=FindWindowEx(hWgDlg,hWgComBox,"ThunderRT6ComboBox",NULL);
 if(hWgComBox)
 {  
  ::SendMessage(hWgComBox,CB_SETCURSEL,0,0);
  nID=::GetDlgCtrlID(hWgComBox); 
  ::SendMessage(hWgDlg, WM_COMMAND,MAKEWPARAM(nID,CBN_SELCHANGE),(LPARAM)hWgComBox);  
  return TRUE;
 }
 return FALSE;
}

BOOL CMirDlg::FindWgButton()
{
 if(hWgDlg==NULL)return FALSE;
 unsigned short int nID;
 hWgButton=NULL;
 hWgButton=FindWindowEx(hWgDlg,hWgButton,"ThunderRT6CommandButton","¿ªÊ¼(&S)");
 if(hWgComBox)
 {  
  nID=::GetDlgCtrlID(hWgButton); 
  ::PostMessage(hWgDlg, WM_COMMAND,nID,(LPARAM)hWgButton);  
  return TRUE;
 }
 return FALSE;
}


void CMirDlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 switch(nState)
 {
 case 0:
  break;
 case 1:
  if(CreateWgDlg(strwgPath,&mypi[0]))
  {
   nState=2;
  }
  break;
 case 2:
  if(FindWgDlg())
  {
   nState=3;
  }
  break;
 case 3:
  if(FindWgComBox())
  {
   nState=4;
  }
  break;
 case 4:
  if(FindWgButton())
  {
   ::ShowWindow(hWgDlg,SW_HIDE);   
   nState=16;
  }
  break;
 case 5:
  if(CreateWgDlg(str51PywgPath,&mypi[1]))
  {
   nState=6;
  }
  break;
 case 6:
  if(Find51pywgDlg())
  {
   nState=7;
  }
  break;
 case 7:
  if(Find51pywgButton())
  {
   nState=8;
   //::ShowWindow(h51pywg,SW_HIDE);
   ::SendMessage(h51pywg,WM_SYSCOMMAND,SC_MINIMIZE,0);
  }
  break;
 case 8:
  if(CreateWgDlg(strHotcsPath,&mypi[2]))
  {
   nState=9;
  }
  break;
 case 9:
  if(FindHotCSDlg())
  {   
   nState=10;
  }
  break;
 case 10:
  if(FindRichEdit())
  {
   nState=11;
  }
  break;
 case 11:
  ulTimeOut+=1000;
  if(FindHotCSpnLogin())
  {
   nState=12;
  }
  break;  
 case 12:
  ulTimeOut+=1000;
  iReLoadTimeOut+=1000;
  if(iReLoadTimeOut>=15000)
  {
   iReLoadTimeOut=0;
   if(IsLoginOK())
   {
    ulTimeOut=0;
    nState=13;
   }
   else
    nState=11;
  }
  if(ulTimeOut>=2*60*1000)
  {
   //nState=1;
   //::SendMessage(hHotWnd,WM_CLOSE,0,0);
   //::SendMessage(h51pywg,WM_CLOSE,0,0);
   //::SendMessage(hWgDlg,WM_CLOSE,0,0);
   OnButtonBegin();
   OnButtonBegin();
  }
  break;
 case 13:
  if(FindHotPanel())
  {
   nState=14;
   ulTimeOut=0;
  }
  break;
 case 14:
  iReLoadTimeOut+=1000;
  if(iReLoadTimeOut>=10000)
  {
   iReLoadTimeOut=0;
   if(GetScriptState())
   {  
    ActionScript();
    nState=15;
   }
   else
   { 
    ulTimeOut++;    
   }
  }
  if(ulTimeOut>=1)
  {
   if(CheckAllProgram())
   {
    OnButtonBegin();
   }
   ulTimeOut=0;
  }
  break;
 case 15:
  ulTimeOut=0;
  ActionScript();
//  ::ShowWindow(hHotWnd,SW_HIDE);
  nState=14;
  break;
 case 16:
  EnumWindows(enumProc,0);
  nState=5;
  break; 
 }
 CDialog::OnTimer(nIDEvent);
}

BOOL CMirDlg::Find51pywgDlg()
{
 h51pywg=NULL;
 h51pywg=FindWindowEx(NULL,h51pywg,"TFRMMAIN","·çÑ©51pywgÑéÖ¤Æ÷1.02°æ");
 //h51pywg=FindWindowEx(NULL,h51pywg,"TForm1","·çÑ©´«ÉñÑéÖ¤Æ÷1.10°æ");
 if(h51pywg)
 {
  return TRUE;
 }
 return FALSE;
}

BOOL CMirDlg::Find51pywgButton()
{
 if(h51pywg==NULL)return FALSE;
 int nID;
 h51pywgButton=NULL;
 h51pywgButton=FindWindowEx(h51pywg,h51pywgButton,"TBUTTON","´«Éñ");
 if(h51pywgButton)
 {
  nID=::GetDlgCtrlID(h51pywgButton);
  ::SendMessage(h51pywg,WM_COMMAND,nID,(LPARAM)h51pywgButton);
  //::SendMessage(h51pywgButton,WM_KEYDOWN,13,0);
  ::ShowWindow(h51pywgButton,SW_HIDE);
  ::ShowWindow(h51pywgButton,SW_SHOW);
  return TRUE;
 }
 return FALSE;
}

BOOL CMirDlg::FindHotCSDlg()
{
 hHotWnd=NULL;
 hHotWnd=FindWindowEx(NULL,hHotWnd,"TFrmmain","V 1.0");
 if(hHotWnd)
 {
  return TRUE;
 }
 return FALSE;
}

BOOL CMirDlg::FindHotCSpnLogin()
{
 HWND hwnd1,hwnd2;
 char szBuf[256]; 
 int nIdFirst; 
 int i; 
 hwnd1=NULL;
 hwnd2=NULL;
 hwnd1=FindWindowEx(hHotWnd,hwnd1,"TPanel","pnlLogin");
 if(hwnd1)
 {
  hwnd2=::GetWindow(hwnd1,GW_CHILD); 
  if(hwnd2 == NULL || !::IsWindow(hwnd2)) return FALSE;
  i=0;
  nIdFirst=::GetDlgCtrlID(hwnd2);
  do
  {
   ::GetClassName(hwnd2,szBuf,256);    
   if(hwnd2)
   {
    if(::IsWindow(hwnd2))
    {     
     i++;
     ::GetWindowText(hwnd2,szBuf,256);
     switch(i)
     {
     case 2:
      hHotLoadButton=hwnd2;      
      break;
     case 4:
      hHotPSWEdit=hwnd2;
      break;
     case 5:
      hHotUserEdit=hwnd2;
      break;
     }
    }
   }
   
   hwnd2=::GetWindow(hwnd2,GW_HWNDNEXT);
   if(!::IsWindow(hwnd2) || hwnd2==NULL)
    break;
   
  }while(nIdFirst != ::GetDlgCtrlID(hwnd2)); 
  //***********************  
  if(hHotLoadButton==NULL)return FALSE;
  if(hHotPSWEdit==NULL)return FALSE;
  if(hHotUserEdit==NULL)return FALSE;
  
  char buf1[20],buf2[20];
  strcpy(buf1,m_User);
  strcpy(buf2,m_PSW);
  ::SendMessage(hHotUserEdit,WM_SETTEXT,0,LPARAM(buf1));
  ::SendMessage(hHotPSWEdit,WM_SETTEXT,0,LPARAM(buf2));    
  if(::BringWindowToTop(hHotWnd))
  {
   ::SendMessage(hHotLoadButton,WM_SETFOCUS,NULL,0);
   ::SendMessage(hHotLoadButton,WM_KEYDOWN,VK_SPACE,0);
   ::SendMessage(hHotLoadButton,WM_KEYUP,VK_SPACE,0);
   return TRUE;
  }
  return TRUE;
 }
 return FALSE;
}

BOOL CMirDlg::FindRichEdit()
{
 if(hHotEdit!=NULL)return TRUE;
 if(hHotWnd==NULL)return FALSE; 
 char szBuf[256];
 char buf[1024];
 int nIdFirst1,nIdFirst2;
 HWND hwnd1,hwnd2;
 hwnd1=NULL;
 hwnd2=NULL;
 
 hwnd1=::GetWindow(hHotWnd,GW_CHILD);
 if(hwnd1 == NULL || !::IsWindow(hwnd1)) return FALSE;
 nIdFirst1=::GetDlgCtrlID(hwnd1); 
 do
 {
  ::GetClassName(hwnd1,szBuf,256);
  ::GetWindowText(hwnd1,buf,100);
  if(strcmp(szBuf,"TPanel")==0)
  {
   hwnd2=::GetWindow(hwnd1,GW_CHILD);
   if(hwnd2||::IsWindow(hwnd2))
   {
    nIdFirst2=::GetDlgCtrlID(hwnd2);
    do
    {
     ::GetClassName(hwnd2,szBuf,256);
     ::GetWindowText(hwnd2,buf,1024);
     if(strcmp(szBuf,"TRichEdit")==0)
     {
      hHotEdit=hwnd2; 
      return TRUE;
     }
     hwnd2=::GetWindow(hwnd2,GW_HWNDNEXT);  
     if(!::IsWindow(hwnd2) || hwnd2==NULL)  break;
    }while(nIdFirst2 != ::GetDlgCtrlID(hwnd2)); 
   }   
  }
  
  hwnd1=::GetWindow(hwnd1,GW_HWNDNEXT);  
  if(!::IsWindow(hwnd1) || hwnd1==NULL)  break;   
 }while(nIdFirst1 != ::GetDlgCtrlID(hwnd1)); 
 
 return FALSE;
}

BOOL CMirDlg::IsLoginOK()
{
 if(hHotEdit==NULL)return FALSE;
 char buf[2048];
 int len;
 EnumWindows(enumProc,0); 

 ::SendMessage(hHotWnd,WM_SETFOCUS,WPARAM(hHotEdit),0);
 memset(buf,0,2048);
 ::SendMessage(hHotEdit,WM_GETTEXT,2048,LPARAM(buf)); 
 len=strlen(buf);
 
 ::SendMessage(hHotEdit,WM_SETTEXT,0,LPARAM(""));  
 return SearchStr(buf,len,"»¶Ó­¹âÁÙÔÆÁú´«Ææ");
}

static BOOL CALLBACK enumProc(HWND hwnd, LPARAM lParam)
{
 if (hwnd == NULL) return FALSE;
 HWND hwnd1;
 if (::IsWindow(hwnd) && ::IsWindowVisible(hwnd))
 {
  TCHAR szCap[255] = {0}; 
  TCHAR buf[255]={0};
  ::GetClassName(hwnd, szCap, 255);
  ::GetWindowText(hwnd,buf,255);
  if(strcmp(buf,"51pywg´«Éñ")==0)
  {
   hwnd1=NULL;
   hwnd1=::FindWindowEx(hwnd,hwnd1,"Button","È·¶¨");
   ::GetWindowText(hwnd1,szCap,255);
   int nID=::GetDlgCtrlID(hwnd1);
   ::SendMessage(hwnd,WM_COMMAND,nID,LPARAM(hwnd1));   
   return TRUE;
  }
  if(strcmp(szCap,"#32770")==0)
  {
   hwnd1=NULL;
   hwnd1=::FindWindowEx(hwnd,hwnd1,"Static","´«Éñ˽·þ´úÀíÒÑ×¼±¸ºÃ£¬Çë°´¡°È·¶¨¡±°´Å¥ºó½øÈë´«Éñ");
   if(hwnd1==NULL)return TRUE;
   hwnd1=NULL;
   hwnd1=::FindWindowEx(hwnd,hwnd1,"Button","È·¶¨");
   int nID=::GetDlgCtrlID(hwnd1);
   ::SendMessage(hwnd,WM_COMMAND,nID,LPARAM(hwnd1));   
   return TRUE;
  }
 }
 return TRUE;
}

BOOL CMirDlg::FindHotPanel()
{
 if(hHotWnd==NULL)return FALSE;
 char szBuf[256];
 int nIdFirst;
 CRect rect;
 hHotPanel=NULL;
 hHotPanel=::GetWindow(hHotWnd,GW_CHILD);
 if(hHotPanel||::IsWindow(hHotPanel))
 {
  nIdFirst=::GetDlgCtrlID(hHotPanel);
  do
  {
   ::GetClassName(hHotPanel,szBuf,256);   
   if(strcmp(szBuf,"TPanel")==0)
   {    
    ::GetWindowRect(hHotPanel,&rect);
    if(rect.Width()==64) 
    {
     ActionScript();
     return TRUE;
    }
   }
   hHotPanel=::GetWindow(hHotPanel,GW_HWNDNEXT);  
   if(!::IsWindow(hHotPanel) || hHotPanel==NULL)  break;
  }while(nIdFirst != ::GetDlgCtrlID(hHotPanel)); 
 } 
 return FALSE;
}

void CMirDlg::OnButtonSet()
{
 // TODO: Add your control notification handler code here
 CDialogSet myDlg;
 UpdateData(TRUE);
 myDlg.lpAppPath=apppath;
 myDlg.m_atuo=bAutoLoad;
 myDlg.m_save=bAutoSave;
 myDlg.m_run=bAutoRun;
 myDlg.m_sfname=strwgName;
 myDlg.m_SF_Path=strwgPath;
 myDlg.m_CheckPath=str51PywgPath;
 myDlg.m_pywgPath=strHotcsPath;
 myDlg.m_Port=uPort;
 memcpy(myDlg.byteIP,byteIPAddress,4);
 if(myDlg.DoModal()==IDOK)
 {
  bAutoLoad=myDlg.m_atuo;
  bAutoSave=myDlg.m_save;
  bAutoRun=myDlg.m_run;
  strwgName=myDlg.m_sfname;
  strwgPath=myDlg.m_SF_Path;
  str51PywgPath=myDlg.m_CheckPath;
  strHotcsPath=myDlg.m_pywgPath;
  uPort=myDlg.m_Port;
  memcpy(byteIPAddress,myDlg.byteIP,4);
  RegisterProgram();
  WriteInfoToRegister();
 }
 UpdateData(FALSE);
}

void CMirDlg::WriteInfoToRegister()

 CString str;
 str.Format("%03d.%03d.%03d.%03d",
    byteIPAddress[0],
    byteIPAddress[1],
    byteIPAddress[2],
    byteIPAddress[3]);
 AfxGetApp()->WriteProfileString(szSection,"´«Éñ˽·þ",strwgPath);
 AfxGetApp()->WriteProfileString(szSection,"·çÑ©ÑéÖ¤Æ÷",str51PywgPath);
 AfxGetApp()->WriteProfileString(szSection,"51pywg´«Éñ",strHotcsPath);
 AfxGetApp()->WriteProfileString(szSection,"Óû§Ãû",m_User);
 AfxGetApp()->WriteProfileString(szSection,"ÃÜÂë",m_PSW);
 AfxGetApp()->WriteProfileString(szSection,"˽·þÃû³Æ",strwgName);
 AfxGetApp()->WriteProfileString(szSection,"IPµØÖ·",str);
 AfxGetApp()->WriteProfileInt(szSection,"¶Ë¿Ú",uPort);
 AfxGetApp()->WriteProfileInt(szSection,"Æô¶¯ÔËÐÐ",bAutoRun);
 AfxGetApp()->WriteProfileInt(szSection,"Õʺű£´æ",bAutoSave);
 AfxGetApp()->WriteProfileInt(szSection,"×Ô¶¯µÇ½",bAutoLoad);
}

void CMirDlg::ReadInfoFromRegister()
{
 CString str;
 strwgPath=AfxGetApp()->GetProfileString(szSection,"´«Éñ˽·þ",apppath);
 str51PywgPath=AfxGetApp()->GetProfileString(szSection,"·çÑ©ÑéÖ¤Æ÷",apppath);
 strHotcsPath=AfxGetApp()->GetProfileString(szSection,"51pywg´«Éñ",apppath);
 m_User=AfxGetApp()->GetProfileString(szSection,"Óû§Ãû","");
 m_PSW=AfxGetApp()->GetProfileString(szSection,"ÃÜÂë","");
 strwgName=AfxGetApp()->GetProfileString(szSection,"˽·þÃû³Æ","ÔÆÁú´«Ææ");
 str=AfxGetApp()->GetProfileString(szSection,"IPµØÖ·","219.136.248.138");
 uPort=AfxGetApp()->GetProfileInt(szSection,"¶Ë¿Ú",7077);
 bAutoRun=AfxGetApp()->GetProfileInt(szSection,"Æô¶¯ÔËÐÐ",0);
 bAutoSave=AfxGetApp()->GetProfileInt(szSection,"Õʺű£´æ",0);
 bAutoLoad=AfxGetApp()->GetProfileInt(szSection,"×Ô¶¯µÇ½",0);
 sscanf(str,"%d.%d.%d.%d",
      &byteIPAddress[0],
      &byteIPAddress[1],
      &byteIPAddress[2],
      &byteIPAddress[3]);
}

BOOL CMirDlg::GetScriptState()
{
 if(hHotPanel==NULL)return FALSE;
 char buf[2048];
 int len;
 EnumWindows(enumProc,0);
 memset(buf,0,1024);
 ::SendMessage(hHotWnd,WM_SETFOCUS,WPARAM(hHotEdit),0);
 ::SendMessage(hHotEdit,WM_GETTEXT,2048,LPARAM(buf));
 ::SendMessage(hHotEdit,WM_SETTEXT,0,LPARAM(""));
 len=strlen(buf);
 return SearchStr(buf,len,"»¶Ó­¹âÁÙÔÆÁú´«Ææ"); 
}

BOOL CMirDlg::SearchStr(LPCSTR lpBuf, int count, LPCSTR lpstr)
{
 int i,j;
 int len;
 len=strlen(lpstr);
 j=len;
 for(i=count-1;i>=0;i--)
 {
  if(lpstr[j-1]==lpBuf[i])
  {
   j--;
   if(j==0)
   {    
    return TRUE;
   }
  }
  else
   j=len;
 }
 return FALSE;
}

void CMirDlg::ActionScript()

// ::ShowWindow(hHotWnd,SW_SHOW);
// ::SendMessage(hHotWnd,WM_SYSCOMMAND,SC_MAXIMIZE,0);
// ::BringWindowToTop(hHotWnd);
 //OnButton1();
 SendMessage(WM_COMMAND,MAKELPARAM(IDC_BUTTON1,BN_CLICKED),LPARAM(GetDlgItem(IDC_BUTTON1)->m_hWnd));
// ::BringWindowToTop(hHotWnd);
// ::SendMessage(hHotWnd,WM_SYSCOMMAND,SC_MAXIMIZE,0);
 SetCursorPos(34,312);     
 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}

void CMirDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 FindHotCSDlg();
// ::SendMessage(hHotWnd,SC_RESTORE,SC_MAXIMIZE,0);
 ::ShowWindow(hHotWnd,SW_SHOW);
 ::SendMessage(hHotWnd,WM_SYSCOMMAND,SC_MAXIMIZE,0);
 ::BringWindowToTop(hHotWnd);
 
 
}

void CMirDlg::RegisterProgram()
{
 HKEY  hKEY;
 char  CurrentPath[MAX_PATH];
 long  ret;

 LPSTR FileName;
 DWORD type=REG_SZ;
 DWORD size=MAX_PATH;
 
 if(!bAutoRun)return;
 LPCTSTR Rgspath="Software//Microsoft//Windows//CurrentVersion//Run" ;
 GetModuleFileName(NULL,CurrentPath,size);

//Open key
 ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,Rgspath,0,KEY_WRITE, &hKEY);
 if(ret!=ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  return ;
 }

 //Set Key
 FileName = CurrentPath;
 ret=RegSetValueEx(hKEY,"System_Funny",NULL,type,(const unsigned char*)FileName,size);
 if(ret!=ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  return ;
 }
 RegCloseKey(hKEY);
}

BOOL CMirDlg::DestroyWindow()
{
 // TODO: Add your specialized code here and/or call the base class
 UnregisterHotKey(NULL,0xA002);
 WriteInfoToRegister(); 
 ::SendMessage(hHotWnd,WM_CLOSE,0,0);
 ::SendMessage(hWgDlg,WM_CLOSE,0,0);
 ::TerminateProcess(mypi[1].hProcess,0);
 return CDialog::DestroyWindow();
}

BOOL CMirDlg::PreTranslateMessage(MSG* pMsg)
{
 // TODO: Add your specialized code here and/or call the base class
 if(pMsg->message==WM_HOTKEY)
 {
  if(pMsg->wParam==0xA002)
  {
   iWinState++;
   if(iWinState%2==0)
   {
    ShowWindow(SW_HIDE);
   }
   else
   {
    ShowWindow(SW_SHOW);
   }
  }
 }
 char buf[1];
 CString str;
 str+=buf;
 return CDialog::PreTranslateMessage(pMsg);
}

BOOL CMirDlg::CheckAllProgram()
{
 HANDLE handle;
 handle=NULL;
 for(int i=0;i<3;i++)
 {
  handle=OpenProcess(PROCESS_ALL_ACCESS,TRUE,mypi[i].dwProcessId);
  if(handle==NULL)
  {
   OnButtonBegin();
   return TRUE;   
  }
  CloseHandle(handle);
  handle=NULL;
 } 
 return FALSE;
}