Pregunta

Quiero implementar una barra de progreso en mi aplicación de Windows C ++ al descargar un archivo usando WinHTTP. ¿Alguna idea de cómo hacer esto? Parece que WinHttpSetStatusCallback es lo que quiero usar, pero no veo qué notificación debo buscar ... o cómo obtener el " porcentaje descargado " ...

¡Ayuda!

¡Gracias!

¿Fue útil?

Solución

Por los documentos :

WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE

  

Los datos están disponibles para ser recuperados con   WinHttpReadData. los   Puntos de parámetro lpvStatusInformation   a un DWORD que contiene el número de   bytes de datos disponibles. los   Parámetro dwStatusInformationLength   en sí es 4 (el tamaño de un DWORD).

y

WINHTTP_CALLBACK_STATUS_READ_COMPLETE

  

Los datos se leyeron correctamente desde el   servidor. El lpvStatusInformation   parámetro contiene un puntero a la   búfer especificado en la llamada a   WinHttpReadData. los   Parámetro dwStatusInformationLength   contiene el número de bytes leídos.

Puede haber otras notificaciones relevantes, pero estas dos parecen ser las claves. Obtención de " porcentaje " no es necesariamente trivial porque es posible que no sepa cuántos datos está obteniendo (no todas las descargas tienen un conjunto de longitud de contenido ...); puede obtener los encabezados con:

WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE

  

Se ha recibido el encabezado de respuesta   y está disponible con   WinHttpQueryHeaders. los   El parámetro lpvStatusInformation es   NULL.

y si Content-Length está disponible, el porcentaje puede calcularse haciendo un seguimiento del número total de bytes en cada " datos disponibles " notificación, de lo contrario, tu conjetura es tan buena como la mía ;-).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top