系统相关功能开发(三)-系统控制与调用


1.调用外部程序

void CSysControlSampleDlg::OnButtonExe()	// 调用外部程序
{
	STARTUPINFO    si;						// 定义启动信息变量
	PROCESS_INFORMATION    pi;				// 定义进程信息变量
	HANDLE     hProcess,hThread;			// 定义进程句柄和线程句柄
	si.cb =sizeof(STARTUPINFO);				// 为启动信息变量大小赋值
	si.lpReserved = NULL;					// 预留
	si.lpDesktop=NULL;						// 桌面句柄
	si.lpTitle=NULL;						// 进程标题,只对控制台程序有效
	si.cbReserved2=0;						// 预留
	si.lpReserved2=NULL;					// 预留
	if (CreateProcess("C:\\WINDOWS\\NOTEPAD.EXE", NULL,
           NULL, NULL, TRUE, 0, NULL,NULL, &si,&pi))     // 启动记事本      
	{		
		hProcess = pi.hProcess;
        hThread = pi.hThread;	// 保存进程和线程句柄
		WriteLog("调用外部程序成功。\n进程Id = %d\n线程Id = %d\n",pi.dwProcessId,pi.dwThreadId);	// 输出进程信息
	}
	else WriteLog("调用记事本失败。错误代码=%X",GetLastError());	// 输出错误代码	
}


2.调用创建快捷方式向导

void CSysControlSampleDlg::OnButtonLinkWizard()		// 调用创建快捷方式向导
{	
	WinExec("rundll32.exe appwiz.cpl,NewLinkHere C:\\", SW_SHOW);
}


3.启动控制面板

void CSysControlSampleDlg::OnButtonExeControlitem() // 访问启动控制面板中的各项
{
	if (SUCCEEDED(CoInitialize(NULL))) 			// 初始化COM工作环境
	{
		IShellDispatch* pShellDispatch=NULL; 		// 定义接口指针
		// 创建CLSID_Shell接口实例
		if (SUCCEEDED(CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pShellDispatch))) 
		{	// 如果成功,则
			COleVariant   OleVariant("sysdm.cpl"); 	// 初始化控制面板对应的cpl名
			// 调用指定cpl名对应的对话框程序
			HRESULT hResult = pShellDispatch->ControlPanelItem(OleVariant.bstrVal); 
			pShellDispatch->Release(); 
		} 
		else WriteLog("创建CLSID_Shell实例失败");	// 如果创建实例失败,则显示错误信息
		CoUninitialize();							// 清理COM工作环境
	}
	else WriteLog("初始化Shell失败");			// 初始化COM环境失败,则显示错误信息
}


4.控制光驱的弹开

void CSysControlSampleDlg::OnButtonOpenCdrom()	// 控制光驱的弹开
{	   
	MCI_OPEN_PARMS   mciOpenParms;    
	mciOpenParms.lpstrDeviceType   =   "cdaudio";
	if (!mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE,
        (DWORD)(LPVOID)&mciOpenParms))	  
		mciSendCommand(mciOpenParms.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, NULL); 	
}


5.控制光驱的关闭

void CSysControlSampleDlg::OnButtonCloseCdrom() // 控制光驱的关闭
{
	mciSendCommand(mciGetDeviceID("cdaudio"), MCI_SET, MCI_SET_DOOR_CLOSED, NULL); 
}


6.关机

ExitWindowsEx(EWX_POWEROFF,NULL);			// 关机操作系统


7.重启

ExitWindowsEx(EWX_REBOOT,NULL);				// 重启操作系统


8.注销

ExitWindowsEx(EWX_LOGOFF,NULL);				// 注销操作系统


9.锁定计算机

void CSysControlSampleDlg::OnButtonLockSystem() // 锁定计算机
{
	HINSTANCE hInstance = ::LoadLibrary("user32.dll");	// 装载user32.dll
	LOCKFUN pFun = (LOCKFUN)::GetProcAddress(hInstance,"LockWorkStation");// 获取函数指针
	pFun();						// 执行函数,锁定计算机
}


10.打开显示器

::SendMessage(GetSafeHwnd(),WM_SYSCOMMAND,SC_MONITORPOWER,-1);	


11.关闭显示器

::SendMessage(GetSafeHwnd(),WM_SYSCOMMAND,SC_MONITORPOWER,2);	


12.打开屏幕保护程序

::SendMessage(GetSafeHwnd(),WM_SYSCOMMAND,SC_SCREENSAVE,2);	


13.启用屏幕保护程序

	SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);  


14.禁用屏幕保护程序

 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0); 


15.开启当前输入法

HIMC  himc = ImmGetContext(m_editLog.m_hWnd);
	ImmSetOpenStatus(himc, TRUE);


16.关闭当前输入法

HIMC  himc = ImmGetContext(m_editLog.m_hWnd);
	ImmSetOpenStatus(himc, FALSE);


17.程序发出提示音

MessageBeep(MB_ICONASTERISK);	


18.列举系统中的可执行文件

void CSysControlSampleDlg::OnButtonCloseSearchfile()	// 列举系统中的可执行文件
{	
	iFileCount = 0;
	::SetCursor(LoadCursor(NULL, IDC_WAIT));	
	char szDrivers[MAX_PATH]={0};
	CString szPath;
	DWORD dwLen = GetLogicalDriveStrings(MAX_PATH, szDrivers);
	for (int i = 0;i < (int)dwLen; i++)
	{
		if (((szDrivers[i] <='Z') && (szDrivers[i] >='A'))
			|| ((szDrivers[i] <='z') && (szDrivers[i] >='a')))
		{
			szPath.Format("%c:", szDrivers[i]);
			FindExe(szPath);
		}
	}
	::SetCursor(LoadCursor(NULL, IDC_ARROW));	
}

void CSysControlSampleDlg::FindExe(CString szPath)
{
	CFileFind ff;
	BOOL bContinue = ff.FindFile(szPath + "\\*");
	while (bContinue)
	{
		if (iFileCount > 10) return;
		bContinue = ff.FindNextFile();
		if (ff.IsDirectory())
		{
			if (ff.GetFileName().Left(1) != ".")
			{
				CString szRecuPath;
				szRecuPath.Format("%s\\%s", szPath, ff.GetFileName());
				FindExe(szRecuPath);
				continue;
			}			
		}
		if (ff.GetFileName().Right(3) == "exe")
		{
			iFileCount++;
			WriteLog("%s%s", ff.GetFilePath(), ff.GetFileName());					
		}
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值