2,641
社区成员
发帖
与我相关
我的任务
分享
WinExec("cmd /c devcon findall * | find /i \"serial port\" >d:\\result.txt",SW_HIDE);
//然后读文件d:\result.txt的内容
//这才叫编程序?
[/quote]
// 建立连接
void CCommThread::NetConnect(void)
{
// 1.打开串行通信口,保存串口句柄
hCom=CreateFile(m_sPortParam.com,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 使用重叠方式
NULL);
if(hCom==(HANDLE)INVALID_FILE_SIZE)
{
ErrorProc(ERROR_OPEN); // 报告端口打开失败
return;
}
if(hCom != INVALID_HANDLE_VALUE)
{
// 设置端口
SetupComm(hCom,OUT_BUFF_SIZE,IN_BUFF_SIZE);
DCB myDCB;
GetCommState(hCom, &myDCB);
myDCB.BaudRate=m_sPortParam.baud; // 波特率
myDCB.fBinary=TRUE; // 通信方式=二进制
myDCB.fParity=FALSE; // 奇偶校验 TRUE=使用,FALSE=不使用
myDCB.Parity=m_sPortParam.parity; // 校验方式:0-无 1-奇 2-偶 3-标志 4-空格
myDCB.ByteSize=m_sPortParam.bytesize; // 数据位数
myDCB.StopBits=m_sPortParam.stopbits; // 停止位数:0-1位 1-1.5位 2-2位
if(!SetCommState(hCom, &myDCB))
{
// 设置参数失败
ErrorProc(ERROR_SET);
return;
}
}
else
{
// 设置失败
ErrorProc(ERROR_SET);
return;
}
// 为传送消息,保存本窗口线程ID
dwWinThreadID=this->m_nThreadID;
if(!fEvent) // 事件线程未启动
{
// 2.启动事件线程
DWORD dwParam;
if(!SetCommMask(hCom,EV_RXCHAR | EV_TXEMPTY)) // 设置允许的事件类型
{
// 建立事件掩码失败
ErrorProc(ERROR_MASK);
return;
}
// 创建事件线程
hThreadEvent=::CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadProcEvent, // 指向线程函数的指针
&dwParam, // 传递的参数(未使用)
0, // 创建后立即激活
&dwThreadID); // 新线程的ID(未使用),可用于消息传送
if(hThreadEvent==INVALID_HANDLE_VALUE)
{
// 事件线程创建失败
ErrorProc(ERROR_CREAT);
return;
}
else
fEvent=true; // 创建事件线程成功
}
fEventRun=true; // 允许事件函数执行循环体
ReportUp(CONNECT_OK); // 报告端口打开成功
}
#include <devguid.h>
#include <setupapi.h>
#pragma comment(lib, "Setupapi.lib")
void main()
{
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, 0);
if(hDevInfo)
{
SP_DEVINFO_DATA SpDevInfo={sizeof(SP_DEVINFO_DATA)};
for(DWORD iDevIndex=0; SetupDiEnumDeviceInfo(hDevInfo, iDevIndex, &SpDevInfo); iDevIndex++)
{
TCHAR szName[512] = {0};
if(SetupDiGetDeviceRegistryProperty(hDevInfo, &SpDevInfo, SPDRP_FRIENDLYNAME,
NULL, (PBYTE)szName, sizeof(szName), NULL))
{
_tprintf(_T("%s\n"), szName);
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
}
}