InternetSetStatusCallback インターネットのコールバック関数の設定

Cの宣言:

INTERNET_STATUS_CALLBACK InternetSetStatusCallback(
	IN HINTERNET hInternet,
	IN INTERNET_STATUS_CALLBACK InetProc);

説明:

hInternetで識別されるインターネットの使用時における各種イベントの通知などに使用するコールバック関数を設定する。

引数の意味は以下の通り。
hInternet 設定先のインターネットハンドル。
InetProc 設定するコールバック関数。

戻り値は、本関数実行前に設定されていたコールバック関数へのポインタである。関数の実行に失敗した場合、NULLが返される。

Cのサンプル:

InternetSetStatusCallbackを使用して、接続の経過を逐次表示する。
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);
}

(original text:1999/04/21 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。