作者: admin

  • jexus 隐藏 index.php

    把NoFile的配置改为:

    NoFile=/index.php

    其他不用动 ,不用使用rewrite。

    如下图:

  • JAVASCRIPT 获取 URL参数

    JAVASCRIPT 获取 URL中的参数:

    function GetUrlParms()   
    {
        var args=new Object();   
        var query=location.search.substring(1);//获取查询串   
        var pairs=query.split("&");//在逗号处断开   
        for(var   i=0;i<pairs.length;i++)   
        {
            var pos=pairs[i].indexOf('=');//查找name=value   
            if(pos==-1) 
                continue;//如果没有找到就跳过   
            var argname=pairs[i].substring(0,pos);//提取name   
            var value=pairs[i].substring(pos+1);//提取value   
            args[argname]=decodeURI(value);//存为属性   
        }
        return args;
    }
    
    var args = GetUrlParms();
    if(args["q"]!=undefined)
    {
        //如果要查找参数key:
        var value1 = args["q"] ;
        alert(value1);
    }
  • MFC 打印图片

    MFC 实现打印图片功能,代码如下:

    BOOL PrintBitmap(LPCTSTR filename)
    {
        CPrintDialog printDlg(FALSE);
        // printDlg.GetDefaults();
    
        if (printDlg.DoModal() == IDCANCEL)
            return FALSE;
    
        CDC dc;
        if (!dc.Attach(printDlg.GetPrinterDC()))
        {
            AfxMessageBox(_T("未发现发打印设备"));
            return FALSE;
        }
    
        dc.m_bPrinting = TRUE;
        DOCINFO di;
        // 初始化打印信息
        ::ZeroMemory(&di, sizeof(DOCINFO));
        di.cbSize = sizeof(DOCINFO);
        di.lpszDocName = filename;
        BOOL bPrintingOK = dc.StartDoc(&di); // 开始打印
    
        CPrintInfo Info;
        Info.SetMaxPage(1); // 只打印一页
        int maxw = dc.GetDeviceCaps(HORZRES);
        int maxh = dc.GetDeviceCaps(VERTRES);
        Info.m_rectDraw.SetRect(0, 0, maxw, maxh);
        for (UINT page = Info.GetMinPage(); page <=Info.GetMaxPage() && bPrintingOK; page++)
        {
            dc.StartPage(); // 开始打印新的一页
            Info.m_nCurPage = page;
            CBitmap bitmap;
    
            // 加载位图
            if (!bitmap.Attach(::LoadImage(::GetModuleHandle(NULL), filename, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE)))
            {
                AfxMessageBox(_T("位图加载失败!"));
                return FALSE;
            }
            BITMAP bm;
            bitmap.GetBitmap(&bm);
            int w = bm.bmWidth;
            int h = bm.bmHeight;
            // 创建内存设备上下文
            CDC memDC;
            memDC.CreateCompatibleDC(&dc);
            CBitmap *pBmp = memDC.SelectObject(&bitmap);
            memDC.SetMapMode(dc.GetMapMode());
            dc.SetStretchBltMode(HALFTONE);
            // 拉伸打印
            dc.StretchBlt(0, 0, maxw, maxh, &memDC, 0, 0, w, h, SRCCOPY);
            // clean up
            memDC.SelectObject(pBmp);
            // end page
            bPrintingOK = (dc.EndPage() > 0);
        }
        if (bPrintingOK)
            dc.EndDoc(); // 打印完成
        else
    
            dc.AbortDoc(); // 终止打印
    
        return TRUE;
    }
    
    void CPrintDemoDlg::OnBnClickedOk()
    {
        BOOL bRet = PrintBitmap(_T("1.bmp"));
    
        if (bRet)
            AfxMessageBox(_T("打印完成"));
    }
  • VC生成隐藏 受保护的系统目录 

    VC生成隐藏 受保护的系统目录

    /*  add by laowu 20160904   */
    TCHAR szPath[MAX_PATH];
    ZeroMemory(szPath, MAX_PATH);
    SHGetSpecialFolderPath(NULL, szPath, CSIDL_APPDATA, FALSE);
    strcat(szPath, "\\Winsys");
    
    if (!PathIsDirectory(szPath))
    {
           ::CreateDirectory(szPath, NULL);
           SetFileAttributes(szPath, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM );  // 主要是这句,设置文件夹的属性
    }
  • vc常用到的一些函数 

    vc常用到的一些函数 

    #include <Shlwapi.h>
    #pragma comment (lib , "shlwapi.lib" )
    
    #define nullptr NULL
    
    inline BYTE toHex(const BYTE &x)
    {
           return x > 9 ? x + 55: x + 48;
    }
    
    inline CString UrlEncode(CString sIn)
    {
           CString sOut;
           const int nLen = sIn.GetLength() + 1;
           register LPBYTE pOutTmp = NULL;
           LPBYTE pOutBuf = NULL;
           register LPBYTE pInTmp = NULL;
           LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
           BYTE b = 0;
    
           //alloc out buffer
           pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3 - 2);//new BYTE [nLen * 3];
    
           if(pOutBuf)
           {
                  pInTmp = pInBuf;
                  pOutTmp = pOutBuf;
    
                  // do encoding
                  while (*pInTmp)
                  {
                         if(isalnum(*pInTmp))
                               *pOutTmp++ = *pInTmp;
                         else
                               if(isspace(*pInTmp))
                                      *pOutTmp++ = '+';
                               else
                               {
                                      *pOutTmp++ = '%';
                                      *pOutTmp++ = toHex(*pInTmp>>4);
                                      *pOutTmp++ = toHex(*pInTmp%16);
                               }
                               pInTmp++;
                  }
                  *pOutTmp = '\0';
                  //sOut=pOutBuf;
                  //delete [] pOutBuf;
                  sOut.ReleaseBuffer();
           }
           sIn.ReleaseBuffer();
           return sOut;
    }
    
    inline int SplitString(CString & str, TCHAR cTok, CStringArray& aryItem)
    {
           TCHAR* p = str.GetBuffer(0);
           TCHAR* e = p;
           TCHAR cEnd = *e;
           int nCount = 0;
           while (cEnd)
           {
                  if (*e == _T('\0'))
                         cEnd = *e;
                  else if (*e == cTok)
                         *e = _T('\0');
    
                  if (*e)
                         e++;
                  else
                  {
                         if (*p != _T('\0'))
                         {
                               aryItem.Add(p);
                               nCount++;
                         }
                         p = ++e;
                  }
           }
           return nCount;
    }
    
    inline void MakeSureCreateDir(CString basePath, CString path)
    {
           CStringArray arr;
           SplitString(path, '\\', arr);
           for (int i = 0; i < arr.GetCount(); i++)
           {
                  basePath += L"\\" + arr[i];
    
                  if (!PathFileExists(basePath))
                         ::CreateDirectory(basePath, NULL);
           }
    }
  • Mono+Jexus部署asp.net mvc5.3报错

    报错信息如下:
    Type not found: ‘System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,System.Web.WebPages.Razor,Version…

    经过咨询一些群友,最后Mr. Seaning提出是Webpages大小写的问题。

    在bin文件夹下有关Webpages的dll, pages都是小写的。这在windows平台上没有问题。但是到了linux下就不行了。解决办法是把Webpages相关的dll的文件名里的Webpages改名为 WebPages,注意P是大写。然后就没问题了。

    注:只在vs2015生成的dll中有这个问题。

    这个项目是用 asp.net mvc5.3 + dapper + npoi,目前在linux + jexus + mono 平台上完美运行。

  • VC创建快捷方式

    VC创建快捷方式

    //得到当前桌面路径
    BOOL GetDesktopPath(TCHAR * pszDesktopPath)
    {
                     LPITEMIDLIST   ppidl = NULL ;
                     if (SHGetSpecialFolderLocation(NULL , CSIDL_DESKTOP, &ppidl) == S_OK )
                    {
                                     BOOL flag = SHGetPathFromIDList (ppidl, pszDesktopPath);
                                    CoTaskMemFree(ppidl);
                                     return flag;
                    }
                     return FALSE ;
    }
    
    //得到快速启动栏的路径
    BOOL GetIEQuickLaunchPath(TCHAR * pszIEQueickLaunchPath)
    {
                     LPITEMIDLIST   ppidl;
                     if (SHGetSpecialFolderLocation(NULL , CSIDL_APPDATA, &ppidl) == S_OK )
                    {
                                     BOOL flag = SHGetPathFromIDList (ppidl, pszIEQueickLaunchPath);
                                     lstrcat (pszIEQueickLaunchPath , _T( "\\Microsoft\\Internet Explorer\\Quick Launch" ));
                                    CoTaskMemFree(ppidl);
                                     return flag;
                    }
                     return FALSE ;
    }
    
    //得到 开始->程序组 的路径
    BOOL GetProgramsPath(TCHAR * pszProgramsPath)
    {
                     LPITEMIDLIST   ppidl;
                     if (SHGetSpecialFolderLocation(NULL , CSIDL_PROGRAMS, &ppidl) == S_OK )
                    {
                                     BOOL flag = SHGetPathFromIDList (ppidl, pszProgramsPath);
                                    CoTaskMemFree(ppidl);
                                     return flag;
                    }
                     return FALSE ;
    }
    
    /*
    函数功能:对指定文件在指定的目录下创建其快捷方式
    函数参数:
    lpszFileName    指定文件,为NULL表示当前进程的EXE文件。
    lpszLnkFileDir  指定目录,不能为NULL。
    lpszLnkFileName 快捷方式名称,为NULL表示EXE文件名。
    wHotkey         为0表示不设置快捷键
    pszDescription  备注
    iShowCmd        运行方式,默认为常规窗口
    */
    
    BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir , LPCTSTR lpszLnkFileName , LPCTSTR lpszWorkDir , WORD wHotkey, LPCTSTR lpszDescription , int iShowCmd = SW_SHOWNORMAL )
    {
                     if (lpszLnkFileDir == NULL)
                                     return FALSE ;
    
                     HRESULT hr;
                     IShellLink      *pLink;  //IShellLink对象指针
                     IPersistFile    *ppf; //IPersisFil对象指针
    
                     //创建IShellLink对象
                    hr = CoCreateInstance(CLSID_ShellLink, NULL , CLSCTX_INPROC_SERVER , IID_IShellLink, (void **)&pLink);
                     if (FAILED (hr))
                                     return FALSE ;
    
                     //从IShellLink对象中获取IPersistFile接口
                    hr = pLink->QueryInterface(IID_IPersistFile, ( void **)&ppf);
                     if (FAILED (hr))
                    {
                                    pLink->Release();
                                     return FALSE ;
                    }
    
                     //目标
                     if (lpszFileName == NULL)
                                    pLink->SetPath( _wpgmptr );
                     else
                                    pLink->SetPath( lpszFileName );
    
                     //工作目录
                     if (lpszWorkDir != NULL)
                    {
                                     //pLink->SetPath(lpszWorkDir);
    
                                    pLink->SetWorkingDirectory( lpszWorkDir );
                    }
    
                     //快捷键
                     if (wHotkey != 0)
                                    pLink->SetHotkey( wHotkey );
    
                     //备注
                     if (lpszDescription != NULL)
                                    pLink->SetDescription( lpszDescription );
    
                     //显示方式
                    pLink->SetShowCmd( iShowCmd );
    
                     //快捷方式的路径 + 名称
                     TCHAR szBuffer[MAX_PATH ];
                     if (lpszLnkFileName != NULL) //指定了快捷方式的名称
                                     wsprintf (szBuffer, _T ( "%s\\%s"), lpszLnkFileDir , lpszLnkFileName );
                     else
                    {
                                     //没有指定名称,就从取指定文件的文件名作为快捷方式名称。
                                     TCHAR *pstr;
                                     if (lpszFileName != NULL)
                                                    pstr = (TCHAR *)wcsrchr(lpszFileName , _T( '\\'));
                                     else
                                                    pstr = (TCHAR *)wcsrchr(_wpgmptr , _T( '\\'));
    
                                     if (pstr == NULL )
                                    {
                                                    ppf->Release();
                                                    pLink->Release();
                                                     return FALSE ;
                                    }
    
                                     //注意后缀名要从.exe改为.lnk
                                     wsprintf (szBuffer, _T ( "%s\\%s"), lpszLnkFileDir , pstr);
                                     int nLen = lstrlen (szBuffer);
                                    szBuffer[nLen - 3] = 'l' ;
                                    szBuffer[nLen - 2] = 'n' ;
                                    szBuffer[nLen - 1] = 'k' ;
                    }
    
                     //保存快捷方式到指定目录下
    
                     //WCHAR  wsz[MAX_PATH];  //定义Unicode字符串
    
                     //MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH);
    
                    hr = ppf->Save(szBuffer, TRUE );
    
                    ppf->Release();
                    pLink->Release();
                     return SUCCEEDED (hr);
    
    }

    调用

    TCHAR wszModulePath[MAX_PATH ];
    ::memset(wszModulePath, 0, sizeof (TCHAR )* MAX_PATH);
    GetModuleFileName (NULL , wszModulePath, MAX_PATH);
    PathAppend (wszModulePath, _T ( "..\\"));
    wcscat_s(wszModulePath, _T ("3D绘图宝.exe" ));
    
    TCHAR wszModulePath2[MAX_PATH ];
    ::memset(wszModulePath2, 0, sizeof (TCHAR )* MAX_PATH);
    GetModuleFileName (NULL , wszModulePath2, MAX_PATH);
    PathAppend (wszModulePath2, _T ( "..\\"));
    
    TCHAR   szPath[MAX_PATH ];
    CoInitialize( NULL );
    
    GetProgramsPath(szPath);
    if (CreateFileShortcut(wszModulePath, szPath, NULL, wszModulePath2, MAKEWORD (VK_F12 , HOTKEYF_CONTROL ), _T ( "")))
    {
    
    }
    
    memset(szPath, 0, sizeof (TCHAR )* MAX_PATH);
    
    GetDesktopPath(szPath);
    if (CreateFileShortcut(wszModulePath, szPath, NULL, wszModulePath2, MAKEWORD (VK_F12 , HOTKEYF_CONTROL ), _T ( "")))
    {
            AfxMessageBox( _T ("软件安装成功欢迎使用。" ));
    }
    
    
    CoUninitialize();
  • VC 获取软件安装列表

    VC 获取软件安装列表

    #include <comdef.h>
    
    #include <wbemidl.h>
    
    #pragma comment ( lib, "wbemuuid.lib")
    #include <string>
    using namespace std;
    
    
    void CdeltoolDlg ::GetSoftwareList()
    {
    
                     HRESULT hres;
                     //Initialize COM.--------------------------------------------
                    hres = CoInitializeEx( NULL , COINIT_MULTITHREADED );
                     if (FAILED (hres))
                    {
    
                                     CString str;
                                    str.Format( _T ("Failed to initialize COM library.Error Code = %d" ), GetLastError());
                                    AfxMessageBox(str);
                    }
                                     //DebugLog::Instance().WriteLog("Failed to initialize COM library. Error Code = %d", GetLastError());
    
                    hres = CoInitializeSecurity(
                                     NULL ,
                                    -1,                          // COM authentication
                                     NULL ,                        // Authentication services
                                     NULL ,                        // Reserved
                                     RPC_C_AUTHN_LEVEL_DEFAULT ,   // Default authentication
                                     RPC_C_IMP_LEVEL_IMPERSONATE , // Default Impersonation
                                     NULL ,                        // Authentication info
                                     EOAC_NONE ,                   // Additional capabilities
                                     NULL                          // Reserved
                    );
    
                     if (FAILED (hres))
                    {
                                     CString str;
                                    str.Format( _T ("Failed to initialize security. Error Code = %d" ), GetLastError());
                                    AfxMessageBox(str);
                                    CoUninitialize();
                                     return ;                    // Program has failed.
                    }
    
                     IWbemLocator *pLoc = NULL ;
                    hres = CoCreateInstance(
                                    CLSID_WbemLocator,
                                    0,
                                     CLSCTX_INPROC_SERVER ,
                                    IID_IWbemLocator, ( LPVOID *)&pLoc);
    
                     if (FAILED (hres))
                    {
                     //             DebugLog::Instance().WriteLog("Failed to create IWbemLocator object. Error Code = %d", GetLastError());
                                     CString str;
                                    str.Format( _T ("Failed to create IWbemLocator object. Error Code = %d" ), GetLastError());
                                    AfxMessageBox(str);
    
                                    CoUninitialize();
                                     return ;                 // Program has failed.
                    }
    
                     IWbemServices *pSvc = NULL ;
                    hres = pLoc->ConnectServer(
                                     _bstr_t (L"ROOT\\CIMV2" ), // Object path of WMI namespace
                                     NULL ,                    // User name. NULL = current user
                                     NULL ,                    // User password. NULL = current
                                    0,                       // Locale. NULL indicates current
                                     NULL ,                    // Security flags.
                                    0,                       // Authority (for example, Kerberos)
                                    0,                       // Context object
                                    &pSvc                    // pointer to IWbemServices proxy
                    );
    
                     if (FAILED (hres))
                    {
                                     CString str;
                                    str.Format( _T ("Could not connect. Error Code = %d" ), GetLastError());
                                    AfxMessageBox(str);
                                     //DebugLog::Instance().WriteLog("Could not connect. Error Code = %d", GetLastError());
                                    pLoc->Release();
                                    CoUninitialize();
                                     return ;                // Program has failed.
                    }
    
                     CString str;
                    str.Format( _T ("Connected to ROOT\\CIMV2 WMI namespace" ));
                     //AfxMessageBox(str);
                     //DebugLog::Instance().WriteLog("Connected to ROOT\\CIMV2 WMI namespace");
    
                    hres = CoSetProxyBlanket(
                                    pSvc,                        // Indicates the proxy to set
                                     RPC_C_AUTHN_WINNT ,           // RPC_C_AUTHN_xxx
                                     RPC_C_AUTHZ_NONE ,            // RPC_C_AUTHZ_xxx
                                     NULL ,                        // Server principal name
                                     RPC_C_AUTHN_LEVEL_CALL ,      // RPC_C_AUTHN_LEVEL_xxx
                                     RPC_C_IMP_LEVEL_IMPERSONATE , // RPC_C_IMP_LEVEL_xxx
                                     NULL ,                        // client identity
                                     EOAC_NONE                     // proxy capabilities
                    );
    
                     if (FAILED (hres))
                    {
                                     CString str;
                                    str.Format( _T ("Could not set proxy blanket. Error code = %d" ), GetLastError());
                                    AfxMessageBox(str);
                                     //DebugLog::Instance().WriteLog("Could not set proxy blanket. Error code = %d", GetLastError());
                                    pSvc->Release();
                                    pLoc->Release();
                                    CoUninitialize();
                                     return ;               // Program has failed.
                    }
    
                     IEnumWbemClassObject * pEnumerator = NULL ;
                    hres = pSvc->ExecQuery(
                                     bstr_t ("WQL" ),
                                     bstr_t ("SELECT * FROM Win32_Product" ), /*Win32_OperatingSystem*/
                                     WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY ,
                                     NULL ,
                                    &pEnumerator);
    
                     if (FAILED (hres))
                    {
                                     CString str;
                                    str.Format( _T ("Query for install software failed. Error code = %d" ), GetLastError());
                                    AfxMessageBox(str);
                                    pSvc->Release();
                                    pLoc->Release();
                                    CoUninitialize();
                                     return ;
                    }
    
                     IWbemClassObject *pclsObj = NULL ;
                     ULONG uReturn = 0;
                     while (pEnumerator)
                    {
                                     //CString str;
                                     //str.Format(_T("********************************"""));
                     //             AfxMessageBox(str);
    
                                                     HRESULT hr = pEnumerator->Next(/*WBEM_INFINITE*//*WBEM_NO_WAIT*/ WBEM_INFINITE , 1, &pclsObj, &uReturn);
    
                                                     if (0 == uReturn)
                                                    {
                                                                     int ma = GetLastError();
                                                                     CString str;
                                                                    str.Format( _T ("GetLastError() == %d" ), GetLastError());
                                                     //             AfxMessageBox(str);
                                                                     break ;
                                                    }
                                                     else
                                                    {
                                                                     VARIANT vtProp;
                                                                     // Get the value of the Name property
                                                                    hr = pclsObj->Get(L"Name" , 0, &vtProp, NULL, NULL);
                                                                     char * lpszName = _com_util::ConvertBSTRToString(vtProp.bstrVal);
    
                                                                    hr = pclsObj->Get(L"InstallLocation" , 0, &vtProp, NULL, NULL);
                                                                     char * lpszInstallLocation = _com_util::ConvertBSTRToString(vtProp.bstrVal);
    
                                                                     USES_CONVERSION ;
                                                                    m_list.InsertItem(0, A2W (lpszName));
                                                                    m_list.SetItemText(0, 1, A2W (lpszInstallLocation));
    
                                                                    VariantClear(&vtProp);
    
                                                                    pclsObj->Release();
                                                    }
    
                    }
    
                     // Cleanup
                     // ========
                    pSvc->Release();
                    pLoc->Release();
                    pEnumerator->Release();
                    CoUninitialize();
    }

    WMI Win32_Product的成员 https://msdn.microsoft.com/en-us/library/aa394378.aspx

    [Provider("MSIProv"), Dynamic]
    class Win32_Product : CIM_Product
    {
      uint16   AssignmentType;
      string   Caption;
      string   Description;
      string   IdentifyingNumber;
      string   InstallDate;
      datetime InstallDate2;
      string   InstallLocation;
      sint16   InstallState;
      string   HelpLink;
      string   HelpTelephone;
      string   InstallSource;
      string   Language;
      string   LocalPackage;
      string   Name;
      string   PackageCache;
      string   PackageCode;
      string   PackageName;
      string   ProductID;
      string   RegOwner;
      string   RegCompany;
      string   SKUNumber;
      string   Transforms;
      string   URLInfoAbout;
      string   URLUpdateInfo;
      string   Vendor;
      uint32   WordCount;
      string   Version;
    };
  • ANSI和UNICODE互转,微软提供,无BUG

    ANSI和UNICODE互转,微软提供,无BUG。

    来源:https://support.microsoft.com/en-us/kb/138813

    /*
    * AnsiToUnicode converts the ANSI string pszA to a Unicode string
    * and returns the Unicode string through ppszW. Space for the
    * the converted string is allocated by AnsiToUnicode.
    */
    
    HRESULT __fastcall AnsiToUnicode( LPCSTR pszA , LPOLESTR * ppszW)
    {
    
                     ULONG cCharacters;
                     DWORD dwError;
    
                     // If input is null then just return the same.
                     if (NULL == pszA)
                    {
                                    * ppszW = NULL ;
                                     return NOERROR ;
                    }
    
                     // Determine number of wide characters to be allocated for the
                     // Unicode string.
                    cCharacters = strlen( pszA ) + 1;
    
                     // Use of the OLE allocator is required if the resultant Unicode
                     // string will be passed to another COM component and if that
                     // component will free it. Otherwise you can use your own allocator.
                    * ppszW = (LPOLESTR )CoTaskMemAlloc(cCharacters * 2);
                     if (NULL == * ppszW)
                                     return E_OUTOFMEMORY ;
    
                     // Covert to Unicode.
                     if (0 == MultiByteToWideChar(CP_ACP , 0, pszA, cCharacters,
                                    * ppszW , cCharacters))
                    {
                                    dwError = GetLastError();
                                    CoTaskMemFree(* ppszW );
                                    * ppszW = NULL ;
                                     return HRESULT_FROM_WIN32(dwError);
                    }
    
                     return NOERROR ;
                     /*
                    * UnicodeToAnsi converts the Unicode string pszW to an ANSI string
                    * and returns the ANSI string through ppszA. Space for the
                    * the converted string is allocated by UnicodeToAnsi.
                    */
    }
    
    HRESULT __fastcall UnicodeToAnsi( LPCOLESTR pszW , LPSTR * ppszA)
    {
    
                     ULONG cbAnsi, cCharacters;
                     DWORD dwError;
    
                     // If input is null then just return the same.
                     if (pszW == NULL)
                    {
                                    * ppszA = NULL ;
                                     return NOERROR ;
                    }
    
                    cCharacters = wcslen( pszW ) + 1;
                     // Determine number of bytes to be allocated for ANSI string. An
                     // ANSI string can have at most 2 bytes per character (for Double
                     // Byte Character Strings.)
                    cbAnsi = cCharacters * 2;
    
                     // Use of the OLE allocator is not required because the resultant
                     // ANSI  string will never be passed to another COM component. You
                     // can use your own allocator.
                    * ppszA = (LPSTR )CoTaskMemAlloc(cbAnsi);
                     if (NULL == * ppszA)
                                     return E_OUTOFMEMORY ;
    
                     // Convert to ANSI.
                     if (0 == WideCharToMultiByte(CP_ACP , 0, pszW, cCharacters, * ppszA ,
                                    cbAnsi, NULL , NULL ))
                    {
                                    dwError = GetLastError();
                                    CoTaskMemFree(* ppszA );
                                    * ppszA = NULL ;
                                     return HRESULT_FROM_WIN32(dwError);
                    }
                     return NOERROR ;
    
    }
    

    用法

    LPOLESTR pszFileNameW;
    AnsiToUnicode(lpszName, &pszFileNameW);
    m_list.InsertItem(0, pszFileNameW);

    方法2:

    char * lpszName = "ABC";
    USES_CONVERSION ;
    TCHAR *p = A2W (lpszName);
    
    //同样,还有 W2A

    方法3

    #include <cstdlib>
    
    char * lpszName = "ABC";
    TCHAR wszName[32];
    mbstowcs(wszName, lpszName, 32);
    
    //UINCODE转ANSI
    wcstombs(lpszName, wszName, 32);

  • Windows批处理查找并结束进程

    Windows批处理查找并结束进程,查找进程名中包含Note的进程,并结束掉它

    wmic Path win32_process Where "CommandLine Like '%%Note%%'" Call Terminate
    pause