Witam,
jaka jest komenda na wysuwanie stacji dysków w c++ ? Jakie biblioteki trzeba dodać ? Jest jakaś gotowa funkcja ?
#pragma comment( lib, "winmm.lib" )
#include "stdafx.h"
#include <Windows.h>
#include <mmsystem.h>
int _tmain()
{
MCI_OPEN_PARMS mPar = { 0 };
mPar.lpstrDeviceType = reinterpret_cast<LPCWSTR>(MCI_DEVTYPE_CD_AUDIO);
// Open device
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)&mPar);
// Open tray
mciSendCommand(mPar.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
// Close tray
mciSendCommand(mPar.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
// Close device
mciSendCommand(mPar.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
return 0;
}
Dzięki wielkie ! Niestety wyrzuca mi error : " 1>ConsoleApplication2.obj : error LNK2019: unresolved external symbol __imp__mciSendCommandW@16 referenced in function _wmain
" .
Może spróbuj dodać
#include <tchar.h>
bo jest tam takie coś :)
#define _tWinMain wWinMain
@PR1V4T3_R To jest błąd linkowania, musi dołączyć odpowiednią bibliotekę do procesu budowania, więc żadna zmiana w źródłach nic tu nie zmieni.
Nie koduję pod Windows o dłuższego czasu, więc niestety nie pamiętam o jaką bibliotekę chodzi i jak ją dodać do procesu linkowania.
@MarekR22
I to jest ta właściwa część zagadki - właściwa biblioteka jest załączona w kodzie powyżej za pomocą dyrektywy pragma:
#pragma comment( lib, "winmm.lib" )
Pytanie brzmi, czemu ta dyrektywa nie zadziałała ;)
Nie mam przy sobie platform SDK żeby sprawdzić czy odpowiedni symbol jest w tej bibliotece (w MinGW libwinmm.a jest).
Nie mam również Visual C++ aby sprawdzić czy #pragma nadal działa w najnowszych wersjach (stawiam, że tak; choć nie wiem jakiej wersji kompilatora op używa...).
@TheeDrCc
Z jakiej wersji Visual Studio korzystasz?
Spróbuj czy ten kod zadziała
#include <windows.h>
#include "stdafx.h"
int main()
{
HANDLE hwnd = CreateFileA("\\\\.\\E:", GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if (hwnd != INVALID_HANDLE_VALUE)
{
DWORD cc;
//wysuwa szufladkę
DeviceIoControl(hwnd, IOCTL_STORAGE_EJECT_MEDIA,
NULL, 0, NULL, 0, &cc, NULL);
//wsuwa szufladkę
DeviceIoControl(hwnd, IOCTL_STORAGE_LOAD_MEDIA,
NULL, 0, NULL, 0, &cc, NULL);
//zamyka uchwyt
CloseHandle(hwnd);
}
}