之前一直用Sscom之类的串口通讯工具,现在自己做了一个,欢迎指正
2016-09-19 16:45
手机现在是我们生活中必不可少的一部分,除了睡觉,没有什么可以让手机离开你的小手手,不是吗?那么,未来有哪些通讯工具可能会替代手机呢?让我来幻想一下吧!
2019-01-15 14:08
./oschina_soft/gitee-starrtc-android.zip
2022-05-26 11:15
QCSuper.zip
2022-04-15 10:18
功能强大的网络通讯工具,支持各类TCP、UDP、HTTP的通讯协议,简单方便,包含历史记忆功能,体积小,服务器调试最合适
2024-09-05 11:51
WWW.tanbao365.com探宝在线客户服务系统欢迎您的光临!来到这里,您会惊奇的发现:探宝在线客服正在为它的合作伙伴进行7*24小时的在线服务。无论您是怎样的访客,您都会清晰的看到,探宝客服正在进行着一种经营,一种为合作伙伴创造利益的经营。因为在这里,您得到的是第一手信息,也许您此刻正在结合这些信息,运筹您的宏图伟业。那就请您登陆我们的网站,我们会以最快的速度,在最短的时间内把您所需要的无限商机送给您
2009-06-02 18:59
sscom3.3丁串口调试工具是很不错的一款串口调试工具,方便蓝牙调试。
2018-04-19 17:38
之前在本板块发过一个关于CSerialPort 求助,最近有坛友询问关于这方面的问题。也是为了给更多人提供帮助,把我目前调试过的东西跟大家分享一下。PS,我也是个上位机菜鸟,希望大家多给建议。http://blog.sina.com.cn/s/blog_6ca5ea9f0101fdv1.html,我是参照这个里面的内容写的。内容很详细,我就不再赘述了。其中要注意:1.将OnComm()函数中的safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量改为 safearray_inp.Attach(variant_inp);如果不改的话,会有内存泄露。2.在一次接收事件结束后,要清缓存。调用 m_MSComm.put_InBufferCount(0);如果需要自动寻找串口号,可添加下面2个函数,也是网上别人写的,我稍微改了一下,自己测过可以用。[C++] 纯文本查看 复制代码int m_nComArray[20];/////查询注册表的串口号,将值存于数组中///本代码参考于mingojiang的获取串口逻辑名代码//void CxDlg::QueryKey(HKEY hKey) { #define MAX_KEY_LENGTH 255#define MAX_VALUE_NAME 16383//TCHAR achKey[MAX_KEY_LENGTH];// buffer for subkey name//DWORD cbName; // size of name string TCHAR achClass[MAX_PATH] = TEXT("");// buffer for class name DWORD cchClassName = MAX_PATH;// size of class string DWORD cSubKeys=0;// number of subkeys DWORD cbMaxSubKey;// longest subkey size DWORD cchMaxClass;// longest class string DWORD cValues;// number of values for key DWORD cchMaxValue; // longest value name DWORD cbMaxValueData; // longest value data DWORD cbSecurityDescriptor; // size of security descriptor FILETIME ftLastWriteTime;// last write time DWORD i, retCode; TCHARachValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; // Get the class name and the value count. retCode = RegQueryInfoKey(hKey,// key handle achClass, // buffer for class name &cchClassName,// size of class string NULL,// reserved &cSubKeys,// number of subkeys &cbMaxSubKey,// longest subkey size &cchMaxClass,// longest class string &cValues, // number of values for this key &cchMaxValue,// longest value name &cbMaxValueData,// longest value data &cbSecurityDescriptor,// security descriptor &ftLastWriteTime); // last write time for (i=0;i 0) {for (i=0, retCode=ERROR_SUCCESS; i 1){int temp;for (x = 0; x < i - 1; x++){for (y = 0; y < i - 1 - x; y++){if(m_nComArray[y] > m_nComArray[y + 1]){temp = m_nComArray[y];m_nComArray[y] = m_nComArray[y + 1];m_nComArray[y + 1] = temp;}}}}i = 0;while(i < MaxSerialPortNum && -1 != m_nComArray){CString szCom; szCom.Format(_T("COM%d"), m_nComArray);m_PortNO.InsertString(i, szCom.GetBuffer(5));++i;Flag = TRUE;}if (Flag)///把第一个发现的串口设为下拉列表的默认值m_PortNO.SetCurSel(0);}由于现在有很多系统没有自带的Mscomm32.ocx的控件,需要注册,我自己写了一个简单的注册(其实就是复制)。RegisterMSComm32.cpp文件[C++] 纯文本查看 复制代码#include "stdafx.h"#include "RegisterMSComm32.h"CRegisterMSComm32::CRegisterMSComm32(void){}CRegisterMSComm32::~CRegisterMSComm32(void){}//注册控件 修改注册表BOOL CRegisterMSComm32::RegisterMSComm32(void){HKEY key;if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_VALUE,KEYROAD_FIRST,0,KEY_ALL_ACCESS,&key))//打开失败 就创建 一级目录是否存在{if (ERROR_SUCCESS != RegCreateKey(HKEY_VALUE,KEYROAD_FIRST,&key))//创建{::RegCloseKey(key);//失败就退出return FALSE;}}if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_VALUE,KEYROAD,0,KEY_ALL_ACCESS,&key)){if (ERROR_SUCCESS != RegCreateKey(HKEY_VALUE,KEYROAD,&key))//创建{::RegCloseKey(key);return FALSE;}}char *szValueName="";//修改默认键值 char *szValueDate=KEYVALUE; UINT cbLen=strlen(szValueDate); if(ERROR_SUCCESS != RegSetValueExA(key,szValueName,0,REG_SZ,(const unsigned char *)szValueDate,cbLen)){::RegCloseKey(key);return FALSE;}::RegCloseKey(key);return TRUE;}///目录是否存在的检查:BOOLCRegisterMSComm32::CheckFolderExist(CString const& strPath){//判断是否存在if(!PathFileExists(strPath))return false;//判断是否为目录DWORD attributes = ::GetFileAttributes(strPath);attributes &= FILE_ATTRIBUTE_DIRECTORY;return attributes == FILE_ATTRIBUTE_DIRECTORY;}//复制文件void CRegisterMSComm32::MyCFileCopy(CString const& CopyFromFile,CString const& CopyToFile){//以只读|二进制的方式打开第一个文件CFile hFile;int len;hFile.Open(CopyFromFile,CFile::modeRead|CFile::typeBinary,0);len = int(hFile.GetLength()); //分配缓冲区char *buf;buf = new char[len+1]; hFile.Read(buf,len); //读文件hFile.Close();//--------------------------------------------if(hFile.Open(CopyToFile,CFile::modeRead|CFile::typeBinary,0))//打开成功{hFile.Close(); delete[] buf; //释放缓冲区return;}//只写|二进制|创建的方式打开第二个文件hFile.Open(CopyToFile,CFile::modeWrite|CFile::typeBinary|CFile::modeCreate,0); hFile.Write(buf,len); //写文件hFile.Close();delete[] buf; //释放缓冲区}void CRegisterMSComm32::CallCmd(void) //调用cmd.exe{//ShellExecute(NULL,"open","C:\\Windows\\System32\\cmd.exe","regsvr32 mscomm32.ocx",NULL,SW_MAXIMIZE);ShellExecute(NULL,"open","cmd.exe","C:\\Windows\\System32",NULL,SW_HIDE); /*------------cmd 回显----------*/ SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite;sa.nLength = sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor = NULL;//使用系统默认的安全描述符sa.bInheritHandle = TRUE;//创建的进程继承句柄 if (!CreatePipe(&hRead,&hWrite,&sa,0))//创建匿名管道 {AfxMessageBox("CreatePipe Failed!",MB_OK | MB_ICONWARNING);return; }STARTUPINFO si;PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO);GetStartupInfo(&si);si.hStdError = hWrite;si.hStdOutput = hWrite;//新创建进程的标准输出连在写管道一端 si.wShowWindow = SW_HIDE;//隐藏窗口si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; char cmdline[200];CString tmp,stredit2; //GetDlgItemText(IDC_EDIT_CMD,stredit2);//获取编辑框中输入的命令行 tmp.Format("cmd /C %s","regsvr32 mscomm32.ocx");//注册控件 sprintf_s(cmdline,"%s",tmp); if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))//创建子进程 {AfxMessageBox("CreateProcess Failed!",MB_OK | MB_ICONWARNING);return; } CloseHandle(hWrite);//关闭管道句柄char buffer[4096] = {0}; CString strOutput; DWORD bytesRead;while (true){if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)//读取管道break;//strOutput += buffer;//SetDlgItemText(IDC_EDIT_OUTPUT,strOutput);//显示输出信息到编辑框,并刷新窗口//UpdateWindow();Sleep(100); } CloseHandle(hRead); system("taskkill -f -im cmd.exe");//关闭cmd.exe}void CRegisterMSComm32::RegAx(CWnd * cwnd)//注册{CString strRoad,strSysRoad;TCHAR szFilePath[MAX_PATH + 1]; GetModuleFileName(NULL, szFilePath, MAX_PATH);//获得exe执行文件所在路径(_tcsrchr(szFilePath, _T('\\')))[1] = 0;strRoad = szFilePath;strRoad = strRoad + "mscomm32.ocx";if(CheckFolderExist(SYSTEM_64BIT_ROAD))//检测是否是64位系统(sysWOW64文件夹是否存在){strSysRoad = SYSTEM_64BIT_ROAD;strSysRoad += AX_NAME;MyCFileCopy(strRoad,strSysRoad);}strSysRoad = SYSTEM_32BIT_ROAD;strSysRoad += AX_NAME;MyCFileCopy(strRoad,strSysRoad);if(RegisterMSComm32())//注册控件成功{CallCmd();AfxMessageBox("请点确定关闭,再重新打开软件。");cwnd->PostMessage(WM_CLOSE,0,0);//关闭窗口}else{AfxMessageBox("控件注册失败,请手动操作。");cwnd->PostMessage(WM_CLOSE,0,0);//关闭窗口}}RegisterMSComm32.h文件[C++] 纯文本查看 复制代码#pragma once#define HKEY_VALUEHKEY_CLASSES_ROOT#define KEYROAD_FIRST"Licenses"//第一层路径#define KEYROAD"Licenses\\4250E830-6AC2-11cf-8ADB-00AA00C00905"//全路径#define KEYVALUE"kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"//键值#define AX_NAME"\\mscomm32.ocx"//AX控件名称#define SYSTEM_32BIT_ROAD"C:\\Windows\\System32"//32位操作系统路径#define SYSTEM_64BIT_ROAD"C:\\Windows\\sysWOW64"//64位操作系统路径class CRegisterMSComm32{public:CRegisterMSComm32(void);~CRegisterMSComm32(void);void MyCFileCopy(CString const& CopyFromFile,CString const& CopyToFile);BOOLCheckFolderExist(CString const& strPath);BOOL RegisterMSComm32(void);void CallCmd(void);void RegAx(CWnd * cwnd);};由于是公司的项目,我就不上传工程文件了。抱歉。希望能对大家有帮助。
2019-09-11 04:37
1月24日消息,根据达成的交易,IBM公司Lotus Sametime即时通讯服务的用户将能够与AOL、雅虎的即时通讯用户“交谈”。
2006-03-07 20:47
TC1034产品简介—TC1034由TSMaster软件操作,可实现多个TC1034并行应用,或是与其它同星FlexRay产品联合工作。当与同星公司的CAN、LIN、汽车以太网接工具配合的时候
2022-12-12 18:05 上海同星智能科技有限公司 企业号