Skip to content

Commit

Permalink
1、添加设置存档功能
Browse files Browse the repository at this point in the history
  • Loading branch information
Techince committed Nov 24, 2023
1 parent 2464630 commit 94216a9
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 15 deletions.
35 changes: 21 additions & 14 deletions WeaselTSF/CompartmentTSF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,35 +240,39 @@ HRESULT WeaselTSF::_InitGlobalCompartment()
if (SUCCEEDED(ret))
{
VARIANT var{};
var.vt = VT_I4;
ret = _pGlobalCompartment->GetValue(&var);

if (SUCCEEDED(ret))
if (unsigned char value{}; SUCCEEDED(ret))
{
if (var.vt == VT_I4)
{
if ((var.lVal & 0xFF00) != 0xFC00)
if ((var.ulVal & 0xFF00'0000) != 0xFC00'0000)
{
var.lVal = 0xFC03;
if (!ReadConfiguration())
WriteConfiguration();
var.ulVal = m_globalCompartment;
ret = _pGlobalCompartment->SetValue(_tfClientId, &var);
SetBit(WeaselFlag::DAEMON_ENABLE);
SetBit(WeaselFlag::PRESERVED_KEY_SWITCH);

value = static_cast<unsigned char>(m_globalCompartment);
}
else
{
byte value = var.bVal;
SetBit(WeaselFlag::DAEMON_ENABLE, static_cast<bool>(value & 0x1));
SetBit(WeaselFlag::PRESERVED_KEY_SWITCH, static_cast<bool>(value & 0x2));
}
m_globalCompartment = var.ulVal;
value = var.bVal;
}
}
else
{
var.vt = VT_I4;
var.lVal = 0xFC03;
if (!ReadConfiguration())
WriteConfiguration();
var.ulVal = m_globalCompartment;
ret = _pGlobalCompartment->SetValue(_tfClientId, &var);
SetBit(WeaselFlag::DAEMON_ENABLE);
SetBit(WeaselFlag::PRESERVED_KEY_SWITCH);
value = static_cast<unsigned char>(m_globalCompartment);
}

SetBit(WeaselFlag::DAEMON_ENABLE, static_cast<bool>(value & 0x1));
SetBit(WeaselFlag::PRESERVED_KEY_SWITCH, static_cast<bool>(value & 0x2));
}

}
Expand All @@ -285,9 +289,12 @@ void WeaselTSF::UpdateGlobalCompartment(bool in)
var.vt = VT_I4;
byte v1 = GetBit(WeaselFlag::DAEMON_ENABLE) ? 1 : 0;
byte v2 = GetBit(WeaselFlag::PRESERVED_KEY_SWITCH) ? 2 : 0;
var.lVal = 0xFC00 | v1 | v2;
var.ulVal = 0xFC00'0000;
var.ulVal |= v1 | v2;
m_globalCompartment = var.ulVal;

_pGlobalCompartment->SetValue(_tfClientId, &var);
WriteConfiguration();
}
else if (SUCCEEDED(_pGlobalCompartment->GetValue(&var)))
{
Expand Down
41 changes: 41 additions & 0 deletions WeaselTSF/Configuration.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
module;
#include "stdafx.h"
module WeaselTSF;

std::wstring subKey{ LR"(Software\Rime\Weasel)" };
std::wstring valueName{ L"GlobalCompartment" };

bool WeaselTSF::ReadConfiguration()
{
HKEY hKey;
auto ret = ::RegOpenKeyEx(HKEY_CURRENT_USER, subKey.data(), 0, KEY_READ | KEY_WOW64_64KEY, &hKey);

if (ret != ERROR_SUCCESS)
return false;

DWORD dataSize = sizeof(DWORD);
ret = ::RegQueryValueEx(hKey, valueName.data(), nullptr, nullptr, (LPBYTE)&m_globalCompartment, &dataSize);
RegCloseKey(hKey);

if (ret != ERROR_SUCCESS)
return false;

return true;
}

bool WeaselTSF::WriteConfiguration()
{
HKEY hKey;
auto ret = ::RegOpenKeyEx(HKEY_CURRENT_USER, subKey.data(), 0, KEY_WRITE | KEY_WOW64_64KEY, &hKey);

if (ret != ERROR_SUCCESS)
return false;

ret = ::RegSetValueEx(hKey, valueName.data(), 0, REG_DWORD, (LPBYTE)&m_globalCompartment, sizeof(DWORD));
RegCloseKey(hKey);

if (ret != ERROR_SUCCESS)
return false;

return true;
}
6 changes: 6 additions & 0 deletions WeaselTSF/WeaselTSF.ixx
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ export
void UpdateGlobalCompartment(bool in = true);
void SetHWND(HWND hwnd) { m_hwnd = hwnd; }

bool ReadConfiguration();
bool WriteConfiguration();

private:
// ui callback functions
void _SelectCandidateOnCurrentPage(const int index);
Expand Down Expand Up @@ -247,6 +250,9 @@ export
std::wstring _schema_id{};
unsigned _keycode{};
unsigned short _lastKey{};

DWORD m_globalCompartment{ 0xFC00'0003 };

TF_PRESERVEDKEY _preservedKeyGameMode; // Ctrl+Shift+G
TF_PRESERVEDKEY _preservedKeyCaretFollowing; // Ctrl+Shift+F
TF_PRESERVEDKEY _preservedKeyDaemon; // Ctrl+Shift+D
Expand Down
3 changes: 2 additions & 1 deletion WeaselTSF/WeaselTSF.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,7 @@
<ClCompile Include="CompartmentTSF.cpp" />
<ClCompile Include="Composition.ixx" />
<ClCompile Include="CompositionTSF.cpp" />
<ClCompile Include="Configuration.cpp" />
<ClCompile Include="DisplayAttribute.cpp" />
<ClCompile Include="DisplayAttributeInfo.cpp" />
<ClCompile Include="DisplayAttributeInfo.ixx" />
Expand Down Expand Up @@ -496,4 +497,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
3 changes: 3 additions & 0 deletions WeaselTSF/WeaselTSF.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@
<ClCompile Include="CleanupContextDurationSink.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Configuration.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
Expand Down

0 comments on commit 94216a9

Please sign in to comment.