Re: Определение flash-карты в картридере
От: baxus  
Дата: 13.12.06 08:33
Оценка:
Сам спрашиваю, сам отвечаю

Короче надо зарегистрировать сообщение "QueryCancelAutoPlay"

//...
UINT g_uQueryCancelAutoPlay = ::RegisterWindowMessage(_T("QueryCancelAutoPlay"));
//...


А затем в обработчике проверять. При вставке карточки вы обязательно получите его при условии, что ваше приложение на переднем плане
[msdn]
Microsoft® Windows® sends a "QueryCancelAutoPlay" message to the foreground window
[/msdn]
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // MSDN: "Enabling and Disabling AutoRun"
    if (message && (message == g_uQueryCancelAutoPlay)) { 
        // wParam - опытным путем выянил, что равен № диска в системе по счету, т.е. A=1, C=2,...
        // lParam - всегда = 0x40 пока не выяснил что это означает
        ATLTRACE(_T("message = \"QueryCancelAutoPlay\" (code=%d), wParam=0x%x, lParam=0x%x, drice=%c\n"), g_uQueryCancelAutoPlay, wParam, lParam, FirstDriveFromMask(1 << (ULONG)wParam));

        //SetWindowLong(hDlg, DWL_MSGRESULT, TRUE); // use this line for DlgProc
        return TRUE;       // cancel auto-play
    }

    switch (message) {
        //...
    }

    return 0;
}


Обо всем этом подробнее можно прочитать в MSDN: "Enabling and Disabling AutoRun"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.