Indicação de progresso com o download do arquivo HTTP usando o winehttp
-
05-07-2019 - |
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!
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 ;-).