• <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++軟件開發中幾個常用功能

            Posted on 2006-07-05 00:26 will 閱讀(465) 評論(0)  編輯 收藏 引用 所屬分類: 技術探索
            ?????????在進行軟件開發過程中間,有很多小功能的實現,雖然這些東西你可以不用,但是如果應用仂將會是你的程序更具有專業性。?
            一、設置程序自動運行。??
            ???????很多監控軟件要求軟件能夠在系統重新啟動后不用用戶去點擊圖標啟動項目,而是直接能夠啟動運行,方法是寫注冊表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++;?
            ??? }?

            久久精品国产亚洲AV无码麻豆 | 久久精品亚洲福利| 99久久久久| 久久久久亚洲国产| 996久久国产精品线观看| 精品久久久久久无码中文野结衣| 久久久久亚洲?V成人无码| 国产精品乱码久久久久久软件| 日韩人妻无码精品久久久不卡 | 久久AV无码精品人妻糸列| 国内精品人妻无码久久久影院| 大美女久久久久久j久久| 久久精品国产亚洲AV蜜臀色欲 | 精品乱码久久久久久久| 欧美与黑人午夜性猛交久久久| 蜜臀av性久久久久蜜臀aⅴ | 精品人妻久久久久久888| 人人狠狠综合久久亚洲高清| 久久se精品一区二区| 国产成人精品久久| 亚洲乱码日产精品a级毛片久久| 国产精品久久永久免费| 精品久久亚洲中文无码| 亚洲午夜无码久久久久小说| 91精品国产91热久久久久福利| 久久久国产精品亚洲一区| 久久久久久国产精品无码下载| 久久久久亚洲AV无码专区桃色| 伊人久久精品线影院| 国内精品久久久久久久97牛牛| 久久久久亚洲AV成人网人人网站 | 99久久99久久精品国产片果冻| 久久久久黑人强伦姧人妻| 精品国产婷婷久久久| 成人亚洲欧美久久久久| 日韩欧美亚洲综合久久影院d3| 国产精品久久久久影院嫩草| 久久精品国产精品国产精品污| 成人久久久观看免费毛片| 久久av无码专区亚洲av桃花岛| 国产精品岛国久久久久|