VC++常用代码片段

1.改变当前目录到EXE所在的目录

在VC++开发环境中直接运行程序,当前目录不是EXE所在的目录,这样会造成一些麻烦,比如使用相对路径打开文件。使用以下代码将当前目录设成EXE所在的目录:


void ChangeCurDirToExe()
{
	CString strPath;
	
	::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),MAX_PATH);
	strPath.ReleaseBuffer();
	strPath = strPath.Left(strPath.ReverseFind(L'\\') +1 );
	::SetCurrentDirectory(strPath.GetBuffer());
	
}

2.开机自运行

HKEY m_regkey;
TCHAR filename[_MAX_PATH];
GetModuleFileName(NULL,filename,_MAX_PATH);
RegOpenKey(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&m_regkey);
RegSetValueEx(m_regkey,L"程序名称",0,REG_SZ,(const unsigned char *)filename,MAX_PATH);
RegCloseKey(m_regkey);

3.取消开机自运行

HKEY hKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS)
{
	RegDeleteValue(hKey,L"程序名称");
	RegCloseKey(hKey);
}
4.退出后重启

TCHAR szPath[MAX_PATH]; 
GetModuleFileName(NULL, szPath, MAX_PATH); 

STARTUPINFO startupInfo;
PROCESS_INFORMATION procInfo;
memset(&startupInfo,0x00,sizeof(STARTUPINFO));
startupInfo.cb = sizeof(STARTUPINFO);
::CreateProcess(szPath,NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&startupInfo,&procInfo);

5.只运行一个实例
HANDLE m_hMutex = CreateMutex(NULL, FALSE, _T("AetasServer"));

if (GetLastError() == ERROR_ALREADY_EXISTS)
{
	AfxMessageBox(L"程序名称,已经运行");
	CloseHandle(m_hMutex);
	m_hMutex = NULL;
	return FALSE;
}

6.链接到库文件

#pragma comment(lib, "winspool.lib")
7.在窗口程序中输出信息到控制台

在程序开始出加入:

#include <io.h>
#include <fcntl.h>

void InitConsole()
{
	int nRet= 0;
	FILE* fp;
	AllocConsole();
	nRet= _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
	fp = _fdopen(nRet, "w");
	*stdout = *fp;
	setvbuf(stdout, NULL, _IONBF, 0);
}

退出时调用
FreeConsole(VOID);



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值