📄 ipsettingsandbacklight.txt
字号:
#include <ceddk.h>
#define DD_NDIS_DEVICE_NAME TEXT("NDS0:")
#define WINCE_IOCTL_START 8
#define METHOD_OUT_DIRECT 2
#define IOCTL_NDIS_REBIND_ADAPTER (((0x17) << 16) | ((0) << 14) | ((WINCE_IOCTL_START+3) << 2) | (METHOD_OUT_DIRECT))
#define IOCTL_NDIS_GET_ADAPTER_NAMES (((0x17) << 16) | ((0) << 14) | ((WINCE_IOCTL_START+6) << 2) | (METHOD_OUT_DIRECT))
BOOL DoNdisIOControl(DWORD dwCommand, LPVOID pInBuffer,
DWORD cbInBuffer, LPVOID pOutBuffer,
DWORD * pcbOutBuffer);
BOOL DoNdisIOControl(DWORD dwCommand, LPVOID pInBuffer,
DWORD cbInBuffer, LPVOID pOutBuffer,
DWORD * pcbOutBuffer)
{
HANDLE hNdis;
BOOL fResult = FALSE;
hNdis = ::CreateFile(DD_NDIS_DEVICE_NAME, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
0, NULL);
if (INVALID_HANDLE_VALUE != hNdis)
{
fResult = ::DeviceIoControl(hNdis, dwCommand, pInBuffer, cbInBuffer,
pOutBuffer, (pcbOutBuffer ? *pcbOutBuffer : 0),
pcbOutBuffer, NULL);
::CloseHandle(hNdis);
}
return fResult;
}
//字符的格式为192.168.0.1
BOOL SvrSetIP( CString strIpAddress, CString strIpMask )
{
TCHAR szAdapterNames[512];
memset(szAdapterNames,0,sizeof(TCHAR) * 512);
DWORD cbAdapterNames = sizeof(szAdapterNames);
CString strAdapterName;
if (DoNdisIOControl(IOCTL_NDIS_GET_ADAPTER_NAMES, NULL, 0,
&szAdapterNames, &cbAdapterNames))
{
strAdapterName = szAdapterNames;
}
else
{
//无法获得名字
return FALSE;
}
HKEY hKey = NULL;
TCHAR szMetricRegistryPath[MAX_PATH];
::_stprintf(szMetricRegistryPath, _T("Comm\\%s\\Parms\\TCPIP"), strAdapterName);
if (ERROR_SUCCESS == ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, szMetricRegistryPath,
NULL, NULL, 0, KEY_WRITE, NULL, &hKey, NULL))
{
TCHAR multiSz[256];
memset(multiSz,0,256* sizeof(TCHAR));
::_tcscpy(multiSz, (LPCTSTR)strIpAddress);
multiSz[::_tcslen(multiSz)+1] = _T('\0'); // Multi sz needs an extra null
::RegSetValueEx(hKey,
_T("IPAddress"),
NULL,
REG_MULTI_SZ,
(BYTE*)multiSz,
(_tcslen(multiSz)+2) * sizeof(TCHAR));
memset(multiSz,0,256* sizeof(TCHAR));
::_tcscpy(multiSz, (LPCTSTR)strIpMask);
multiSz[::_tcslen(multiSz)+1] = _T('\0'); // Multi sz needs an extra null
::RegSetValueEx(hKey,
_T("Subnetmask"),
NULL,
REG_MULTI_SZ,
(BYTE*)multiSz,
(_tcslen(multiSz)+2) * sizeof(TCHAR));
::RegCloseKey(hKey);
}
TCHAR multiSz[256];
memset(multiSz,0,256* sizeof(TCHAR));
::_tcscpy(multiSz, (LPCTSTR)strAdapterName);
multiSz[::_tcslen(multiSz)+1] = _T('\0'); // Multi sz needs an extra null
DoNdisIOControl(IOCTL_NDIS_REBIND_ADAPTER, multiSz,
(_tcslen(multiSz)+2) * sizeof(TCHAR),NULL, NULL);
RegFlushKey( HKEY_LOCAL_MACHINE);
return TRUE;
}
//设置背光
//backlight
#define GPGCON 0x56000060
#define GPGDAT 0x56000064
//读写I/O口的函数
void WritePort(DWORD Addr,USHORT value)
{
PUSHORT iPort;
PHYSICAL_ADDRESS ty;
ty.LowPart=Addr;
ty.HighPart=0;
iPort=(PUSHORT)MmMapIoSpace(ty,1,FALSE);
WRITE_PORT_USHORT((PUSHORT)(iPort), value);
MmUnmapIoSpace(iPort,1);
}
USHORT ReadPort(DWORD Addr)
{
USHORT nData;
PUSHORT iPort;
PHYSICAL_ADDRESS ty;
ty.LowPart=Addr;
ty.HighPart=0;
iPort=(PUSHORT)MmMapIoSpace(ty,1,FALSE);
nData =READ_PORT_USHORT((PUSHORT)iPort);
MmUnmapIoSpace(iPort,1);
return nData;
}
//开背光
void BacklightOn()
{
USHORT value = ReadPort(GPGDAT);
value &= ~(1 << 4); //backlight on
WritePort (GPGDAT,value);
}
//关背光
void BacklightOff()
{
USHORT value = ReadPort(GPGDAT);
value |= ( 1 << 4); //backlight off
WritePort (GPGDAT,value);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -