VISUAL C++软件开发中几个常用功能的实现

原创 2004年08月17日 15:06:00


发表: 2004-08-07 15:23:48 人气:33 楼主  分值:0

[原创]VISUAL C++软件开发中几个常用功能的实现

介绍 
在VCHELP论坛中间,常常见到很多软件开发中提到的最多的基本问题,现在进行列举出来,希望对各位有用。  

正文 
在进行软件开发过程中间,有很多小功能的实现,虽然这些东西你可以不用,但是如果应用仂将会是你的程序更具有专业性。 
一、设置程序自动运行。 
    很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software//Microsoft//Windows//CurrentVersion//Run。参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作) 
         HKEY RegKey; 
         CString sPath; 
         GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); 
         sPath.ReleaseBuffer(); 
         int nPos; 
    nPos=sPath.ReverseFind(’//’); 
    sPath=sPath.Left(nPos); 
    CString lpszFile=sPath+"//****.exe";//这里加上你要查找的执行文件名称 
    CFileFind fFind; 
    BOOL bSuccess; 
    bSuccess=fFind.FindFile(lpszFile); 
    fFind.Close(); 
    if(bSuccess) 
    { 
        CString fullName; 
        fullName=lpszFile; 
        RegKey=NULL; 
        RegOpenKey(HKEY_LOCAL_MACHINE,"Software//Microsoft//Windows//CurrentVersion//Run",&RegKey); 
        RegSetValueEx(RegKey,"*****",0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());//这里加上你需要在注册表中注册的内容 
        this->UpdateData(FALSE); 
    } 
    else 
    { 
        theApp.SetMainSkin(); 
        ::AfxMessageBox("没找到执行程序,自动运行失败"); 
        exit(0); 
    } 

二、自动配置数据源 
    很多的程序都要用到数据库结合的操作,这里举例ACCESS,因为ACCESS在中小型VC系统开发中是最常用到的,如果程序的移植,如果对于很初级的用户来说,你还需要他到配置面板中进行数据源配置的话,那就有点说不过去了。 
         #include <odbcinst.h> 
         //配置数据源,数据库在应用程序目录下,这里比如数据库文件名为***.mdb,程序运行时候可以将数据库文件拷贝到程序目录下面。 
    CString sPath; 
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH); 
    sPath.ReleaseBuffer(); 
    int nPos; 
    nPos=sPath.ReverseFind(’//’); 
    sPath=sPath.Left(nPos); 
    CString lpszFileName = sPath + "//***.mdb";//这里修改成你的数据库文件名称 
    CFileFind  fFind; 
    if(!fFind.FindFile(lpszFileName)) 
    { 
        ::AfxMessageBox("没有找到数据库"); 
        exit(0); 
    }  
    CString szDesc; 
    szDesc.Format( "DSN=****;Description=****;DESCRIPTION=The DataBase For ***;FIL=MicrosoftAccess;DEFAULTDIR=%s;DBQ=%s;" ,sPath,lpszFileName);//这里***号可以添加成你的描述 

    //添加数据源 
    if(!::SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",(LPCSTR)szDesc)) 
    { 
        ::AfxMessageBox("32位ODBC数据源配置错误!"); 
        exit(0); 
    } 

三、设置显示模式: 
    很多的程序的移植的运行环境是改变的。有可能你的原来开发环境是1024X768,但是到了那些显示器大于17的时候(分辨率超过你的开发时的分辨率时),程序的显示可能就不好看了。 
         DEVMODE lpDevMode; 
    lpDevMode.dmPelsHeight=768;//Y方向象素点 
    lpDevMode.dmPelsWidth=1024;//X方向象素点 
    lpDevMode.dmDisplayFrequency=85;//屏幕刷新率 
    lpDevMode.dmFields=DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY; 
    ChangeDisplaySettings(&lpDevMode,0); 

四、在你的程序中间加载其他应用程序: 
    你的程序除了调用到各个模块进行协同工作外(DLL),还有可能调用不是同一个开发环境下的应用程序,比如VC环境下调用DELPHI,VB开发的执行程序,你就可以用到下面的方法(将调用的应用程序拷贝程序目录中): 
         CString sPath; 
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH); 
    sPath.ReleaseBuffer(); 
    int nPos; 
    nPos=sPath.ReverseFind(’//’); 
    sPath=sPath.Left(nPos); 
    CString lpszFileName = sPath + "//***.exe";//这里修改成你的调用应用程序的文件名称 
    CFileFind  fFind; 
    if(!fFind.FindFile(lpszFileName)) 
    { 
        ::AfxMessageBox("没有找到调用的应用程序!");  
        return FALSE; 
    } 
    else 
        ShellExecute(NULL,NULL,_T("***.exe"),NULL,sPath,NULL);  

五、结束进程: 
    在你的程序中结束别的程序进程,采用的方法是进行进程列举,然后采用查找的方法进行: 
         #include "TLHELP32.H" 
         DWORD ProcessID[50]; 
    CString kkk[50]; 
    HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
    PROCESSENTRY32* info=new PROCESSENTRY32; 
    PROCESSENTRY32 ProcessInfo;//声明进程信息变量 
    ProcessInfo.dwSize=sizeof(ProcessInfo);//设置ProcessInfo的大小 
    //返回系统中第一个进程的信息 
    BOOL Status=Process32First(SnapShot,&ProcessInfo); 
    int m_nProcess=0;  
    while(Status) 
    { 
        CString s,str1,str2; 
        s.Format("%d",ProcessInfo.cntThreads); 
        str1.Format("%s",ProcessInfo.szExeFile); 
        str1=ProcessInfo.szExeFile; 
        kkk[m_nProcess]=ProcessInfo.szExeFile;  
        ProcessID[m_nProcess]=ProcessInfo.th32ProcessID;  
        if(str1=="***.exe")//***.exe就是你要结束的进程的名称 
        { 
            HANDLE ProcessHandle; 
            ProcessHandle=OpenProcess (PROCESS_ALL_ACCESS,FALSE,ProcessID[m_nProcess]); 
            TerminateProcess(ProcessHandle,0);     
        } 
        Status=Process32Next(SnapShot,&ProcessInfo); 
        m_nProcess++; 
    } 
正文完 

软件开发中几个常用功能的实现

在进行软件开发过程中间,有很多小功能的实现,虽然这些东西你可以不用,但是如果应用仂将会是你的程序更具有专业性。 一、设置程序自动运行。     很多监控软件要求软件能够在系统重新启动后不用用户去点...
  • u010258235
  • u010258235
  • 2013年10月21日 09:42
  • 482

7个软件开发原则

关于代码重复最著名的单词是Kent Beck的Once And Only Once,也就是说软件操作的任何一个片断--不管是一个算法,一个常量集合,用于阅读的文档或者其他东西--应当只出现一次。 软...
  • e5Max
  • e5Max
  • 2016年03月24日 13:16
  • 678

几种常见的软件开发模型

软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直...
  • han_cui
  • han_cui
  • 2017年01月02日 19:21
  • 3405

Visual Studio制作安装程序教程

1.新建安装部署项目 打开安装向导,点击下一步,或者直接点击完成.当文件比较大时,注意把工程放在空间充足的磁盘分区上。 2.具体制作过程 2.1 添加文件夹与程序文件 ...
  • qq_21794823
  • qq_21794823
  • 2016年11月07日 17:32
  • 597

基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理

在Windows编程中间,我们经常需要添加用户,删除用户,添加用户组等等功能,那些功能如何实现呢,我们请见实现代码与注释分析     [cpp] view plain c...
  • flyingleo1981
  • flyingleo1981
  • 2016年12月08日 21:40
  • 341

ReSharper 使用感受

使用ReSharper这个VS的插件已经很长时间,可能已经习惯了,如果现在让我开发,利用VS但是没有Resharper的帮助确实有点不顺手了,可能是产生的依赖性了吧。        起初使用Resha...
  • wangxingguo1218
  • wangxingguo1218
  • 2013年08月10日 16:55
  • 5966

软件开发常用英语词汇

软件开发常用英语词汇
  • u013898489
  • u013898489
  • 2014年11月03日 22:31
  • 1254

软件开发的常用开发模式

简单描述几种主要的软件开发模式:瀑布开发、迭代式开发、Time Boxed 定时开发、Continuous Flow 持续工作流。和它们的主要特点和缺点...
  • FulfillArtDream
  • FulfillArtDream
  • 2016年04月27日 21:47
  • 1563

visual C++数字图像处理类

由于现在手头的学习是关于图像处理的,有些技能肯定迟早要用上,于是决定利用假期学习Visual C++的相关知识。 今天是第一天,主要学习使用visual c++进行面向对象编程的基本方法。并给出数字...
  • a1154761720
  • a1154761720
  • 2015年01月21日 22:53
  • 1709

解决win8/8.1系统不兼容Visual C++6.0的问题

因为最近需要使用VC++6.0这个软件做实践课,于是下载并安装了这个软件。却发现不兼容win8/8.1等新系统的问题,在网上查找了一下资料,解决办法很多,参差不齐。有的简单,有的复杂。我经过查找并整理...
  • u010104750
  • u010104750
  • 2015年12月20日 10:16
  • 1610
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VISUAL C++软件开发中几个常用功能的实现
举报原因:
原因补充:

(最多只允许输入30个字)