Eu pareço ter o mesmo problema e achei chato o suficiente para gastar tempo para depurar e consertar (para mim).
O sintoma é que aparentemente todas as entradas de texto não-simples na área de transferência são ignoradas. Isso pode ser bem verificado abrindo o MS Word e a visualização da área de transferência, pois as entradas contêm pequenos ícones que identificam o formato da entrada.
De acordo com o código, isso não deve ser um problema, uma vez que cada entrada tem vários formatos e sempre texto simples codificado em UTF-16, que é o que o Synergy espera.
Infelizmente, o Synergy tenta enumerar todos os formatos de entrada disponíveis via EnumClipboardFormats, o que também não deve ser problema, mas de alguma forma é. Eu escrevi um programa de teste simples e não havia problema com essa abordagem. Em Synergy EnumClipboardFormats retorna apenas o primeiro formato que é CF_UNICODETEXT para texto sem formatação e algo completamente diferente para todo o resto. Em vez de retornar os outros formatos, como meu programa de teste, no Synergy, a próxima chamada para EnumClipboardFormats retorna o erro 183 (ERROR_ALREADY_EXISTS), o que não faz sentido e não está documentado.
A substituição de CMSWindosClipboard :: get pelo método abaixo corrigiu o problema para mim.
CString
CMSWindowsClipboard::get(EFormat format) const
{
IMSWindowsClipboardConverter* converter = NULL;
for (ConverterList::const_iterator index = m_converters.begin();
index != m_converters.end(); ++index) {
converter = *index;
if (converter->getFormat() == format) {
HANDLE win32Data = GetClipboardData(converter->getWin32Format());
if (win32Data != NULL)
return converter->toIClipboard(win32Data);
}
}
return CString();
}