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ドライブには優しくしましょうね。