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

            啤酒

            一個空白者

             

            小節

            如何實現繁簡體互換?

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

            #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搞掂簡體轉繁體,下面會打印繁體出來
             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;
            }

            //從標準輸入簡體國標-->big5繁體標準輸出,輸入兩個空行退出
            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.首先請參閱其他技術專欄中用VB6.0訪問注冊表,創建
            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>
            ? /// 構造函數
            ? /// </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為我們提供了打開特定桌面和枚舉桌面窗口的函數。
              hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);
              //打開我們默認的Default桌面;
              EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);
              //枚舉打開桌面上的所有窗口,由回調函數實現。
              BOOL __stdcall EnumWindowProc(HWND, LPARAM);
              //在回調函數中,我們可以獲得窗口的標題和相關進程,線程信息;
              GetWindowText(hWnd,szWindowText,dwMaxCount);
              GetWindowThreadProcessId(hWnd,&dwPID);

              2.設備驅動器信息(服務和設備驅動器差不多,在此不做重復)

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

              3.磁盤信息

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

              4.環境變量

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

            ?

            ?

            5.事件記錄信息

              OpenEventLog(NULL,szLog);
              //打開時間日志記錄;
              GetOldestEventLogRecord(hEvent,&dwThisRecord);
              //獲得最新的日志信息,以便繼續查找;
              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);
              //獲得事件日志的總數;
              CloseEventLog(hEvent);
              //不要忘記關閉事件句柄;
              
              6.網絡共享

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

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

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

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

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

            ?

            ?

            10.關機

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

              11.用戶信息

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

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

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


            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            事件記錄信息
              OpenEventLog(NULL,szLog);
              //打開時間日志記錄;
              GetOldestEventLogRecord(hEvent,&dwThisRecord);
              //獲得最新的日志信息,以便繼續查找;
              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);
              //獲得事件日志的總數;
              CloseEventLog(hEvent);
              //不要忘記關閉事件句柄;

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

            導航

            統計

            常用鏈接

            留言簿(2)

            隨筆檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久久久久久免费精品| 国产亚洲精品久久久久秋霞 | 波多野结衣久久| 77777亚洲午夜久久多喷| 好属妞这里只有精品久久| 欧美久久综合九色综合| 久久久女人与动物群交毛片| 国产69精品久久久久99尤物| 精品久久久无码21p发布 | 久久久久久久国产免费看| 中文字幕日本人妻久久久免费| 精品国产福利久久久| 久久乐国产综合亚洲精品| 国内精品久久久久久野外| 久久www免费人成看片| 久久99久久成人免费播放| 人妻无码久久一区二区三区免费| 久久久久国产精品三级网| 国产午夜精品理论片久久影视 | 中文字幕久久波多野结衣av| 久久国产一区二区| 久久久久亚洲AV无码麻豆| 欧美粉嫩小泬久久久久久久 | 国产精品一区二区久久| 久久精品成人欧美大片| 婷婷久久综合九色综合绿巨人| 日本免费久久久久久久网站| 日韩人妻无码精品久久久不卡| 久久久久久国产a免费观看黄色大片 | 香港aa三级久久三级| 久久精品国产半推半就| 久久久久久久久无码精品亚洲日韩 | 久久香综合精品久久伊人| 久久精品亚洲AV久久久无码| 日韩精品无码久久一区二区三| 韩国三级中文字幕hd久久精品| 91麻精品国产91久久久久| 日本久久久久久中文字幕| 国产精品美女久久久久AV福利| 青青草原综合久久| 很黄很污的网站久久mimi色|