我用的是2003 .net,

解决方案 »

  1.   

    大哥们,有没有API的呀,我想实现时时检控,也就是说仪器一有数据传过来,软件自动能收到,网上有些API的但实现不了时时检控,请大哥们帮忙,不胜感激!!!!!!!!!
      

  2.   

    MSComm收到数会自己触发事件的,就是你所谓的“自动能收到”
      

  3.   

      第一步:将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中。要注意的是,MSComm控件是要授权的,所以必须将其使用“执照” Licence 在注册表中登记注册,下一步就是注册方法。至于为什么要这样做,可以看看下面的网页:http://support.microsoft.com/support/kb/articles/q151/7/71.asp      第二步:用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”->"运行",再在中填入(假设操作安装在C盘,WIN2000): Regsvr32 C:\winnt\system32\Mscomm32.ocx    第三步:在注册表中手工新建一个主键项:先在点击“开始”->"运行",再在中填入regedit命令打开注册表,找到HKEY_CLASSES_ROOT\Licenses,在其中添加主键 
    4250E830-6AC2-11cf-8ADB-00AA00C00905 并将内容设置为:        kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun    (注:这项内容也可以用记事本程序打开Mscomm.srg文件看到) 这是手工注册的过程,非常繁琐。我得程序也是按照这个顺序执行的。 源代码: // 
    #i nclude 
    #i nclude 
    #i nclude void CPFile(char file); 
    void regsted(); 
    void regOCX(); void CPFile(char file[],char tarpath[]) //将三个文件拷贝到系统目录 

    char tempsys[100]; 
    char *r; 
    char *t; r=tarpath; 
    t=tempsys; 
    strcpy(t,r); char path[256]; 
    char *p; 
    char *q; 
    GetModuleFileName(GetModuleHandle(NULL),path,sizeof(path)); p = path; 
    while(strchr(p,'\\')) 

    p = strchr(p,'\\'); 
    p++; 

    *p = '\0'; 
    p=strchr(path,'\0'); 
    q=file; 
    strcpy(p,q); p=strchr(tempsys,'\0'); 
    *p = '\\'; 
    p++; 
    q=file; 
    strcpy(p,q); CopyFile(path,tempsys,FALSE); } void regsted() //将相关信息写入注册表 

    HKEY hKey; 
    DWORD dwDip; 
    LPBYTE owner_Get=new BYTE[80]; 
    DWORD type_1=REG_SZ; 
    DWORD cbData_1=80; 
    long exist=RegQueryValueEx(HKEY_CLASSES_ROOT, "Licenses\\4250E830-6AC2-11cf-8ADB-00AA00C00905", NULL, &type_1, owner_Get, &cbData_1); if(exist!=ERROR_SUCCESS) 

    long ret = RegCreateKeyEx(HKEY_CLASSES_ROOT,"Licenses\\4250E830-6AC2-11cf-8ADB-00AA00C00905",0l,NULL,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDip); 
    DWORD leng=37; char key[37]="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"; 
    LPBYTE lpb=new BYTE(37); 
    for(int i=0;i<37;i++) 
    lpb[i]=key[i]; 
    long ret2 = RegSetValueEx(hKey,NULL,NULL,REG_SZ,lpb,leng); } 

    void regOCX()//调用新进程注册组件 
    { char commandline[256]; 
    char windowsdir[256]; 
    char lastcommandline[257]; PROCESS_INFORMATION pi; 
    STARTUPINFO si = {sizeof(si)}; char OCXfile[50]="\\MSCOMM32.OCX"; 
    char REGfile[50]="\\regsvr32.exe"; 
    char *p,*q; 
    GetSystemDirectory(windowsdir, 256); 
    p=commandline; 
    q=windowsdir; 
    strcpy(p,q); 
    p=strchr(commandline,'\0'); 
    q=OCXfile; 
    strcpy(p,q); p=strchr(windowsdir,'\0'); 
    q=REGfile; 
    strcpy(p,q); 
    p=commandline; 
    q=&lastcommandline[1]; 
    strcpy(q,p); 
    lastcommandline[0]=' '; 
    // 启动regsvr32.exe作为子进程 
    BOOL ret = CreateProcess(windowsdir, lastcommandline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 
    if(ret) 

    CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } } int APIENTRY WinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nCmdShow ) 
    { char sys[100]; char file1[20]="Mscomm32.ocx"; 
    char file2[20]="Mscomm32.dep"; 
    char file3[20]="Mscomm.srg"; GetSystemDirectory(sys,100); CPFile(file1,sys); 
    CPFile(file2,sys); 
    CPFile(file3,sys); regOCX(); regsted(); return 0; 

      

  4.   

    请教大家个问题
    我用MSCOMM 写的关于GSM接收sms
    private void axMSComm1_OnComm(object sender, System.EventArgs e)
    {
    int nEvent=axMSComm1.CommEvent;
    if(nEvent==2)
    k=axMSComm1.InBufferCount;
    if(k>0)
    string strinput=axMSComm1.Input.ToString();
    //这里接收的比如我发送的短信"\r\n+CMT: ,23\r\n0891683108200005F0040D91683117405789F200006020411254840003B3D90C\r\n"
    总是分好几段才触发时间的读,如何保持完整性呢?请教咯}