INTERNET_STATUS_CALLBACK InternetSetStatusCallback( IN HINTERNET hInternet, IN INTERNET_STATUS_CALLBACK InetProc);
引数の意味は以下の通り。
| hInternet | 設定先のインターネットハンドル。 |
| InetProc | 設定するコールバック関数。 |
戻り値は、本関数実行前に設定されていたコールバック関数へのポインタである。関数の実行に失敗した場合、NULLが返される。
void CALLBACK StatusFunc(
IN HINTERNET hInternet,
IN DWORD Context,
IN DWORD Status,
IN LPVOID StatusInfo,
IN DWORD StatusInfoSize)
{
UNREFERENCED_PARAMETER(hInternet);
UNREFERENCED_PARAMETER(Context);
UNREFERENCED_PARAMETER(StatusInfo);
UNREFERENCED_PARAMETER(StatusInfoSize);
switch(Status) {
case INTERNET_STATUS_RESOLVING_NAME:
printf("IPアドレスの取得中.\n");
break;
case INTERNET_STATUS_NAME_RESOLVED:
printf("IPアドレスを取得終了.\n");
break;
case INTERNET_STATUS_CONNECTING_TO_SERVER:
printf("サーバへ接続中.\n");
break;
case INTERNET_STATUS_CONNECTED_TO_SERVER:
printf("サーバへ接続終了.\n");
break;
case INTERNET_STATUS_SENDING_REQUEST:
printf("要求発行中.\n");
break;
case INTERNET_STATUS_REQUEST_SENT:
printf("要求発行終了.\n");
break;
case INTERNET_STATUS_RECEIVING_RESPONSE:
printf("サーバの応答を待機中.\n");
break;
case INTERNET_STATUS_RESPONSE_RECEIVED:
printf("サーバの応答終了.\n");
break;
case INTERNET_STATUS_REDIRECT:
printf("自動リダイレクトによる要求の転送中.\n");
break;
case INTERNET_STATUS_CLOSING_CONNECTION:
printf("サーバから切断中.\n");
break;
case INTERNET_STATUS_CONNECTION_CLOSED:
printf("サーバから切断終了.\n");
break;
case INTERNET_STATUS_HANDLE_CREATED:
printf("新規ハンドルが作成された.\n");
break;
case INTERNET_STATUS_HANDLE_CLOSING:
printf("ハンドルがクローズされた.\n");
break;
case INTERNET_STATUS_REQUEST_COMPLETE:
printf("非同期捜査が終了した.\n");
break;
}
}
void TestStatusFunc()
{
HINTERNET hInternet;
HINTERNET hFile;
char Buf[1000];
DWORD ReadSize;
BOOL bResult;
hInternet = InternetOpen(
"WININET Sample Program",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
if(hInternet == NULL) printf("InternetOpen err(%d)\n", GetLastError());
else printf("InternetOpen succeed.\n");
InternetSetStatusCallback(hInternet, StatusFunc);
hFile = InternetOpenUrl(
hInternet,
"http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/other.html",
NULL,
0,
INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD,
1);
if(hFile == NULL) printf("InternetOpenUrl err(%d).\n", GetLastError());
else printf("InternetOpenUrl succeed.\n");
for(;;) {
ReadSize = 1000;
bResult = InternetReadFile(
hFile,
Buf,
1000,
&ReadSize);
if(!bResult) {
printf("err(%d)\n", GetLastError());
break;
}
if(bResult && (ReadSize == 0)) break;
Buf[ReadSize] = '\0';
printf("%s", Buf);
}
InternetCloseHandle(hFile);
InternetCloseHandle(hInternet);
}