uno::Any PrivateProfileStringListener::getValueEvent()
{ // get the private profile string
OUString sValue; if(maFileName.isEmpty())
{ // get key/value from Windows registry #ifdef _WIN32
HKEY hBaseKey = nullptr;
OString sSubKey;
lcl_getRegKeyInfo( maGroupName, hBaseKey, sSubKey ); if( hBaseKey != nullptr )
{
HKEY hKey = nullptr;
LPCSTR lpSubKey = sSubKey.getStr(); // We use RegOpenKeyExA here for convenience, because we already have subkey name as 8-bit string LONG lResult = RegOpenKeyExA( hBaseKey, lpSubKey, 0, KEY_QUERY_VALUE, &hKey ); if( ERROR_SUCCESS == lResult )
{
OUString sUValName = OStringToOUString(maKey, RTL_TEXTENCODING_DONTKNOW);
LPCWSTR lpValueName = o3tl::toW(sUValName.getStr());
WCHAR szBuffer[1024];
DWORD cbData = sizeof(szBuffer);
lResult = RegQueryValueExW( hKey, lpValueName, nullptr, nullptr, reinterpret_cast<LPBYTE>(szBuffer), &cbData );
RegCloseKey( hKey ); // https://msdn.microsoft.com/en-us/ms724911 mentions that // "the string may not have been stored with the proper terminating null characters"
szBuffer[std::min(size_t(cbData / sizeof(szBuffer[0])), SAL_N_ELEMENTS(szBuffer)-1)] = 0;
sValue = o3tl::toU(szBuffer);
}
} #else throw uno::RuntimeException(u"Only support on Windows"_ustr ); #endif
}
// get key/value from a file
Config aCfg( maFileName );
aCfg.SetGroup( maGroupName );
sValue = OStringToOUString(aCfg.ReadKey(maKey), RTL_TEXTENCODING_DONTKNOW);
return uno::Any( sValue );
}
void PrivateProfileStringListener::setValueEvent( const css::uno::Any& value )
{ // set the private profile string
OUString aValue;
value >>= aValue; if(maFileName.isEmpty())
{ //set value into Windows registry #ifdef _WIN32
HKEY hBaseKey = nullptr;
OString sSubKey;
lcl_getRegKeyInfo( maGroupName, hBaseKey, sSubKey ); if( hBaseKey != nullptr )
{
HKEY hKey = nullptr;
LPCSTR lpSubKey = sSubKey.getStr(); // We use RegCreateKeyExA here for convenience, because we already have subkey name as 8-bit string LONG lResult = RegCreateKeyExA( hBaseKey, lpSubKey, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nullptr, &hKey, nullptr ); if( ERROR_SUCCESS == lResult )
{
DWORD cbData = sizeof(WCHAR) * (aValue.getLength() + 1);
OUString sUValName = OStringToOUString(maKey, RTL_TEXTENCODING_DONTKNOW);
LPCWSTR lpValueName = o3tl::toW(sUValName.getStr());
lResult = RegSetValueExW( hKey, lpValueName, 0/* Reserved */, REG_SZ, reinterpret_cast<BYTE const *>(aValue.getStr()), cbData );
RegCloseKey( hKey );
}
} return; #else throw uno::RuntimeException(u"Not implemented"_ustr ); #endif
}
// set value into a file
Config aCfg( maFileName );
aCfg.SetGroup( maGroupName );
aCfg.WriteKey( maKey, OUStringToOString(aValue, RTL_TEXTENCODING_DONTKNOW) );
switch( nPointerStyle )
{ case PointerStyle::Arrow: return word::WdCursorType::wdCursorNorthwestArrow; case PointerStyle::Null: return word::WdCursorType::wdCursorNormal; case PointerStyle::Wait: return word::WdCursorType::wdCursorWait; case PointerStyle::Text: return word::WdCursorType::wdCursorIBeam; default: return word::WdCursorType::wdCursorNormal;
}
}
void SAL_CALL
SwVbaSystem::setCursor( sal_Int32 _cursor )
{ try
{ switch( _cursor )
{ case word::WdCursorType::wdCursorNorthwestArrow:
{
setCursorHelper( static_cast<SfxBaseModel*>(getCurrentWordDoc(mxContext).get()), PointerStyle::Arrow, false ); break;
} case word::WdCursorType::wdCursorWait:
{ //It will set the edit window, toobar and statusbar's mouse pointer.
setCursorHelper( static_cast<SfxBaseModel*>(getCurrentWordDoc(mxContext).get()), PointerStyle::Wait, true ); break;
} case word::WdCursorType::wdCursorIBeam:
{ //It will set the edit window, toobar and statusbar's mouse pointer.
setCursorHelper( static_cast<SfxBaseModel*>(getCurrentWordDoc( mxContext ).get()), PointerStyle::Text, true ); break;
} case word::WdCursorType::wdCursorNormal:
{
setCursorHelper( static_cast<SfxBaseModel*>(getCurrentWordDoc( mxContext ).get()), PointerStyle::Null, false ); break;
} default: throw uno::RuntimeException(u"Unknown value for Cursor pointer"_ustr ); // TODO: isn't this a flaw in the API? It should be allowed to throw an // IllegalArgumentException, or so
}
} catch( const uno::Exception& )
{
}
}
uno::Any SAL_CALL
SwVbaSystem::PrivateProfileString( const OUString& rFilename, const OUString& rSection, const OUString& rKey )
{ // FIXME: need to detect whether it is a relative file path // we need to detect if this is a URL, if not then assume it's a file path
OUString sFileUrl; if( !rFilename.isEmpty() )
{
INetURLObject aObj;
aObj.SetURL( rFilename ); bool bIsURL = aObj.GetProtocol() != INetProtocol::NotValid; if ( bIsURL )
sFileUrl = rFilename; else
osl::FileBase::getFileURLFromSystemPath( rFilename, sFileUrl);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.