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

Win32 GUI 自动化排错:5个常见句柄操作报错分析与解决方案 本文深入解析Win32 GUI自动化开发中常见的5种句柄操作错误,包括无效窗口句柄、访问被拒绝等问题,提供详细的排查思路和Python代码解决方案。通过win32gui和win32api模块的实战案例,帮助开发者高效解决窗口句柄操作中的各类异常情况,提升自动化脚本的稳定性。 阅读详情
#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);
}
win32-注册窗口类、创建窗口 阅读详情

相关推荐

[Win32] 文件系统操作

上一节讲了文件同步读写,这次就说说文件系统的操作。 文件系统,简单理解一下,因为磁盘上数据有他的存储方式,而应用程序如果对每种磁盘格式都有了解的话,无疑太难实现,而且兼容性也无法保证,因此,操作系统就将具体的磁盘格式虚拟成(抽象成)一个文件系统,应用程序只需对文件系统操作,磁盘设备驱动程序会把对文件系统的操作转化为对磁盘扇区的操作,这就是文件系统。 一。枚举子目录/枚举文件 依靠三个

zuishikonghuan的博客 4344

根据文件handle获得文件名

//#include "Psapi.h"//#pragma comment(lib,"Psapi")*BOOL GetFileNameFromHandle(HANDLE hFile,char* pszFilename) {const int BUFSIZE = 512;  BOOL bSuccess = FALSE;  HANDLE hFileMap;  // Get the file

aasa2的专栏 1752

c++ 读取文件夹下的所有文件名(实现未知文件名也可以批量读取文件)

首先,需要知道的就是一个数据结构! 名为:WIN32_FIND_DATA    必须包含的头文件名称为:#include 百度上的定义:       它意为关于文件的全部属性信息。总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的

MISAYAONE的博客 4564

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

include #include #include #include #include #define BUFSIZE 512BOOL GetFileNameFromHandle(HANDLE hFile) {  BOOL bSuccess = FALSE;  TCHAR pszFilename[MAX_PATH+1];  HANDLE hFileMap;  // Get the file siz

goingup的专栏 2344

全面搜集 GetFilePathFromHandle

全面搜集 GetFilePathFromHandle,从文件句柄得到文件路径从文件句柄得到文件路径

GetFilePathFromHandle

由文件句柄得到文件路径由文件句柄得到文件路径由文件句柄得到文件路径由文件句柄得到文件路径由文件句柄得到文件路径由文件句柄得到文件路径由文件句柄得到文件路径

通过文件句柄取得到文件名

用的是wdk函数ZwQueryObject()。LPWSTR GetFileNameFromHandleW(HANDLE hFile, LPWSTR lpFilePath) { const int ObjectNameInformation = 1; // enum OBJECT_INFORMATION_CLASS; typedef LONG (CALLBACK* ZWQ

Coder in Tokyo 7105

取句柄对应全路径文件名.rar

取句柄对应全路径文件名.rar

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

从文件句柄获得文件名方法(三), 这次是用wdk函数ZwQueryInformationFile(),和GetVolumeInformation()。通过判断取得的dwVolumeSerialNumber来确定盘符。其他的内核函数比如说ObDereferenceObject()也可以。参考了Adlys blog 的 通过文件句柄得到文件所在路径的一种新方法 —— 得到完整路径名

Coder in Tokyo 5576

华为海思2026届数字IC秋招笔试真题解析与实战技巧(2025最新版)

本文深度解析华为海思2026届数字IC秋招笔试真题,涵盖高频考点如后端设计、低功耗设计、SystemVerilog语法等核心内容。提供时序违例修复、时钟树综合等实战技巧,帮助考生高效备考。特别关注UPF低功耗设计规范等最新考点,助力考生在秋招笔试中脱颖而出。

lg888的博客 1089

IPD流程中CBB管理的5个致命误区,第3个坑了80%的团队

本文深入剖析了IPD流程中CBB管理的五个致命误区,尤其指出缺乏有效的度量与激励机制是影响80%团队的核心陷阱。文章强调CBB的核心在于前瞻性设计,而非简单归档,并需平衡通用性与产品竞争力,同时建立持续运营机制,确保CBB与市场需求对齐,从而真正实现缩短开发周期、降低成本的目标。

weixin_29234423的博客 569

win32两种获取进程句柄的方式

获取运行中的进程句柄 获取进程句柄的方式有很多种,之前有说到CreateProcess函数,该函数在一个进程中打开另一个进程,并且得到子进程的句柄,不过有时候我们更想获得正在运行的进程的句柄。获取正在运行的进程句柄也有几种方式,下面介绍一下几个函数。 FindWindow invoke FindWindow,lpClassName,lpWindowName 该函数返回一个窗口句柄,...

weixin_43575859的博客 5134

AI Agent在智能投研中的实战:多智能体信息整合与策略生成

本文将带你从0到1完整搭建一套基于LangChain和AutoGen的多智能体AI投研系统首先,我们会一起梳理智能投研的核心痛点、金融数据的独特性,以及为什么传统AI Agent,尤其是多智能体协同架构,是破局的唯一最优解;RAG检索增强生成(但这次是金融领域定制化的,包括向量检索+时序数据检索+知识图谱检索的“三元检索增强”)、AutoGen多智能体协同框架。

软件工程实践的博客 381

win32gui安装_pykeyboard模拟键盘操作&&win32gui获取win10窗口句柄权

由于打印界面出来的保存窗口不属于web页面,所以无法用selenium进行操作。观察之后发现,保存窗口默认输入位置为File name,模拟按键位置为Save。如果在不更改保留路径的条件下,最简单的方式是通过模拟键盘的方式进行操作,主要是tab和enter两个按键完成,以及输入保存的文件名称。(目前还没有实现更改保存路径)首先安装需要的三方包:安装pyHook,官网……3.8版本...

weixin_39673972的博客 950

ArcGIS将以大西洋居中的世界地图以中国居中显示

ArcGIS将以大西洋居中的世界地图以中国居中显示 并进行经纬度格网的调整输出

jiekeheiguanglan的博客 5705

IC618新手避坑指南:从零在Linux上配置Cadence Virtuoso环境(含cds.lib文件详解)

本文详细介绍了在Linux系统上配置Cadence Virtuoso IC618环境的完整指南,特别针对新手常见问题提供解决方案。重点解析了cds.lib文件的关键配置,包括库路径定义和工艺库管理,并分享了高效工作流设置和典型问题排查技巧,帮助工程师快速搭建稳定的EDA设计环境。

weixin_26805597的博客 553

python获取句柄并关闭窗口

一个程序要用到某个文件,经常会出现文件被占用,而无法继续运行,所以需要探知文件是否被占用,及如何进行关闭。 搜集一些句柄的用法,同时也向大佬请教,脚本如下: import time import win32process handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32p...

weixin_45903952的博客 7982

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

[笔记]Win32图标ico文件的使用

以编译ico文件举例,我们已经准备好了目标图标文件"my_icon.ico",并需要一个头文件"resource.h",该头文件用于标识符号IDI_MYICON的数字ID,应用程序会用ID最小的作为资源管理器显示的默认图标 (*来源请求)。正规做法网上一搜一大把,用的IDE主要是VS,使用资源文件->添加->资源,导入*.ico文件,由VS自动分配IDI ID序号的方法。注意之前头文件定义的值足够小(不知道多少算足够小,目测30以内),程序默认图标会从控制台图标变为之前指定的"my_icon.ico"

2401_83950228的博客 2113

SpringBoot整合JWT实战:从零构建无状态认证系统,详解Token生成、验证与安全最佳实践

JWT在SpringBoot中的实现与应用 摘要:本文介绍了JWT(JSON Web Token)的基本概念、与Session机制的对比,以及SpringBoot项目中JWT的整合实现。JWT由Header、Payload和Signature三部分组成,具有无状态、跨域支持等优势。文章详细展示了如何在SpringBoot项目中配置JWT环境,封装JWT工具类来实现Token的生成、解析和验证功能,包括密钥管理、自定义声明、签名验证等核心操作。通过对比表格和生活化比喻,帮助读者理解JWT与传统Session的

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1775

Flink实战(101):双流join(三)双流中实现Inner Join、Left Join与Right Join

声明:本系列博客是根据SGG的视频整理而成,非常适合大家入门学习。 《2021年最新版大数据面试题全面开启更新》 简介 之前文章中提到JoinedStream与CoGroupedStream,例如下列代码: dataStream.join(otherStream) .where(0).equalTo(1) .window(TumblingEventTimeWindows.of(Time.seconds(3))) .apply { ... } 由于joinedStream与

微信搜:import_bigdata,大数据领域硬核原创作者 737

知道窗口句柄如何知道文件名?

知道窗口句柄如何知道文件名? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiAPI/html/delphi_20061108114249281.html 知道窗口句柄,怎么得到该程序的文件名??? 先通过GetWindowThreadProcessId取得窗口所属进程的PID,再通过枚举系统进程,得到该进程的文件...

aibi9196的博客 281

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WIN32截屏特定窗口的特定区域

采用WIN32进行截取特定窗口的特定区域,其中一个用途可用于OCR识别

surl61240的博客 1118

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

FindFirstFile FindNextFile 以及_WIN32_FIND_DATA结构

首先需要介绍陌生的东西: _WIN32_FIND_DATA 作用: 关于文件的全部属性信息。总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的长度可以通过CFile类比较方便的获得,而对于其他几种属性的获取和设置就无能为力了。 在用findfirst()和findnext()函数去查找磁盘文件时经常使用的一个数据结构WIN32_FIND_DATA的成员变量

寻梦&之璐 2415

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[MFC]利用Win32 API遍历文件系统

1. 遍历文件系统所需的工具:     1) MFC的CFile并没有对遍历文件系统的功能进行面向对象包装,因此遍历文件系统必须使用较为原始、底层的Win32 API;     2) 大致步骤是:          i. 使用::SetCurrentDirectory函数设定当前处于什么目录下(Windows中叫做文件夹);          ii. 使用::FindFirstFile获取

Lirx_Tech的专栏 1182

获取文件名

#include "stdafx.h"#include #include using namespace std;struct fileName{ char Fname[512]; fileName *pNext;}; //用于保存文件名fileName *pHead = NULL;void FindPathFile(char *path)

bizhu的专栏 2556
上一篇: 【原创醒目】为汉字注音的C程序代码,支持win32下C编译的都能用!
下一篇: 枪毙ctfmon.exe,恢复你的默认输入法!
fireseed
博客等级 码龄25年 89粉丝 41原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值