Pergunta

Quero implementar uma barra de progresso no meu aplicativo C ++ Windows ao baixar um arquivo usando o WINHTTP. Alguma idéia de como fazer isso? Parece que o winshttpsetstatuscallback é o que eu quero usar, mas não vejo que notificação procurar ... ou como obter a "porcentagem baixada" ...

Ajuda!

Obrigado!

Foi útil?

Solução

Por os documentos:

WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE

Os dados estão disponíveis para serem recuperados com o Winhttpreaddata. O parâmetro LPVStatusInformation aponta para um DWORD que contém o número de bytes de dados disponíveis. O próprio parâmetro dwstatusInformationLength é 4 (o tamanho de um dword).

e

WINHTTP_CALLBACK_STATUS_READ_COMPLETE

Os dados foram lidos com sucesso no servidor. O parâmetro LPVStatusInformation contém um ponteiro para o buffer especificado na chamada para WINHTTPREADDATA. O parâmetro dwstatusInformationLength contém o número de bytes lidos.

Pode haver outras notificações relevantes, mas esses dois parecem ser os principais. Obter "porcentagem" não é necessariamente trivial, porque você pode não saber quantos dados está recebendo (nem todos os downloads têm conjunto de conteúdo ...); Você pode obter os cabeçalhos com:

WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE

O cabeçalho da resposta foi recebido e está disponível com o WINHTTPQUERYHEADERS. O parâmetro LPVStatusInformation é nulo.

E se o comprimento do conteúdo estiver disponível, a porcentagem poderá ser calculada acompanhando o número total de bytes em cada notificação "dados disponíveis"; caso contrário, seu palpite é tão bom quanto o meu ;-).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top