• <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>

            啤酒

            一個空白者

             

            小節(jié)

            如何實現(xiàn)繁簡體互換?

            // j2f.cpp : 簡體(gb)==>繁體==>big5的過程
            // 反向轉(zhuǎn)換是類似的.
            // 注意直接從簡體-->big5不能做到一一對應(yīng).會有很多?出現(xiàn),
            // 故此需要先轉(zhuǎn)成繁體.再轉(zhuǎn)成big5.
            // 我感覺這種方法應(yīng)當(dāng)和winnt或office里提供的繁簡或字符集互轉(zhuǎn)是一致的.

            #include "stdafx.h"
            #include
            #include
            #include
            #include
            #include
            using namespace std;

            void j2f(const string &s)
            {
             int n=s.length ();
             int r=LCMapString(
               MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),
               LCMAP_TRADITIONAL_CHINESE,
               s.c_str (),s.length (),NULL,0);
             if (!r) cout <<"error :"<
             char *ft=new char[r+1];
             r=LCMapString(
               MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC),
               LCMAP_TRADITIONAL_CHINESE,
               s.c_str (),s.length (),ft,r+1);//這個api搞掂簡體轉(zhuǎn)繁體,下面會打印繁體出來
             if (r) {
              ft[r]=0;
              cout<
              wchar_t *pws=new wchar_t[r+1];
              int r1=MultiByteToWideChar(936,0,ft,r,pws,r+1);
             BOOL f=FALSE;
             r1=WideCharToMultiByte(950,0,pws,r1,ft,r+1,"?",&f);//代碼頁切換搞掂gb->big5
             ft[r1]=0;
             cout<<<"(";
              for (int i=0;i    cout<<"";
               printf("0x%02x ",(BYTE)ft[i]);
              }
             cout<<")"<
             delete [] pws;
             }

             delete []ft;
            }

            //從標(biāo)準(zhǔn)輸入簡體國標(biāo)-->big5繁體標(biāo)準(zhǔn)輸出,輸入兩個空行退出
            int main(int argc, char* argv[])
            {

             for(;;){
              char line[1024];
              cin.getline (line,sizeof(line));
             string s(line);
             if (!cin ||s.length ()==0) break;
             j2f(s);
            }
            _getch();
            return 0;
            }

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            1.首先請參閱其他技術(shù)專欄中用VB6.0訪問注冊表,創(chuàng)建
            HKEY_LOCAL_MACHINE,\SYSTEM\CurrentControlSet\Services\Eventlog\Eventlog2\Eventlog2鍵,并且寫入EventMessageFile,value為C:\WINNT\Microsoft.NET\Framework\v1.1.4322\EventLogMessages.dll

            2.在C#.net使用以下代碼寫日志
            //輸出日志的CLASS
            using System;
            using System.Diagnostics;
            using System.Text;

            namespace CorePlus.Framework.Utility
            {
            ?/// <summary>
            ?/// 寫日志的CLASS
            ?/// </summary>
            ?public class LogUtility
            ?{
            ? public enum EVENT
            ? {
            ?? /// <summary>重大錯誤</summary>
            ?? EVENT_ERROR,
            ?? /// <summary>操作失敗</summary>
            ?? EVENT_FAILUREAUDIT,
            ?? /// <summary>一般信息</summary>
            ?? EVENT_INFORMATION,
            ?? /// <summary>有效的,成功的操作</summary>
            ?? EVENT_SUCCESSAUDIT,
            ?? /// <summary>警告</summary>
            ?? EVENT_WARNING,
            ? }

            ? private static TextWriterTraceListener listner = null;

            ? /// <summary>
            ? /// 構(gòu)造函數(shù)
            ? /// </summary>
            ? public LogUtility () {}

            ? /// <param name="loginID">登錄ID</param>
            ? /// <param name="screenID">畫面ID</param>
            ? /// <param name="level">警告級別</param>
            ? /// <param name="message">日志信息</param>
            ? public static void Logging (
            ?? string loginID,
            ?? string screenID,
            ?? EVENT level,
            ?? string message )
            ? {
            ?? // 變量定義
            ?? StringBuilder? outputMessage = null; // 輸出的信息
            ?? string??? targetLevelString = null;
            ?? EventLogEntryType Eventtype = new EventLogEntryType();

            ?? switch (level)
            ?? {
            ??? case EVENT.EVENT_ERROR:
            ???? Eventtype = EventLogEntryType.Error;
            ???? break;

            ??? case EVENT.EVENT_FAILUREAUDIT:
            ???? Eventtype = EventLogEntryType.FailureAudit;
            ???? break;

            ??? case EVENT.EVENT_INFORMATION:
            ???? Eventtype = EventLogEntryType.Information;
            ???? break;

            ??? case EVENT.EVENT_SUCCESSAUDIT:
            ???? Eventtype = EventLogEntryType.SuccessAudit;
            ???? break;

            ??? case EVENT.EVENT_WARNING:
            ???? Eventtype = EventLogEntryType.Warning;
            ???? break;
            ?? }

            ?? // 日志信息的拼合
            ?? outputMessage = MakeMessage( loginID, screenID, targetLevelString, message );

            ?? // 寫日志
            ?? Logging( Eventtype, outputMessage.ToString() );
            ? }

            ? /// <summary>
            ? /// 向日志管理器寫日志
            ? /// </summary>
            ? /// <param name="level">錯誤級別</param>
            ? /// <param name="message">輸出的信息</param>
            ? private static void Logging ( EventLogEntryType level, string message )
            ? {
            ?? // 變量定義
            ?? string? logName? = null; // 日志名
            ?? string? machineName = null; // 機器名
            ?? string? sourceName = null; // SourceName
            ?? EventLog eventLog = null; // EventLog

            ?? logName? = "Eventlog2";? // 日志名
            ?? machineName = "."; // 機器名
            ?? sourceName = "Eventlog2"; // SourceName

            ?? eventLog = new EventLog( logName, machineName, sourceName );
            ?? eventLog.WriteEntry( message,level );
            ?? eventLog = null;
            ? }

            ? /// <summary>
            ? /// 日志最終拼合
            ? /// </summary>
            ? /// <param name="loginID">登錄ID</param>
            ? /// <param name="screenID">畫面ID</param>
            ? /// <param name="levelString">錯誤級別</param>
            ? /// <param name="message">日志信息</param>
            ? /// <returns>輸出的日志信息</returns>
            ? private static StringBuilder MakeMessage (
            ?? string loginID,
            ?? string screenID,
            ?? string levelString,
            ?? string message )
            ? {
            ?? // 變量定義
            ?? StringBuilder retMessage = new StringBuilder();

            ?? retMessage.Append( "【登錄ID】" );
            ?? retMessage.Append( loginID );
            ?? retMessage.Append( "\n【畫面ID】" );
            ?? retMessage.Append( screenID );
            ?? retMessage.Append( "\n【錯誤級別】" );
            ?? retMessage.Append( levelString );
            ?? retMessage.Append( "\n【錯誤信息】\n" );
            ?? retMessage.Append( message );

            ?? return retMessage;
            ??? }
            ? }
            }

            // 在FORM中輸出日志
            ? private void button1_Click(object sender, System.EventArgs e)
            ? {
            ?? LogUtility.Logging( "bbbbbb","22222222",LogUtility.EVENT.EVENT_ERROR,"3333333" );
            ? }

            運行完程序后打開日志管理器看看~~~~~~~~~怎么樣?不錯吧,呵呵.

            ?

            ?

            ?


            ////////////////////////////////////////////////////////////////////////////
            1.窗口信息

              MS為我們提供了打開特定桌面和枚舉桌面窗口的函數(shù)。
              hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);
              //打開我們默認(rèn)的Default桌面;
              EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);
              //枚舉打開桌面上的所有窗口,由回調(diào)函數(shù)實現(xiàn)。
              BOOL __stdcall EnumWindowProc(HWND, LPARAM);
              //在回調(diào)函數(shù)中,我們可以獲得窗口的標(biāo)題和相關(guān)進程,線程信息;
              GetWindowText(hWnd,szWindowText,dwMaxCount);
              GetWindowThreadProcessId(hWnd,&dwPID);

              2.設(shè)備驅(qū)動器信息(服務(wù)和設(shè)備驅(qū)動器差不多,在此不做重復(fù))

              設(shè)備驅(qū)動信息有服務(wù)控制管理器(SCM)來管理的,我要打開服務(wù)控制管理器,并枚舉所有的設(shè)備驅(qū)動器。
              OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
              //以所有權(quán)限打開服務(wù)控制管理器;
              EnumServicesStatus(schManager,dwDeviceType,dwDeviceState,
                    EnumStatus,dwBufSize,&dwBytesNeeded,
                   &dwDevicesReturned,&dwResumeHandle))
              //枚舉所有設(shè)備的當(dāng)前狀態(tài);
              CloseServiceHandle(schManager);
              //記住,在結(jié)束訪問后要關(guān)閉服務(wù)句柄;
              OpenService(schManager,szDeviceName,SERVICE_ALL_ACCESS);
              //打開特定的設(shè)備驅(qū)動器;
              QueryServiceConfig(schDevice,lpDeviceConfig,
                      ?? 1024*8,&dwBytesNeeded);
              //查詢驅(qū)動器的服務(wù)配置信息;
              QueryServiceStatus(schDevice,&DeviceStatus);
              //查詢設(shè)備驅(qū)動器的當(dāng)前狀態(tài);
              QueryServiceConfig2(schDevice,SERVICE_CONFIG_DESCRIPTION,
             ?。↙PBYTE)lpDeviceDescription,8*1024,&dwBytesNeeded)
              //查詢設(shè)備的描述信息;
              StartService(schDevice,0,NULL);
              //啟動設(shè)備;
              ControlService(schDevice,SERVICE_CONTROL_STOP,&DeviceStatus);
              //停止設(shè)備;
              DeleteService(schDevice);
              //刪除設(shè)備;

              3.磁盤信息

              我們希望獲得系統(tǒng)所有磁盤的信息,包括軟盤,硬盤,光盤等等;
              GetLogicalDriveStrings(dwBufferLength,lpBuffer);
              //獲得邏輯設(shè)備的信息;
              GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,
               dwVolumeNameSize,&dwVolumeSerialNumber,
               &dwMaximumComponentLength,&dwFileSystemFlags,
                  lpFileSystemNameBuffer,dwFileSystemNameSize);
              //獲得磁盤卷信息,包括卷名稱和格式類型;
              GetDiskFreeSpaceEx(lpRootPathName,&FreeBytesAvailable,
                    ? &TotalNumberOfBytes,&TotalNumberOfFreeBytes);
              //探測磁盤的空間使用情況;

              4.環(huán)境變量

              我們可以從注冊表中獲得環(huán)境塊的信息:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,當(dāng)然要使用注冊表的函數(shù)。
              RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKey,0,KEY_QUERY_VALUE,&hKey);
              //打開注冊表的鍵;
              RegEnumValue(hKey,dwIndex,EnvironVariable,
                     &dwVariableLength,NULL,NULL,NULL,NULL);
              //查詢我們需要的信息值;
              GetEnvironmentVariable(EnvironVariable,EnvironString,1024);
              //獲得環(huán)境變量的字符串信息;

            ?

            ?

            5.事件記錄信息

              OpenEventLog(NULL,szLog);
              //打開時間日志記錄;
              GetOldestEventLogRecord(hEvent,&dwThisRecord);
              //獲得最新的日志信息,以便繼續(xù)查找;
              ReadEventLog(hEvent,EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,
            ?? 0,pEventLogRecord,1024*32,&dwRead,&dwNeeded)
              //讀去日志信息;
              LookupAccountSid(NULL,pSid,szName,&dwName,szDomain,&dwDomain,&SNU);
              //獲取賬戶的SID,以便獲得賬戶的用戶名稱;
              GetNumberOfEventLogRecords(hEvent,&dwTotal);
              //獲得事件日志的總數(shù);
              CloseEventLog(hEvent);
              //不要忘記關(guān)閉事件句柄;
              
              6.網(wǎng)絡(luò)共享

              我們使用第二等級的網(wǎng)絡(luò)共享搜索;
              NetShareEnum(NULL,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&entriesread,&totalentries,&resume);
              //列舉所有的共享目錄及相關(guān)信息;
              NetApiBufferFree(pBuf);
              //釋放緩沖區(qū);
              NetShareDel(NULL,(char *)lpShareNameW,0);
              //刪除網(wǎng)絡(luò)共享目錄;
              
              7.網(wǎng)絡(luò)適配器信息

              我們要探測NIC的信息和網(wǎng)絡(luò)流量;
              GetAdaptersInfo(&AdapterInfo,&OutBufLen);
              //獲取適配器信息;
              
              8.系統(tǒng)性能

              獲取系統(tǒng)的存儲器使用情況;
              GetPerformanceInfo(&PerfInfo,sizeof(PERFORMACE_INFORMATION))
              //獲取系統(tǒng)性能信息;

              9.進程/線程/模塊信息

              在此我們使用工具幫助函數(shù)(ToolHelp32)和系統(tǒng)
              OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,&hToken);
              //打開進程的令牌,提升權(quán)限;
              AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
              //將進程的權(quán)限提升到支持調(diào)試(Debug);
              CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
              //創(chuàng)建進程的快照;
              Process32First(hProcessSnap,&ProcessEntry32);
              Process32First(hProcessSnap,&ProcessEntry32);
              //枚舉所有進程;
              OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
              //打開特定進程,以查詢進程相關(guān)信息;
              GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime);
              //獲取進程的時間信息;
              GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
              //獲取進程的存儲區(qū)信息;
              GetPriorityClass(hProcess);
              //獲取進程的優(yōu)先權(quán);
              GetProcessIoCounters(hProcess,&IoCounters);
              //獲取進程的IO使用情況;
              CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
              //創(chuàng)建模塊快照;
              Module32First(hModuleSnap, &ModuleEntry32);
              Module32Next(hModuleSnap, &ModuleEntry32);
              //枚舉進程模塊信息;
              CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
              //創(chuàng)建線程快照;
              Thread32First(hThreadSnap, &ThreadEntry32);
              Thread32Next(hThreadSnap, &ThreadEntry32);
              //枚舉線程信息;
              OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
              //打開線程,須自己獲得此函數(shù)地址;
              TerminateProcess(hProcess,0);
              //終止進程;
              SuspendThread(hThread);
              //懸掛線程;
              ResumeThread(hThread);
              //激活線程;

            ?

            ?

            10.關(guān)機

              AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
              //調(diào)整進程令牌,使其支持關(guān)機;
              ExitWindowsEx(EWX_LOGOFF,0);
              //注銷系統(tǒng);
              LockWorkStation();
              //鎖定系統(tǒng);
              InitiateSystemShutdown(NULL,szMessage,dwTimeout,FALSE,bSig);
              //支持到記時和消息顯示的關(guān)機/重啟;
              SetSystemPowerState(bSig,FALSE);
              //系統(tǒng)休眠/冬眠;

              11.用戶信息

              NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,       dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
              //枚舉系統(tǒng)用戶信息;
              NetUserDel(NULL,lpUserNameW);
              //刪除指定用戶;
            ?
              12.系統(tǒng)版本信息

              GetVersionEx((LPOSVERSIONINFO)&osviex);
              //獲取操作系統(tǒng)的版本信息;
              我們也可以通過注冊表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)獲取相關(guān)信息:
              GetTickCount();
              //獲取開機時間;
              GetComputerName(szInfo,&dwInfo);
              //獲取計算機名稱;
              GetUserName(szInfo,&dwInfo);
              //獲取計算機用戶名;
              GetWindowsDirectory(szInfo,MAX_PATH+1);
              //獲取Windows目錄;
              GetSystemDirectory(szInfo,MAX_PATH+1);
              //獲取系統(tǒng)目錄;

            /////////////////////////////////////////////////////////////////////////////////


            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            事件記錄信息
              OpenEventLog(NULL,szLog);
              //打開時間日志記錄;
              GetOldestEventLogRecord(hEvent,&dwThisRecord);
              //獲得最新的日志信息,以便繼續(xù)查找;
              ReadEventLog(hEvent,EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,
            ?? 0,pEventLogRecord,1024*32,&dwRead,&dwNeeded)
              //讀去日志信息;
              LookupAccountSid(NULL,pSid,szName,&dwName,szDomain,&dwDomain,&SNU);
              //獲取賬戶的SID,以便獲得賬戶的用戶名稱;
              GetNumberOfEventLogRecords(hEvent,&dwTotal);
              //獲得事件日志的總數(shù);
              CloseEventLog(hEvent);
              //不要忘記關(guān)閉事件句柄;

            posted on 2006-08-22 10:56 啤酒 閱讀(789) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(2)

            隨筆檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久精品人妻一区二区三区蜜桃| 久久成人国产精品一区二区| 色妞色综合久久夜夜| 国产AV影片久久久久久 | 久久婷婷午色综合夜啪| 久久www免费人成精品香蕉| 国产成人精品久久亚洲| 青青草国产精品久久| 国产精品久久国产精品99盘| 国产精品福利一区二区久久| 久久99国产精一区二区三区 | 国产精品久久精品| 国产91色综合久久免费分享| 久久久这里有精品| 久久亚洲AV无码精品色午夜| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲欧美日韩中文久久| 亚洲愉拍99热成人精品热久久 | 国产精品久久久久久久| AV狠狠色丁香婷婷综合久久| 99久久久国产精品免费无卡顿| 国产精品女同久久久久电影院| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 久久久久99精品成人片| 日本精品久久久久影院日本| 亚洲乱码日产精品a级毛片久久| 亚洲婷婷国产精品电影人久久| 久久无码AV一区二区三区| 亚洲AV无码久久精品色欲| 久久精品午夜一区二区福利| 美女写真久久影院| 精品久久久久久无码免费| 欧美一级久久久久久久大片| 99久久精品国产一区二区 | 久久亚洲av无码精品浪潮| 久久国产亚洲精品| 少妇高潮惨叫久久久久久| 久久亚洲精品中文字幕三区| 久久亚洲欧洲国产综合| 中文字幕热久久久久久久| 久久综合久久综合久久|