Por que o Win32 OleGetClipboard () função de retorno CLIPBRD_E_CANT_OPEN?
Pergunta
Em que circunstâncias será a função da API Win32 OleGetClipboard () falhar e retornar CLIPBRD_E_CANT_OPEN
?
Mais fundo: Estou ajudando com uma correção de bug do Firefox. Detalhes aqui:
No teste automatizado que ajudei a escrever, vemos que OleGetClipboard () às vezes falha e retorna CLIPBRD_E_CANT_OPEN
. Isso é inesperado, eo código do Firefox para dados de imagem Retire a área de transferência do Windows depende de que a chamada seguinte.
Solução
A documentação diz que OleGetClipboard
pode falhar com este código de erro se OpenClipboard
falhar. Por sua vez, se você ler que a documentação, ele diz:
" OpenClipboard falha se outra janela tem a área de transferência aberta."
É um recurso exclusivo: apenas uma janela pode ter a área de transferência aberta de cada vez. Basicamente, se você não pode fazê-lo, esperar um pouco e tente novamente.
Outras dicas
é seu teste de corrida ao longo do Terminal Services? Consulte ao definir a área de transferência do .NET .
Pelo que vejo no MSDN parece implicar que se origina o problema com quem tentou realmente colocar os dados em área de transferência, i, .e. a fonte dos dados. Se a sua chamada para OleSetClipboard () falhou, por qualquer razão, então você não vai ser capaz de extrair material para fora. Gostaria de dar uma olhada em como os dados está sendo colocado na área de transferência, e ver se há um caso de teste que executa essa (copiar os dados para a área de transferência) e, em seguida, faz com que o problema que você está falando.