PPP拨号上网协议 有偿寻求技术支持完整PPP拨号上网Delphi版源代码,其中包括LCP,PAP,CHAP,NCP等完整对话协议。通过PPP拨号上网后能过正常访问网络。有偿寻求技术支持。也可以使用其它语言封装成DLL提供接口调用(DLL文件需提供源代码和编译环境设置)
解决方案 »
- 关于ClientDataSet中对虚拟字段赋值的问题
- 系统MESSAGE类里的const常量WM_USER是什么意思?
- delphi如何執行Debug命令
- 想打印一个字段动态显示的dbgrid的内容,不知道该用什么控件好
- 我在报表中添加了qdrtext后怎么只能显示一条数据啊
- 几个问题合在一起问了。
- 如何在保存时判断如果tdbedit中的值为空则付为0。———在线等待
- 各位Delphi高手,我的分好多,因为是银行系统,请进。。。
- 特急:学DELPHI需要多长时间?
- 问一个极菜的问题:怎么才能删除Form?
- 为什么dxRicheditControl 编辑与打印的格式不一致
- 请教delphi使用控件Chromium如何实现全网页截屏?
#ifndef DeviceControlsH
#define DeviceControlsH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <SetupAPI.h>
//---------------------------------------------------------------------------
#define DN_DISABLEABLE (0x00002000) // Can be rebalanced
#define DN_HAS_PROBLEM (0x00000400) // Need device installer
#define CM_PROB_DISABLED (0x00000016) // devinst is disabled
#define CM_PROB_HARDWARE_DISABLED (0x0000001D) // device disabled
//---------------------------------------------------------------------------
enum TGetDeviceState { gdsError, gdsEnabled, gdsDisabled };
typedef void __fastcall (__closure * TDeviceCallback)(DWORD, String, bool);
//---------------------------------------------------------------------------
class TDeviceControl : public TComponent
{
private:
HINSTANCE FInstance;
int (__stdcall *FCallProgram)(PULONG, PULONG, ULONG, ULONG);
bool __fastcall GetRegistryProperty(HDEVINFO DeviceInfoSet,
PSP_DEVINFO_DATA DeviceInfoData, ULONG Property,
PVOID Buffer, PULONG Length);
TGetDeviceState __fastcall GetDeviceInstState(ULONG DeviceInst);
bool __fastcall IsCannotDisable(ULONG DeviceInst);
public:
void __fastcall EnumDevices(String AProperty, TDeviceCallback ACallback);
bool __fastcall SetDeviceState(DWord ADevice, bool AEnabled);
bool __fastcall GetDeviceState(DWord ADevice);
int __fastcall OSVersion(void);
__fastcall TDeviceControl(TComponent * AOwner);
__fastcall ~TDeviceControl(void);
};
//---------------------------------------------------------------------------
#endifDeviceControls.cpp//---------------------------------------------------------------------------
#pragma hdrstop
#include "DeviceControls.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TDeviceControl::TDeviceControl(TComponent * AOwner) : TComponent(AOwner)
{
FInstance = LoadLibrary("SetupAPI.DLL");
if (FInstance)
(FARPROC) FCallProgram
= GetProcAddress(FInstance,"CM_Get_DevNode_Status");
else FCallProgram = NULL;
}
//---------------------------------------------------------------------------
__fastcall TDeviceControl::~TDeviceControl(void)
{
if (FInstance)
FreeLibrary(FInstance);
}
//---------------------------------------------------------------------------
bool __fastcall TDeviceControl::GetRegistryProperty(HDEVINFO DeviceInfoSet,
PSP_DEVINFO_DATA DeviceInfoData,
ULONG Property, PVOID Buffer, PULONG Length)
{
while (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
DeviceInfoData, Property, NULL, (BYTE *)*(TCHAR **)Buffer, *Length, Length))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (*(LPTSTR *)Buffer) LocalFree(*(LPTSTR *)Buffer);
*(LPTSTR *)Buffer = (PCHAR)LocalAlloc(LPTR,*Length);
}
else return false;
}
return (*(LPTSTR *)Buffer)[0];
}
//---------------------------------------------------------------------------
TGetDeviceState __fastcall TDeviceControl::GetDeviceInstState(ULONG DeviceInst)
{
DWORD Status, Problem;
ULONG dtFlag = 0; if (FCallProgram(&Status, &Problem, DeviceInst,dtFlag) != 0)
return gdsError; if ((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem))
return gdsDisabled;
else return gdsEnabled;
}
//---------------------------------------------------------------------------
bool __fastcall TDeviceControl::IsCannotDisable(ULONG DeviceInst)
{
DWORD Status, Problem;
ULONG dtFlag = 0; if (FCallProgram(&Status, &Problem, DeviceInst, dtFlag) != 0)
return true; return !((Status & DN_DISABLEABLE) && (CM_PROB_HARDWARE_DISABLED != Problem));
}
//---------------------------------------------------------------------------
void __fastcall TDeviceControl::EnumDevices(String AProperty, TDeviceCallback ACallback)
{
LPTSTR Buffer = NULL;
DWORD BufSize = 0;
HDEVINFO hDevInfo; if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)))
return; SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)}; for (DWORD Id = 0; SetupDiEnumDeviceInfo(hDevInfo, Id, &DeviceInfoData); Id++)
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS , &Buffer, (PULONG)&BufSize))
if (SameText(Buffer, AProperty))
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_ENUMERATOR_NAME , &Buffer, (PULONG)&BufSize))
if (!SameText(Buffer, "ROOT"))
{
String ACaption = "<Unknown Device>";
if (GetRegistryProperty(hDevInfo, &DeviceInfoData,
SPDRP_DEVICEDESC , &Buffer, (PULONG)&BufSize))
ACaption = Buffer;
bool AEnabled = GetDeviceInstState(DeviceInfoData.DevInst) == gdsEnabled;
ACallback(Id, ACaption, AEnabled);
}
if (*(LPTSTR *)Buffer) LocalFree(*(LPTSTR *)Buffer);
}
//---------------------------------------------------------------------------
bool __fastcall TDeviceControl::SetDeviceState(DWORD ADevice, bool AEnabled)
{
HDEVINFO hDevInfo; if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)))
return false; SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)}; if (!SetupDiEnumDeviceInfo(hDevInfo,ADevice,&DeviceInfoData))
return false; TGetDeviceState IsEnabled = GetDeviceInstState(DeviceInfoData.DevInst); if (IsEnabled == gdsError) return false; SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL; if (AEnabled)
{
if (IsEnabled == gdsEnabled)
return false; PropChangeParams.StateChange = DICS_ENABLE;
}
else
{
if (IsEnabled == gdsDisabled)
return false; if (IsCannotDisable(DeviceInfoData.DevInst))
return false; PropChangeParams.StateChange = DICS_DISABLE;
} if (SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData,
(SP_CLASSINSTALL_HEADER *)&PropChangeParams, sizeof(PropChangeParams)))
if (SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData))
{
IsEnabled = GetDeviceInstState(DeviceInfoData.DevInst);
if (IsEnabled == AEnabled ? gdsEnabled : gdsDisabled)
return true;
}
return false;
}
//---------------------------------------------------------------------------
bool __fastcall TDeviceControl::GetDeviceState(DWord ADevice)
{
HDEVINFO hDevInfo;
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)))
return gdsError;
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
if (!SetupDiEnumDeviceInfo(hDevInfo,ADevice, &DeviceInfoData))
return gdsError; TGetDeviceState IsEnabled = GetDeviceInstState(DeviceInfoData.DevInst); return IsEnabled == gdsEnabled;
}
//---------------------------------------------------------------------------
int __fastcall TDeviceControl::OSVersion(void)
{
OSVERSIONINFO OSVI;
OSVI.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx( &OSVI );
return OSVI.dwMajorVersion;
}
//---------------------------------------------------------------------------