Exemple #1
0
BOOL ShellFunctions::RunRegistryCommand(HKEY hKey,LPCWSTR szFile)
{
	if (!IsUnicodeSystem())
		return RunRegistryCommand(hKey,W2A(szFile));


	PROCESS_INFORMATION pi;
	STARTUPINFOW si;
	CRegKey CommandKey;
	CStringW ExecuteStr;
	CStringW CommandLine;
	int i;

	if (CommandKey.OpenKey(hKey,"command",CRegKey::openExist|CRegKey::samAll)!=ERROR_SUCCESS)
		return FALSE;
	if (CommandKey.QueryValue(L"",ExecuteStr)<2)
		return FALSE;
	i=ExecuteStr.FindFirst(L'%');
	while (i!=-1)
	{
		if (ExecuteStr[i+1]==L'1')
		{
			CommandLine.Copy(ExecuteStr,i);
			CommandLine<<szFile;
			CommandLine<<((LPCWSTR)ExecuteStr+i+2);
			break;
		}
		i=ExecuteStr.FindNext(L'%',i);
	}
	if (i==-1)
		CommandLine=ExecuteStr;
	if (!ExpandEnvironmentStringsW(CommandLine,ExecuteStr.GetBuffer(1000),1000))
		ExecuteStr.Swap(CommandLine);
	si.cb=sizeof(STARTUPINFOW);
	si.lpReserved=NULL;
	si.cbReserved2=0;
	si.lpReserved2=NULL;
	si.lpDesktop=NULL;
	si.lpTitle=NULL;
	si.dwFlags=STARTF_USESHOWWINDOW;
	si.wShowWindow=SW_SHOWDEFAULT;
	if (!CreateProcessW(NULL,ExecuteStr.GetBuffer(),NULL,
		NULL,FALSE,CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS,
		NULL,NULL,&si,&pi))
	{
		CommandKey.CloseKey();
		return FALSE;
	}
	CloseHandle(pi.hThread);
	CloseHandle(pi.hProcess);
	CommandKey.CloseKey();
	return TRUE;
}
Exemple #2
0
BOOL SetLanguageSpecifigHandles(LPCWSTR szAppPath)
{
	CRegKey RegKey;
	CStringW LangFile;
	if (RegKey.OpenKey(HKCU,g_szRegKey,
		CRegKey::openExist|CRegKey::samRead)==ERROR_SUCCESS)
	{
		RegKey.QueryValue(L"Language",LangFile);
		RegKey.CloseKey();
	}
	if (LangFile.IsEmpty())
		LangFile=L"lan_en.dll";

	CStringW Path(szAppPath,LastCharIndex(szAppPath,L'\\')+1);
	
	HINSTANCE hLib=FileSystem::LoadLibrary(Path+LangFile);
	if (hLib==NULL)
	{
		hLib=FileSystem::LoadLibrary(Path+"lan_en.dll");

		if (hLib==NULL)
		{
			fwprintf(stderr,L"Cannot load language file '%s'\n",(LPCWSTR)Path);
			return FALSE;
		}

		fwprintf(stderr,L"Cannot load language file '%s', using 'lan_en.dll'\n",(LPCWSTR)LangFile);
	}

	SetResourceHandle(hLib,LanguageSpecificResource);
	return TRUE;
}
BOOL CListCtrl::SaveColumnsState(HKEY hRootKey,LPCSTR lpKey,LPCSTR lpSubKey) const
{
	CRegKey RegKey;
	if (lpKey==NULL)
		RegKey.m_hKey=hRootKey;
	else if (RegKey.OpenKey(hRootKey,lpKey,CRegKey::createNew|CRegKey::samAll)!=ERROR_SUCCESS)
		return FALSE;
	LVCOLUMN lc;
	fMemSet(&lc,0,sizeof(LVCOLUMN));
	lc.mask=LVCF_WIDTH;
	
	int nColumns=GetColumnCount();
	if (nColumns==0)
	{
		if (lpKey==NULL)
			RegKey.m_hKey=NULL;
		return FALSE;
	}
	
	int* pData=new int[1+2*nColumns];
	if (pData==NULL)
	{
		if (lpKey==NULL)
			RegKey.m_hKey=NULL;
		return FALSE;
	}
	pData[0]=nColumns;
	

	for (int i=0;i<nColumns;i++)
	{
		if (::SendMessage(m_hWnd,LVM_GETCOLUMN,i,LPARAM(&lc)))
			pData[1+i]=lc.cx;
		else
			pData[1+i]=100;
	}
	
	if (!::SendMessage(m_hWnd,LVM_GETCOLUMNORDERARRAY,nColumns,LPARAM(pData+1+nColumns)))
	{
		for (int i=0;i<nColumns;i++)
			pData[1+nColumns+i]=i;
	}

	BOOL bRet=RegKey.SetValue(lpSubKey,(LPSTR)pData,sizeof(int)*(1+2*nColumns),REG_BINARY)==ERROR_SUCCESS;
	RegKey.CloseKey();
	delete[] pData;
	if (lpKey==NULL)
		RegKey.m_hKey=NULL;
	return bRet;
}
Exemple #4
0
BOOL CALLBACK CSubAction::EnumExplorerChilds(HWND hWnd,LPARAM lParam)
{
	char szClass[100]="";
	GetClassName(hWnd,szClass,100);

	if (strcmp(szClass,"ComboBoxEx32")!=0)
		return TRUE;

	if (::SendMessageW(hWnd,WM_GETTEXT,MAX_PATH,lParam)==0)
		return TRUE;
	
	if (FileSystem::IsDirectory((LPCWSTR)lParam))
		return FALSE; // Path is OK

	// Check wheter lParam is Desktop
	LPITEMIDLIST idl;
	SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&idl);
	SHFILEINFOW fi;
	if (ShellFunctions::GetFileInfo(idl,0,&fi,SHGFI_DISPLAYNAME))
	{
		if (wcscmp(fi.szDisplayName,(LPCWSTR)lParam)==0)
		{
			((LPWSTR)lParam)[0]=L'2';
			((LPWSTR)lParam)[1]=L'\0';
			CoTaskMemFree(idl);
			return FALSE;
		}
	
		CoTaskMemFree(idl);		
	}

	// Check wheter lParam is My Computer
	SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES,&idl);
	if (ShellFunctions::GetFileInfo(idl,0,&fi,SHGFI_DISPLAYNAME))
	{
		if (wcscmp(fi.szDisplayName,(LPCWSTR)lParam)==0)
		{
			((LPWSTR)lParam)[0]=L'4';
			((LPWSTR)lParam)[1]=L'\0';
			CoTaskMemFree(idl);
			return FALSE;
		}
	
		CoTaskMemFree(idl);		
	}

	// Check wheter lParam is My Documents
	CRegKey RegKey;
	if (RegKey.OpenKey(HKCU,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",CRegKey::openExist|CRegKey::samRead)==ERROR_SUCCESS)
	{
		WCHAR temp[MAX_PATH];
		RegKey.QueryValue(L"Personal",temp,MAX_PATH);
		RegKey.CloseKey();

		if	(FileSystem::IsDirectory(temp))
		{
			if (ShellFunctions::GetFileInfo(temp,0,&fi,SHGFI_DISPLAYNAME))
			{
				if (wcscmp(fi.szDisplayName,(LPCWSTR)lParam)==0)
				{
					((LPWSTR)lParam)[0]=L'3';
					((LPWSTR)lParam)[1]=L'\0';
			
					return FALSE;
				}
			}
		}
	}

	((LPWSTR)lParam)[0]='\0';
	return TRUE;
}
BOOL CCpuUsage::EnablePerformaceCounters(BOOL bEnable)
{
	if (m_nPlatform!= WIN2K_XP)
		return TRUE;

	CRegKey regKey;
	if (regKey.OpenKey(HKLM, "SYSTEM\\CurrentControlSet\\Services\\PerfOS\\Performance",CRegKey::defWrite) != ERROR_SUCCESS)
		return FALSE;

	regKey.SetValue("Disable Performance Counters",(DWORD)!bEnable);
	regKey.CloseKey();

	if (regKey.OpenKey(HKLM, "SYSTEM\\CurrentControlSet\\Services\\PerfProc\\Performance",CRegKey::defWrite) != ERROR_SUCCESS)
		return FALSE;

	regKey.SetValue("Disable Performance Counters",(DWORD)!bEnable);
	regKey.CloseKey();

	return TRUE;
}