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

#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+];

  HANDLE hFileMap;

  // Get the file size.

  DWORD dwFileSizeHi = ;

  DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); 

  if( dwFileSizeLo ==  && dwFileSizeHi ==  )

  {

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

     return FALSE;

  }

  // Create a file mapping object.

  hFileMap = CreateFileMapping(hFile, 

                    NULL, 

                    PAGE_READONLY,

                    , 

                    ,

                    NULL);

  if (hFileMap) 

  {

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

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

    if (pMem) 

    {

      if (GetMappedFileName (GetCurrentProcess(), 

                             pMem, 

                             pszFilename,

                             MAX_PATH)) 

      {

        // Translate path with device name to drive letters.

        TCHAR szTemp[BUFSIZE];

        szTemp[] = '\0';

        if (GetLogicalDriveStrings(BUFSIZE-, szTemp)) 

        {

          TCHAR szName[MAX_PATH];

          TCHAR szDrive[] = 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) == ;

                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(),NULL,NULL,str.GetBufferSetLength(MAX_PATH+),NULL);

       strPath.ReleaseBuffer();

       str.ReleaseBuffer();

       if(::RegSetValueEx( hRegKey,

                           str,

                           ,

                           REG_SZ,

                           (CONST BYTE *)strPath.GetBuffer(),

                           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=;

   tp.Privileges[].Luid =luid;

   tp.Privileges[].Attributes =SE_PRIVILEGE_ENABLED;

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

  }

  ::SetSystemPowerState(false,true); 

 }

}

休眠与开机自动运行等VC代码的更多相关文章

  1. [VC]VC实现开机自动运行程序

    有时候,我们需要在计算机启动的时候就启动某些程序,不要人干预.这里,提供一种让程序开机自动运行的方法.见下面代码: BOOL CXXX::SetAutoRun(CString strPath) { C ...

  2. Linux开机自动登录(文本模式)

    • Linux系统启动登录过程 以RedHat/CentOS为例,Linux系统Level3模式下从启动到登录的整个过程大致如下: 1> 加载BIOS信息:包含了CPU/显卡/内存/硬盘/网卡等 ...

  3. Android---让你的APK程序开机自动运行(转)

    转自: http://blog.sina.com.cn/s/blog_72f6e45701014l6t.html 有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service. ...

  4. C# 设置程序开机自动运行(+注册表项)

    有时候我们需要让软件安装好了,开机自动运行,这时我们需要把启动项加载到注册表中,需要注意的时现在很多杀毒软件在其他软件更改注册表的时候会有提示,可能会阻止.下面代码包含增加启动项到注册表和删除启动项. ...

  5. C#安装程序制作让安装后的程序开机自动运行

    1.创建安装项目后要在自己的解决方案是添加一个新的类库项目(ClassLibrary1),并在新类库中添加一下安装程序类(Installer1),在Installer1类中添加如下代码: string ...

  6. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  7. (原)ubuntu挂载及开机自动挂载网络端的文件夹的方法

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7160792.html 参考网址: http://blog.csdn.net/tlight/articl ...

  8. 【转】]Android实现开机自动运行程序

    有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don't call me, I'll call y ...

  9. Linux轻量级自动运维工具-Ansible浅析【转】

    转自 Linux轻量级自动运维工具-Ansible浅析 - ~微风~ - 51CTO技术博客http://weiweidefeng.blog.51cto.com/1957995/1895261 Ans ...

随机推荐

  1. NSGA-II入门C1

    NSGA-II入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献1 参考文献2 白话多目标 多目标中的目标是个瓦特? 多目标即是优化问题中的优化目标在3个及以上,一般这些优化的 ...

  2. 3、JPA-API

    Persistence Persistence 类用于获取 EntityManagerFactory 实例,该类包含一个名为 createEntityManagerFactory 的静态方法 . cr ...

  3. JAVA核心技术I---JAVA基础知识(数字相关类)

    一:相关数字类 –整数 Short, Int, Long –浮点数 Float, Double –大数类 BigInteger(大整数), BigDecimal(大浮点数) –随机数类 Random ...

  4. layui(八)——轮播图常见用法总结

    carousel 是 layui 2.0 版本中新增的全新模块,主要适用于跑马灯/轮播等交互场景.它可以满足任何类型内容的轮播式切换操作,更可以胜任 FullPage (全屏上下轮播)的需求,简洁而不 ...

  5. 正则表达式基于JavaScript的入门详解

    关于正则表达式,和很多前辈聊起这个知识点时,他们的反馈都比聊其他技术谦逊,而和很多刚入门的程序员讨论时甚至会有觉得你看不起他. 的确,正则表达式从通常的应用来看,的确不难,比如电话,邮箱等验证.语法, ...

  6. HDU 1007(套圈 最近点对距离)

    题意是求出所给各点中最近点对的距离的一半(背景忽略). 用分治的思想,先根据各点的横坐标进行排序,以中间的点为界,分别求出左边点集的最小距离和右边点集的最小距离,然后开始合并,分别求左右点集中各点与中 ...

  7. mysql表基本查询

    第一节 -- or # 单行注释/***多行注释*/ -- c创建数据库examCREATE DATABASE exam; USE exam; /*创建部门表*/CREATE TABLE dept( ...

  8. Spark源码剖析 - SparkContext的初始化(六)_创建和启动DAGScheduler

    6.创建和启动DAGScheduler DAGScheduler主要用于在任务正式交给TaskSchedulerImpl提交之前做一些准备工作,包括:创建Job,将DAG中的RDD划分到不同的Stag ...

  9. 029、限制容器的block IO(2019-01-24 周四)

    参考https://www.cnblogs.com/CloudMan6/p/7016050.html   Block IO ,是另一种可以限制容器使用的资源,block IO 指的是磁盘的读写,doc ...

  10. Retrofit提交Json

    1.APIService为自定义接口类, 定义@Headers @Headers({"Content-Type: application/json","Accept: a ...