libatl added.
The work on al_import.exe continues. Aesthetic modifications
This commit is contained in:
114
atl.vcxproj
Normal file
114
atl.vcxproj
Normal file
@@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectName>libatl</ProjectName>
|
||||
<ProjectGuid>{5A4EADF2-3237-457A-9DA8-BB9942A91019}</ProjectGuid>
|
||||
<RootNamespace>libatl</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\include\common.props" />
|
||||
<Import Project="..\..\include\Win32.props" />
|
||||
<Import Project="..\..\include\Release.props" />
|
||||
<Import Project="..\include\lib.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\include\common.props" />
|
||||
<Import Project="..\..\include\Win32.props" />
|
||||
<Import Project="..\..\include\Debug.props" />
|
||||
<Import Project="..\include\lib.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\include\common.props" />
|
||||
<Import Project="..\..\include\x64.props" />
|
||||
<Import Project="..\..\include\Release.props" />
|
||||
<Import Project="..\include\lib.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\include\common.props" />
|
||||
<Import Project="..\..\include\x64.props" />
|
||||
<Import Project="..\..\include\debug.props" />
|
||||
<Import Project="..\include\lib.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="atlcrypt.h" />
|
||||
<ClInclude Include="atlmsi.h" />
|
||||
<ClInclude Include="atlwin.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
32
atl.vcxproj.filters
Normal file
32
atl.vcxproj.filters
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="atlwin.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="atlmsi.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="atlcrypt.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
51
atlcrypt.h
Normal file
51
atlcrypt.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
Copyright 1991-2015 Amebis
|
||||
|
||||
This file is part of libatl.
|
||||
|
||||
Setup is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Setup is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Setup. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <atlstr.h>
|
||||
#include <WinCrypt.h>
|
||||
|
||||
|
||||
inline DWORD CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, ATL::CAtlStringA &sNameString)
|
||||
{
|
||||
// Query the final string length first.
|
||||
DWORD dwSize = ::CertGetNameStringA(pCertContext, dwType, dwFlags, pvTypePara, NULL, 0);
|
||||
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPSTR szBuffer = sNameString.GetBuffer(dwSize);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
dwSize = ::CertGetNameStringA(pCertContext, dwType, dwFlags, pvTypePara, szBuffer, dwSize);
|
||||
sNameString.ReleaseBuffer(dwSize);
|
||||
return dwSize;
|
||||
}
|
||||
|
||||
|
||||
inline DWORD CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, ATL::CAtlStringW &sNameString)
|
||||
{
|
||||
// Query the final string length first.
|
||||
DWORD dwSize = ::CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara, NULL, 0);
|
||||
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPWSTR szBuffer = sNameString.GetBuffer(dwSize);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
dwSize = ::CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara, szBuffer, dwSize);
|
||||
sNameString.ReleaseBuffer(dwSize);
|
||||
return dwSize;
|
||||
}
|
241
atlmsi.h
Normal file
241
atlmsi.h
Normal file
@@ -0,0 +1,241 @@
|
||||
/*
|
||||
Copyright 1991-2015 Amebis
|
||||
|
||||
This file is part of libatl.
|
||||
|
||||
Setup is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Setup is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Setup. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <atlcoll.h>
|
||||
#include <atlstr.h>
|
||||
#include <MsiQuery.h>
|
||||
|
||||
|
||||
inline UINT MsiGetPropertyA(MSIHANDLE hInstall, LPCSTR szName, ATL::CAtlStringA &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the actual string length first.
|
||||
uiResult = ::MsiGetPropertyA(hInstall, szName, "", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to read the string data into and read it.
|
||||
LPSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiGetPropertyA(hInstall, szName, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The string in database is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiGetPropertyW(MSIHANDLE hInstall, LPCWSTR szName, ATL::CAtlStringW &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the actual string length first.
|
||||
uiResult = ::MsiGetPropertyW(hInstall, szName, L"", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to read the string data into and read it.
|
||||
LPWSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiGetPropertyW(hInstall, szName, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The string in database is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiRecordGetStringA(MSIHANDLE hRecord, unsigned int iField, ATL::CAtlStringA &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the actual string length first.
|
||||
uiResult = ::MsiRecordGetStringA(hRecord, iField, "", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to read the string data into and read it.
|
||||
LPSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiRecordGetStringA(hRecord, iField, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The string in database is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiRecordGetStringW(MSIHANDLE hRecord, unsigned int iField, ATL::CAtlStringW &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the actual string length first.
|
||||
uiResult = ::MsiRecordGetStringW(hRecord, iField, L"", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to read the string data into and read it.
|
||||
LPWSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiRecordGetStringW(hRecord, iField, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The string in database is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiFormatRecordA(MSIHANDLE hInstall, MSIHANDLE hRecord, ATL::CAtlStringA &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the final string length first.
|
||||
uiResult = ::MsiFormatRecordA(hInstall, hRecord, "", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiFormatRecordA(hInstall, hRecord, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The result is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiFormatRecordW(MSIHANDLE hInstall, MSIHANDLE hRecord, ATL::CAtlStringW &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the final string length first.
|
||||
uiResult = ::MsiFormatRecordW(hInstall, hRecord, L"", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPWSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiFormatRecordW(hInstall, hRecord, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The result is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiRecordReadStream(MSIHANDLE hRecord, unsigned int iField, ATL::CAtlArray<BYTE> &binData)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the actual data length first.
|
||||
uiResult = ::MsiRecordReadStream(hRecord, iField, NULL, &dwSize);
|
||||
if (uiResult == NO_ERROR) {
|
||||
if (!binData.SetCount(dwSize)) return ERROR_OUTOFMEMORY;
|
||||
return ::MsiRecordReadStream(hRecord, iField, (char*)binData.GetData(), &dwSize);
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiGetTargetPathA(MSIHANDLE hInstall, LPCSTR szFolder, ATL::CAtlStringA &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the final string length first.
|
||||
uiResult = ::MsiGetTargetPathA(hInstall, szFolder, "", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiGetTargetPathA(hInstall, szFolder, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The result is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline UINT MsiGetTargetPathW(MSIHANDLE hInstall, LPCWSTR szFolder, ATL::CAtlStringW &sValue)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
UINT uiResult;
|
||||
|
||||
// Query the final string length first.
|
||||
uiResult = ::MsiGetTargetPathW(hInstall, szFolder, L"", &dwSize);
|
||||
if (uiResult == ERROR_MORE_DATA) {
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPWSTR szBuffer = sValue.GetBuffer(dwSize++);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
uiResult = ::MsiGetTargetPathW(hInstall, szFolder, szBuffer, &dwSize);
|
||||
sValue.ReleaseBuffer(uiResult == NO_ERROR ? dwSize : 0);
|
||||
return uiResult;
|
||||
} else if (uiResult == NO_ERROR) {
|
||||
// The result is empty.
|
||||
sValue.Empty();
|
||||
return NO_ERROR;
|
||||
} else {
|
||||
// Return error code.
|
||||
return uiResult;
|
||||
}
|
||||
}
|
65
atlwin.h
Normal file
65
atlwin.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
Copyright 1991-2015 Amebis
|
||||
|
||||
This file is part of libatl.
|
||||
|
||||
Setup is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Setup is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Setup. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <atlstr.h>
|
||||
#include <Windows.h>
|
||||
|
||||
|
||||
inline int GetWindowTextA(__in HWND hWnd, __out ATL::CAtlStringA &sValue)
|
||||
{
|
||||
int iResult;
|
||||
|
||||
// Query the final string length first.
|
||||
iResult = ::GetWindowTextLengthA(hWnd);
|
||||
if (iResult > 0) {
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPSTR szBuffer = sValue.GetBuffer(iResult++);
|
||||
if (!szBuffer) return 0;
|
||||
iResult = ::GetWindowTextA(hWnd, szBuffer, iResult);
|
||||
sValue.ReleaseBuffer(iResult);
|
||||
return iResult;
|
||||
} else {
|
||||
// The result is empty.
|
||||
sValue.Empty();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline int GetWindowTextW(__in HWND hWnd, __out ATL::CAtlStringW &sValue)
|
||||
{
|
||||
int iResult;
|
||||
|
||||
// Query the final string length first.
|
||||
iResult = ::GetWindowTextLengthW(hWnd);
|
||||
if (iResult > 0) {
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPWSTR szBuffer = sValue.GetBuffer(iResult++);
|
||||
if (!szBuffer) return 0;
|
||||
iResult = ::GetWindowTextW(hWnd, szBuffer, iResult);
|
||||
sValue.ReleaseBuffer(iResult);
|
||||
return iResult;
|
||||
} else {
|
||||
// The result is empty.
|
||||
sValue.Empty();
|
||||
return 0;
|
||||
}
|
||||
}
|
20
stdafx.cpp
Normal file
20
stdafx.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Copyright 1991-2015 Amebis
|
||||
|
||||
This file is part of libatl.
|
||||
|
||||
Setup is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Setup is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Setup. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
25
stdafx.h
Normal file
25
stdafx.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
Copyright 1991-2015 Amebis
|
||||
|
||||
This file is part of libatl.
|
||||
|
||||
Setup is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Setup is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Setup. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "atlwin.h"
|
||||
|
||||
#include "atlcrypt.h"
|
||||
#include "atlmsi.h"
|
Reference in New Issue
Block a user