经典win32代码之从文件句柄获得文件名

原创 2004年06月27日 22:48:00
#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];

  // Get the file size.
  DWORD dwFileSizeHi = 0;
  DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi);

  // Create a file mapping object.
  HANDLE hFileMap = CreateFileMapping(hFile,
                          NULL,
                          PAGE_READONLY,
                          0,
                          dwFileSizeLo,
                          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);
}

通过文件句柄取得到文件名(三)

从文件句柄获得文件名方法(三), 这次是用wdk函数ZwQueryInformationFile(),和GetVolumeInformation()。通过判断取得的dwVolumeSerialNumb...
  • zhengdy
  • zhengdy
  • 2010年03月25日 12:44
  • 3217

win32 API窗口句柄的获得——我的经验

初次写文档,文笔不通畅的地方,以及理解错误之处望各位朋友多多指正!这篇文章是关于如何获取窗口句柄,以及有哪些函数可供使用的简单讨论!可适用于vc、bcb(其他的我没有试,估计可以),本人在bcb环境下...
  • lizsss
  • lizsss
  • 2002年11月10日 10:51
  • 1810

win32 获取窗口句柄的方法

win32 获取窗口句柄的方法   第一种方法是根据窗口句柄值获取窗口句柄 使用spy++获取指定窗口的窗口句柄值,因为句柄值是16进制数,所以前面加0x,然后进行强制转换为HWND类型。 ...
  • yuanmeng567
  • yuanmeng567
  • 2013年12月25日 12:37
  • 1967

如何获取控制台窗口句柄 (HWND)

摘要 详细信息 示例代码 属性 提供反馈 概要 它将会有助于处理与控制台应用程序关联的窗口。Win32 API 没有直接的方法用于获...
  • coredoor
  • coredoor
  • 2013年02月03日 22:45
  • 3553

根据进程句柄获得可执行文件路径的几种方法

转载自: http://blog.csdn.net/hellokandy/article/details/52160077 通过进程句柄,获得可执行文件的路径,主要有以下几种方法: 第一种...
  • china_jeffery
  • china_jeffery
  • 2017年11月28日 10:15
  • 68828

如何获得窗口句柄以及WIN32+API参考大全

在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API函数。这些函数在程序员手中犹如"积木块"一样,可搭建出各种界面丰富、功能灵活的应用程序。不过,由于这些函数结构...
  • lw001x
  • lw001x
  • 2013年11月26日 16:08
  • 2154

通过进程名或进程ID获取进程句柄,窗口句柄

1. 通过进程名获取进程ID BOOL CFileOperation::KillProcessFromName(CString strProcessName) { //创建进程快照(TH32CS...
  • Meta_Cpp
  • Meta_Cpp
  • 2014年06月26日 16:22
  • 3798

API 根据句柄 获得进程可执行文件路径的几种方法

想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好...
  • zjccsg
  • zjccsg
  • 2016年07月16日 20:00
  • 948

得到窗口句柄的几种方法

最近一直在做MFC的项目,界面想要做的出色,窗口一定要操作熟练,那就得依靠窗口的句柄了。 转载了一下得到窗口句柄的几种方法: AfxGetMainWnd AfxGetMainWnd获取自身窗口句...
  • jigetage
  • jigetage
  • 2016年06月04日 01:05
  • 3757

VB和VB.NET中获得其他窗体控件句柄

http://fengzhixue168.blog.163.com/blog/static/95761592009648525675/   一、必不可少的API函数               1...
  • genzhu_li
  • genzhu_li
  • 2013年07月18日 16:19
  • 2891
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典win32代码之从文件句柄获得文件名
举报原因:
原因补充:

(最多只允许输入30个字)