- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在制作一个程序来打开和关闭CD读取器,其中我想过将数据写入CD,问题是问题的基础,它使用“使用Windows'和'使用MMSystem”,但问题是当我同时使用两者时“使用Windows,MMSystem”给出错误并且程序无法编译,我使用的是Delphi 2010,奇怪的是当我只使用 Windows 或 MMSystem 时,它可以正常工作并编译。
我尝试编译时的错误是:“找不到程序”
有问题的代码是这样的:
mciSendString ('Set cdaudio door open wait', nil, 0, handle);
我有两件事要问你,首先是我如何避免使用这两个(Windows和MMSystem)时的错误,另一个问题是他是否可以在不使用MMSystem的情况下打开CD播放器,使用Windows API的骨头,但不能在哪里开始
来源:
编程项目1;
{$APPTYPE CONSOLE}
uses
SysUtils,Windows,MMSystem;
procedure opencd;
begin
mciSendString('Set cdaudio door open wait', nil, 0, 0);
end;
begin
try
Writeln('test');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
图片:
最佳答案
将“mmsystem”与“windows”一起使用应该没有问题。事实上,问题中的屏幕截图中的错误看起来不像编译器错误。相反,IDE 无法找到可执行文件。可能是防病毒软件删除了可执行文件,或者我不知道..
无论如何,您都可以使用 DeviceIoControl
作为备选。这是 an answer 的 Delphi 翻译就这样:
function CtlCode(DeviceType, _Function, Method, Access: Integer): DWORD;
begin
Result := DeviceType shl 16 or Access shl 14 or _Function shl 2 or Method;
end;
procedure ejectDisk(driveLetter: Char);
const
FILE_DEVICE_FILE_SYSTEM = $00000009;
FILE_DEVICE_MASS_STORAGE = $0000002d;
METHOD_BUFFERED = 0;
FILE_ANY_ACCESS = 0;
FILE_READ_ACCESS = $0001;
IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE;
// bogus constants below, rather CTL_CODEs should be pre computed.
FSCTL_LOCK_VOLUME = 6;
FSCTL_DISMOUNT_VOLUME = 8;
IOCTL_STORAGE_EJECT_MEDIA = $0202;
var
tmp: string;
handle: THandle;
BytesReturned: DWORD;
begin
tmp := Format('\\.\%s:', [driveLetter]);
handle := CreateFile(PChar(tmp), GENERIC_READ, FILE_SHARE_WRITE, nil,
OPEN_EXISTING, 0, 0);
DeviceIoControl(handle,
CtlCode(FILE_DEVICE_FILE_SYSTEM, FSCTL_LOCK_VOLUME, METHOD_BUFFERED,
FILE_ANY_ACCESS), nil, 0, nil, 0, BytesReturned, nil);
DeviceIoControl(handle,
CtlCode(FILE_DEVICE_FILE_SYSTEM, FSCTL_DISMOUNT_VOLUME, METHOD_BUFFERED,
FILE_ANY_ACCESS), nil, 0, nil, 0, BytesReturned, nil);
DeviceIoControl(handle,
CtlCode(IOCTL_STORAGE_BASE, IOCTL_STORAGE_EJECT_MEDIA, METHOD_BUFFERED,
FILE_READ_ACCESS), nil, 0, nil, 0, BytesReturned, nil);
CloseHandle(handle);
end;
关于delphi - 在 Delphi 中使用 Windows 和 MMSystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894566/
我无法摆脱这些简单的错误,但如果有人能够解决这些错误,那就太好了。我包含了 windows.h 和一些其他必要的头文件,但无法摆脱它。 错误片段: error C2146: syntax error
我目前正在编写一些 C++ 代码来检测游戏 handle 按钮的按下情况。我正在使用以下代码来定义一组可能的按钮按下操作: #include #include this->buttons[0] =
嗨,我正在制作一个程序来打开和关闭CD读取器,其中我想过将数据写入CD,问题是问题的基础,它使用“使用Windows'和'使用MMSystem”,但问题是当我同时使用两者时“使用Windows,MMS
我正在尝试创建一个设置全局 Hook 的 64 位 dll。正如我所读,它不能用 CLR 完成(我什至尝试过),所以我创建了一个 Win32 项目,我将为 64 位平台构建它。它会这样工作吗? 我的主
我厌倦了在我们的编译过程中不得不查看警告 - 来自 MS 包含文件的警告。 “C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\mmsyste
我是一名优秀的程序员,十分优秀!