• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 14, comments - 4, trackbacks - 0, articles - 0

            VISUAL C++軟件開發(fā)中幾個常用功能

            Posted on 2006-07-05 00:26 will 閱讀(474) 評論(0)  編輯 收藏 引用 所屬分類: 技術探索
            ?????????在進行軟件開發(fā)過程中間,有很多小功能的實現(xiàn),雖然這些東西你可以不用,但是如果應用仂將會是你的程序更具有專業(yè)性。?
            一、設置程序自動運行。??
            ???????很多監(jiān)控軟件要求軟件能夠在系統(tǒng)重新啟動后不用用戶去點擊圖標啟動項目,而是直接能夠啟動運行,方法是寫注冊表Software\\Microsoft\\Windows\\CurrentVersion\\Run。參考程序可以見下:(查找程序目錄的執(zhí)行文件,存在則進行添加注冊表操作)?
            ???????? 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";//這里加上你要查找的執(zhí)行文件名稱?
            ??? 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("沒找到執(zhí)行程序,自動運行失敗");?
            ??????? exit(0);?
            ??? }?

            二、自動配置數(shù)據(jù)源?
            ??? 很多的程序都要用到數(shù)據(jù)庫結合的操作,這里舉例ACCESS,因為ACCESS在中小型VC系統(tǒng)開發(fā)中是最常用到的,如果程序的移植,如果對于很初級的用戶來說,你還需要他到配置面板中進行數(shù)據(jù)源配置的話,那就有點說不過去了。?
            ???????? #include <odbcinst.h>?
            ???????? //配置數(shù)據(jù)源,數(shù)據(jù)庫在應用程序目錄下,這里比如數(shù)據(jù)庫文件名為***.mdb,程序運行時候可以將數(shù)據(jù)庫文件拷貝到程序目錄下面。?
            ??? 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";//這里修改成你的數(shù)據(jù)庫文件名稱?
            ??? CFileFind? fFind;?
            ??? if(!fFind.FindFile(lpszFileName))?
            ??? {?
            ??????? ::AfxMessageBox("沒有找到數(shù)據(jù)庫");?
            ??????? exit(0);?
            ??? }??
            ??? CString szDesc;?
            ??? szDesc.Format( "DSN=****;Description=****;DESCRIPTION=The DataBase For ***;FIL=MicrosoftAccess;DEFAULTDIR=%s;DBQ=%s;" ,sPath,lpszFileName);//這里***號可以添加成你的描述?

            ??? //添加數(shù)據(jù)源?
            ??? if(!::SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",(LPCSTR)szDesc))?
            ??? {?
            ??????? ::AfxMessageBox("32位ODBC數(shù)據(jù)源配置錯誤!");?
            ??????? exit(0);?
            ??? }?

            三、設置顯示模式:?
            ??? 很多的程序的移植的運行環(huán)境是改變的。有可能你的原來開發(fā)環(huán)境是1024X768,但是到了那些顯示器大于17的時候(分辨率超過你的開發(fā)時的分辨率時),程序的顯示可能就不好看了。?
            ???????? DEVMODE lpDevMode;?
            ??? lpDevMode.dmPelsHeight=768;//Y方向象素點?
            ??? lpDevMode.dmPelsWidth=1024;//X方向象素點?
            ??? lpDevMode.dmDisplayFrequency=85;//屏幕刷新率?
            ??? lpDevMode.dmFields=DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;?
            ??? ChangeDisplaySettings(&lpDevMode,0);?

            四、在你的程序中間加載其他應用程序:?
            ??? 你的程序除了調用到各個模塊進行協(xié)同工作外(DLL),還有可能調用不是同一個開發(fā)環(huán)境下的應用程序,比如VC環(huán)境下調用DELPHI,VB開發(fā)的執(zhí)行程序,你就可以用到下面的方法(將調用的應用程序拷貝程序目錄中):?
            ???????? 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的大小?
            ??? //返回系統(tǒng)中第一個進程的信息?
            ??? 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++;?
            ??? }?

            91精品观看91久久久久久| 色综合久久88色综合天天 | 久久久久AV综合网成人 | 久久久精品久久久久久| 97久久国产露脸精品国产| 久久777国产线看观看精品| 日本精品一区二区久久久| 久久久久AV综合网成人| 久久亚洲国产成人影院| 国产精品久久自在自线观看| 欧美久久久久久| 国内精品久久久久久久影视麻豆| 久久综合给合久久国产免费| 久久精品女人天堂AV麻| 99久久免费只有精品国产| 久久综合九色综合网站| 久久午夜无码鲁丝片秋霞 | 热久久最新网站获取| 国内精品久久久久影院网站| 久久久久99精品成人片直播| 久久人人爽人人爽人人片AV不| 久久国产精品偷99| 99久久中文字幕| 亚洲AV无码久久精品蜜桃| 日本精品一区二区久久久| 激情综合色综合久久综合| 国产免费久久精品丫丫| 狠狠色丁香久久综合婷婷| 热re99久久6国产精品免费| 亚洲AV日韩AV永久无码久久| 狠狠色丁香婷婷久久综合| 一级做a爰片久久毛片看看| 久久伊人精品青青草原日本| 久久久久久久久久久免费精品| 狠狠色综合久久久久尤物| 精品久久久久久无码人妻蜜桃| 2020最新久久久视精品爱 | 久久天天躁狠狠躁夜夜96流白浆| 久久亚洲私人国产精品vA| 伊人久久大香线蕉AV色婷婷色 | 国产精品成人久久久|