CDドライブ?ああ通知に使うよね。

そうか、それならこうしよう。

#include <iostream>
#include <windows.h>
#include <shlwapi.h>

#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "shlwapi.lib")

using namespace std;

int main(int, char *argv[])
{
	PathRemoveFileSpec(argv[0]);

	bool stat = true;
	MCI_OPEN_PARMS parm;
	parm.lpstrDeviceType="cdaudio";
	mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE, reinterpret_cast<DWORD_PTR>(&parm));

	HANDLE hFind = FindFirstChangeNotification(argv[0], TRUE, FILE_NOTIFY_CHANGE_LAST_WRITE);
	if(hFind == INVALID_HANDLE_VALUE) cout << "Can't open ChangeNotification Handle!!" << endl;
	else{
		do{
			if(WaitForSingleObject(hFind, 0) != WAIT_TIMEOUT) continue; //連続イベントのスキップ
			WaitForSingleObject(hFind, INFINITE);
			mciSendCommand(parm.wDeviceID, MCI_SET, stat ? MCI_SET_DOOR_OPEN : MCI_SET_DOOR_CLOSED, NULL);
			cout << (stat ? "open" : "close") << endl;
			stat = !stat;
		}while(FindNextChangeNotification(hFind));
	}
	FindCloseChangeNotification(hFind);
	return 0;
}

カレントディレクトリ以下のファイル変更(更新日時変更)でCDドライブをイジェクト/クローズします。
皆さん、CDドライブには優しくしましょうね。