zoukankan      html  css  js  c++  java
  • VC常用代码收集

     

    根据文件句柄,获取文件名

    #include <windows.h>

    #include <stdio.h>

    #include <tchar.h>

    #include <string.h>

    #include <psapi.h>

     

    #define BUFSIZE 512

     

    BOOL GetFileNameFromHandle(HANDLE hFile) 

    {

      BOOL bSuccess = FALSE;

      TCHAR pszFilename[MAX_PATH+1];

      HANDLE hFileMap;

     

      // Get the file size.

      DWORD dwFileSizeHi = 0;

      DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); 

     

      if( dwFileSizeLo == 0 && dwFileSizeHi == 0 )

      {

         printf("Cannot map a file with a length of zero.\n");

         return FALSE;

      }

     

      // Create a file mapping object.

      hFileMap = CreateFileMapping(hFile, 

                        NULL, 

                        PAGE_READONLY,

                        0, 

                        1,

                        NULL);

     

      if (hFileMap) 

      {

        // Create a file mapping to get the file name.

        void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1);

     

        if (pMem) 

        {

          if (GetMappedFileName (GetCurrentProcess(), 

                                 pMem, 

                                 pszFilename,

                                 MAX_PATH)) 

          {

     

            // Translate path with device name to drive letters.

            TCHAR szTemp[BUFSIZE];

            szTemp[0] = '\0';

     

            if (GetLogicalDriveStrings(BUFSIZE-1, szTemp)) 

            {

              TCHAR szName[MAX_PATH];

              TCHAR szDrive[3] = TEXT(" :");

              BOOL bFound = FALSE;

              TCHAR* p = szTemp;

     

              do 

              {

                // Copy the drive letter to the template string

                *szDrive = *p;

     

                // Look up each device name

                if (QueryDosDevice(szDrive, szName, BUFSIZE))

                {

                  UINT uNameLen = _tcslen(szName);

     

                  if (uNameLen < MAX_PATH) 

                  {

                    bFound = _tcsnicmp(pszFilename, szName, 

                        uNameLen) == 0;

     

                    if (bFound) 

                    {

                      // Reconstruct pszFilename using szTemp

                      // Replace device path with DOS path

                      TCHAR szTempFile[MAX_PATH];

                      _stprintf(szTempFile,

                                TEXT("%s%s"),

                                szDrive,

                                pszFilename+uNameLen);

                      _tcsncpy(pszFilename, szTempFile, MAX_PATH);

                    }

                  }

                }

     

                // Go to the next NULL character.

                while (*p++);

              } while (!bFound && *p); // end of string

            }

          }

          bSuccess = TRUE;

          UnmapViewOfFile(pMem);

        } 

     

        CloseHandle(hFileMap);

      }

      printf("File name is %s\n", pszFilename);

      return(bSuccess);

    }

    开机自动运行

      其中strPath参数表示要设置为自运行的程序的绝对路径。当设置成功时返回true,否则返回false

    BOOL SetAutoRun(CString strPath)//开机自动运行

    {

       CString str;

       HKEY hRegKey;

       BOOL bResult;

       str=_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run");

       if(RegOpenKey(HKEY_LOCAL_MACHINE, str, &hRegKey) != ERROR_SUCCESS) 

           bResult=FALSE;

       else

       {

           _splitpath(strPath.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL);

           strPath.ReleaseBuffer();

           str.ReleaseBuffer();

           if(::RegSetValueEx( hRegKey,

                               str,

                               0,

                               REG_SZ,

                               (CONST BYTE *)strPath.GetBuffer(0),

                               strPath.GetLength() ) != ERROR_SUCCESS)

              bResult=FALSE;

           else

              bResult=TRUE;

           strPath.ReleaseBuffer();

       }

       return bResult;

    }        

     

    使计算机休眠

    void XiuMian() 

    {

     if(MessageBox("确实要休眠吗?","关机程序",MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION)==IDYES)

     {

      HANDLE hToken;

      TOKEN_PRIVILEGES tp;

      LUID luid;

      if(::OpenProcessToken(GetCurrentProcess(),

             TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,

             &hToken))

      {

       ::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);

       tp.PrivilegeCount=1;

       tp.Privileges[0].Luid =luid;

       tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;

       ::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);

      }

      ::SetSystemPowerState(false,true); 

     }

    }

  • 相关阅读:
    GLSL逐像素光照 【转】
    GLSL逐顶点光照[转]
    GLSL 基础量定义 【转】
    GLSL纹理贴图 【转】
    NormalMap 贴图 [转]
    glsl镜面水倒影的实现[转]
    C#调用C++Dll封装时遇到的一系列问题【转】
    在C#中使用C++编写的类——用托管C++进行封装[转]
    GEOS 使用的例子
    昌平区2015年义务教育阶段入学工作意见 (含非京籍)
  • 原文地址:https://www.cnblogs.com/flying_bat/p/899341.html
Copyright © 2011-2022 走看看