求调用windows自带的iphlpapi.dll的DisableMediaSense函数来关闭媒体感知功能的代码。代码已经写出,不过始终调用失败
XP环境下测试的 不过不知道为什么 始终调用失败。 请高手帮忙看看
不知道win7下是否也支持
Function DisableMediaSense(HANDLE:Pointer;POVERLAPPED:Pointer):DWORD; stdcall;External 'iphlpapi.dll';
procedure TForm1.CB_NOClick(Sender: TObject);
var
aOverlapped: TOverlapped;
DriverHandle: THandle;
dwRetVal:DWORD;
begin
DriverHandle:= 0;
FillChar(aOverlapped,sizeof(Overlapped),0);
aOverlapped.hEvent:= CreateEvent(0, FALSE, FALSE, 0);
dwRetVal:= DisableMediaSense(@DriverHandle,@aOverlapped);
NO_ERROR
If dwRetVal<>ERROR_INVALID_PARAMETER Then Begin
showmessage('调用失败');
End Else Begin
showmessage('调用成功');
End;
{
ERROR_NOT_SUPPORTED
ERROR_OPEN_FAILED
ERROR_INVALID_PARAMETER
NO_ERROR
}
end; windows xp
[解决办法]
1)句柄为0,程序如何操作?
2)如果是清空结果体,直接用ZeroMemory()。
3)另外程序返回的是DWORD(C++) 则 Delphi 为 LongInt,参考 “万一博客”,
4)可以检测函数的返回值,成功则是 ERROR_IO_PENDING ,失败用 FormatMessage()进行格式化错误。
5)此函数的具体用法,可以参考MSDN。