⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpepssohelpdlg.cpp

📁 净化IE环境(公司应用在电力系统)以及菜单
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// xpepssohelpDlg.cpp : implementation file
//

#include "stdafx.h"
#include "xpepssohelp.h"
#include "xpepssohelpDlg.h"
#include "BCMENU.H"
#include <shlwapi.h>   
#include <tlhelp32.h>
//#include <psapi.h> 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
OSVERSIONINFO  osver ;
HINSTANCE hDLL;                   
typedef BOOL (CALLBACK* ENUMPROCESSES)(DWORD * , DWORD , DWORD * ); 
ENUMPROCESSES lpfnEnumProcesses;
typedef HANDLE (CALLBACK* ENUMPROCESSMODULES)( HANDLE, HMODULE * , DWORD , LPDWORD ); 
ENUMPROCESSMODULES lpfnEnumProcessModules;
typedef DWORD (CALLBACK* GETMODULEBASENAMEA)( HANDLE , HMODULE,  LPTSTR , DWORD ); 
GETMODULEBASENAMEA lpfnGetModuleBaseNameA;

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

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()

BOOL  KillProcessEx(char *processname)
{
//    OSVERSIONINFO  osver ;
	LPDWORD        m_processid ;
	DWORD          dwSize, processnum,exitcode ;
    HANDLE         hProcess,hSnapShot;
    char           szProcessName[MAX_PATH]="";
    HMODULE        hMod;
    DWORD          cbNeeded;
	PROCESSENTRY32 procentry ;
	BOOL           bFlag; 
	if(NULL==processname)
		return FALSE;
    if( osver.dwPlatformId == VER_PLATFORM_WIN32_NT )
	{
		dwSize = 256 * sizeof( DWORD ) ;
		m_processid = NULL ;
		do
		{
			if( m_processid )
			{
			   HeapFree( GetProcessHeap(), 0, m_processid ) ;
			   dwSize *= 2 ;
			}
			m_processid =( LPDWORD)HeapAlloc( GetProcessHeap(), 0, dwSize );
			if( m_processid == NULL )
			   return FALSE ;
			if( !lpfnEnumProcesses( m_processid, dwSize, &processnum ) )
			{
			   HeapFree( GetProcessHeap(), 0, m_processid ) ;
			   return FALSE ;
			}
		}while( dwSize == processnum ) ;
		processnum=processnum/sizeof(DWORD);
		for(DWORD i=0;i<processnum;i++)
		{
		   hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_TERMINATE,FALSE,m_processid[i]);
		   if ( hProcess )
		   {
			 if ( lpfnEnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
			 {
				 dwSize=MAX_PATH;
				 dwSize=lpfnGetModuleBaseNameA( hProcess, hMod, (LPTSTR)szProcessName, dwSize );
				 if(strnicmp(szProcessName,processname,strlen(processname))==0)
				 {
					 GetExitCodeProcess(hProcess,&exitcode);
					 if(TerminateProcess(hProcess,exitcode))
					 {
						 HeapFree( GetProcessHeap(), 0, m_processid ) ;
                         CloseHandle( hProcess ) ;
						 return TRUE;
					 }
				 }
			 }
             CloseHandle( hProcess ) ;
		   }
		}
		HeapFree( GetProcessHeap(), 0, m_processid ) ;
	}
	else if(osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
	{
		hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ) ;
		if( hSnapShot == INVALID_HANDLE_VALUE )
			return FALSE ;
		procentry.dwSize = sizeof(PROCESSENTRY32) ;
		bFlag = Process32First( hSnapShot, &procentry ) ;
		while( bFlag )
		{
			if(strnicmp(procentry.szExeFile+strlen(procentry.szExeFile)-strlen(processname),processname,strlen(processname))==0)
			{
				 hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, procentry.th32ProcessID); 
				 if (hProcess) {        
					 if (!TerminateProcess( hProcess, 1 )) 
					 {            
						 CloseHandle( hProcess );     
						 return FALSE;          
					 }        
					 CloseHandle( hProcess );   
					 return TRUE; 
				 }
   
			}else
			  bFlag = Process32Next( hSnapShot, &procentry ); 
		}
	}
	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// CXpepssohelpDlg dialog

CXpepssohelpDlg::CXpepssohelpDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CXpepssohelpDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CXpepssohelpDlg)
	m_Monitor = FALSE;
	m_Startrun = FALSE;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    maxlen=0;
    m_lastTicket=0;
    m_timer=10000;
}

void CXpepssohelpDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CXpepssohelpDlg)
	DDX_Control(pDX, IDC_LIST1, m_List);
	DDX_Check(pDX, IDC_MONITOR, m_Monitor);
	DDX_Check(pDX, IDC_STARTRUN, m_Startrun);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CXpepssohelpDlg, CDialog)
	//{{AFX_MSG_MAP(CXpepssohelpDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_TEST, OnTest)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_MONITOR, OnMonitor)
	ON_BN_CLICKED(IDC_STARTRUN, OnStartrun)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
    ON_MESSAGE(WM_CONTROL,CsycControl)
	ON_COMMAND(IDM_SHOW, OnShow)
	ON_COMMAND(IDC_ABOUT, OnAbout)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXpepssohelpDlg message handlers

BOOL CXpepssohelpDlg::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
    RegServer(FALSE);
	CString tmp=AfxGetApp()->GetProfileString("EPSSO","MONITOR","2");
 	if(tmp=="0")
		 m_Monitor=FALSE;
	 else
	 {
		 m_Monitor=TRUE;
         UpdateData(FALSE);
		 if(tmp == "2")
			 RegServer(TRUE);
		 SetTimer(1,m_timer,NULL);
	 }
//	 ShowWindow(SW_HIDE);
 //    GetBrowserVersion(&m_IEverMajor,&m_IEverMinor,&m_IEBuildnum);
//	 char temp[100];
 //    sprintf(temp,"IE VERSION:%d-%d-%d",m_IEverMajor,m_IEverMinor,m_IEBuildnum);
//	 AfxMessageBox(temp);
    osver.dwOSVersionInfoSize = sizeof( osver ) ;
	if( !GetVersionEx( &osver ) )
	 return FALSE ;
	hDLL = LoadLibrary("psapi.dll");
	if(hDLL!=NULL)
	{
		 lpfnEnumProcesses = (ENUMPROCESSES)GetProcAddress(hDLL,"EnumProcesses");
		 lpfnEnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress(hDLL,"EnumProcessModules");
		 lpfnGetModuleBaseNameA = (GETMODULEBASENAMEA)GetProcAddress(hDLL,"GetModuleBaseNameA");
		 if(NULL==lpfnEnumProcesses||NULL==lpfnEnumProcessModules||NULL==lpfnGetModuleBaseNameA)
		 {
			 FreeLibrary(hDLL);
			 hDLL=NULL;
		 }
	}

	// TODO: Add extra initialization here
	tnd.cbSize=sizeof(NOTIFYICONDATA);
	tnd.hWnd=this->m_hWnd;
	tnd.uID=IDR_MAINFRAME;
	tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
	tnd.uCallbackMessage=WM_CONTROL;
	tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
	strcpy(tnd.szTip,"标准化作业智能系统环境监视器");
    SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,1,NULL,0);
   ::Shell_NotifyIcon(NIM_ADD,&tnd);
   
   GetModuleFileName(NULL, szFilePath, MAX_PATH);
   (_tcsrchr(szFilePath, _T('\\')))[1] = 0; //删除文件名,只获得路径
   IESecurityHandle();
   return TRUE;  // return TRUE  unless you set the focus to a control
}

void CXpepssohelpDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
	//	CAboutDlg dlgAbout;
	//	dlgAbout.DoModal();
      OnAbout();
	}
	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 CXpepssohelpDlg::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 CXpepssohelpDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CXpepssohelpDlg::OnTest() 
{
	// TODO: Add your control notification handler code here
    //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727[Install (DWORD value = 1)]
	try{
	BOOL requestDownload=FALSE;
    maxlen=0;
	if(m_List.GetCount()==LB_ERR)
		return;
	if( m_List.GetCount()>0)
	   m_List.ResetContent();
	AddListString(_T("第一步...")); 
	HandleBHO(NULL);
	AddListString(_T("第二步...")); 
	ClearDownloadUI();
	AddListString(_T("第三步...")); 
    ClearIEAddItem();
    if(KillProcessEx("FlashGet.exe"))
		AddListString(_T("关闭FlashGet.exe"));
    CFileFind tempFind;
    BOOL isExist=(BOOL)tempFind.FindFile(GetAppsDir().GetBuffer(0));
	if(isExist && MessageBox("您是否要清除本地原有标准化作业智能管理系统?","提示",MB_YESNO|MB_ICONQUESTION) == IDYES)
	{
		AddListString(_T("第四步...")); 
		KillProcess("标准化作业智能管理系统[2007]");
		AddListString("清除历史下载..."); 
		if(DeleteDir(GetAppsDir().GetBuffer(0)))
		AddListString("清除历史下载成功!");
		else
		AddListString("清除历史下载失败!");
	}

	m_IEverMajor=GetIEVersion();
	if(m_IEverMajor<7)
	{
      if(m_IEverMajor<6)
	  {
		//  if(MessageBox("您的IE版本太老(<6.0),可能不能安装标准化作业智能管理系统!\n建议您先安装IE6.0版本,您是否要下载IE6.0 SP1?","提示",MB_YESNO|MB_ICONQUESTION) == IDYES)
		//  {
        //     ShellExecute(this->m_hWnd,"open","IExplore.exe", "http://bzh.hn.sgcc.com.cn/IE6.ZIP","",SW_HIDE );
		//	 return;
		//  }
         requestDownload=TRUE;
	  }
      KillProcess("标准化作业智能管理系统--系统运行 - Microsoft Internet Explorer");
	}
	else
     KillProcess("标准化作业智能管理系统--系统运行 - Windows Internet Explorer");

    if(!CheckNet20Frame())
	{
	 // if(MessageBox("要安装标准化作业智能管理系统,首先要安装.net 2.0 框架!\n建议您先安装.net 2.0 Framework,您是否要下载.net 2.0 Framework?","提示",MB_YESNO|MB_ICONQUESTION) == IDYES)
	 // {                                                    
     //    ShellExecute(this->m_hWnd,"open","IExplore.exe", "http://bzh.hn.sgcc.com.cn/tools/dotnetfx/dotnetfx.exe","",SW_HIDE );
	//	 return;
	 // }
         requestDownload=TRUE;
	}
	if(requestDownload)
	{
	    MessageBox("要安装标准化作业智能管理系统,首先要下载并安装系统必备组件!\n请确认下载并安装......","提示",MB_OK|MB_ICONINFORMATION);
        ShellExecute(this->m_hWnd,"open","IExplore.exe", "http://bzh.hn.sgcc.com.cn/tools/setup.exe","",SW_HIDE );
	    return;
	}

	AddListString("正在打开运行(安装)网页...");
	ShellExecute(this->m_hWnd,"open","IExplore.exe", "http://bzh.hn.sgcc.com.cn/","",SW_SHOW );
	}
	catch(...)
	{
      AfxMessageBox("未知错误!");
	}
}

BOOL CXpepssohelpDlg::HandleBHO(LPSTR pStr)
{
  HKEY   Result;     
  TCHAR   buffer[60]="";   
  DWORD   cbSize=60;   
  TCHAR   keyname[200];   
  DWORD   index=0; 

  long   open=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects",0,KEY_ALL_ACCESS,&Result);   
  if(open==ERROR_SUCCESS)   
  {   
          while(RegEnumKey(Result,index,buffer,cbSize)!=ERROR_NO_MORE_ITEMS)   
		  {   
                sprintf(keyname,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\%s"),buffer);  
				if(RegDeleteKey(HKEY_LOCAL_MACHINE, keyname) == ERROR_SUCCESS)
				{
					sprintf(keyname,_T("处理BHO组件:%s成功!"),buffer);
                    AddListString(keyname);
					if(m_Monitor==TRUE && m_timer==10000 && GetTickCount()-m_lastTicket < 60000)
					{
						KillTimer(1);
                        m_timer=3000;
						SetTimer(1,m_timer,NULL);
					}
                    m_lastTicket=GetTickCount();
				}
				else
				{
					sprintf(keyname,"处理BHO组件:%s失败!",buffer);
                    AddListString(keyname);
                    index++;
				}
                buffer[0]='\0';
                cbSize=60;  
		  }
          RegCloseKey(Result); 
  }
  return     FALSE;
}

VOID CXpepssohelpDlg::ClearDownloadUI()
{
	HKEY   hKey;
	char  *p="",buf[100];
    DWORD lValue=100;
	AddListString("IE下载关联清除...");
	long   open=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Internet Explorer",0,KEY_ALL_ACCESS,&hKey);//创建注册表项
	if(open==ERROR_SUCCESS)   
	{  
        if(RegQueryValueEx(hKey,"DownloadUI",NULL,NULL,(LPBYTE)buf,&lValue) == ERROR_SUCCESS)
		{
			if(RegDeleteValue(hKey, "DownloadUI") == ERROR_SUCCESS)
			{
				AddListString("HKEY_LOCAL_MACHINE段IE下载关联清除成功!");
				if(m_Monitor==TRUE && m_timer==10000 && GetTickCount()-m_lastTicket < 60000)
				{
					KillTimer(1);
                    m_timer=3000;
					SetTimer(1,m_timer,NULL);
				}
				m_lastTicket=GetTickCount();
			}
            lValue=100;
			if(RegQueryValueEx(hKey,"DownloadUI",NULL,NULL,(LPBYTE)buf,&lValue) == ERROR_SUCCESS)
			{
				AddListString("HKEY_LOCAL_MACHINE段IE下载关联清除失败!");	
			}
		}
		RegCloseKey(hKey);//关闭注册表对象
	}
	else
       AddListString("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer打开失败!");
    lValue=100;
	open=RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Internet Explorer",0,KEY_ALL_ACCESS,&hKey);//创建注册表项
	if(open==ERROR_SUCCESS)   
	{  
        if(RegQueryValueEx(hKey,"DownloadUI",NULL,NULL,(LPBYTE)buf,&lValue) ==ERROR_SUCCESS)
		{
			if(RegDeleteValue(hKey, "DownloadUI") == ERROR_SUCCESS)
			{
				AddListString("HKEY_CURRENT_USER段IE下载关联清除成功!");
				if(m_Monitor==TRUE && m_timer==10000 && GetTickCount()-m_lastTicket < 60000)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -