文件句柄名称怎么获得(通过文件句柄获取文件信息)
1. 通过文件句柄获取文件信息
Win32进程间通信的方式主要有:
(1)剪贴板(Clip Board);
(2)动态数据交换(Dynamic Data Exchange);
(3)部件对象模型(Component Object Model);
(4)文件映射(File Mapping);
(5)邮件槽(Mail Slots);
(6)管道(Pipes);
(7)Win32套接字(Socket);
(8)远程过程调用(Remote Procedure Call);
(9)WM_COPYDATA消息(WM_COPYDATA Message)。 在WIN32中,可使用在PSAPI .DLL中提供的Process status Helper函数帮助我们获取进程信息。
(1)EnumProcesses()函数可以获取进程的ID,其原型为:
BOOL EnumProcesses(DWORD * lpidProcess, DWORD cb, DWORD*cbNeeded);
参数lpidProcess:一个足够大的DWORD类型的数组,用于存放进程的ID值;参数cb:存放进程ID值的数组的最大长度,是一个DWORD类型的数据;
参数cbNeeded:指向一个DWORD类型数据的指针,用于返回进程的数目;
函数返回值:如果调用成功,返回TRUE,同时将所有进程的ID值存放在lpidProcess参数所指向的数组中,进程个数存放在cbNeeded参数所指向的变量中;如果调用失败,返回FALSE。
(2)GetModuleFileNameExA()函数可以实现通过进程句柄获取进程文件名,其原型为:
DWORD GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule,LPTSTR lpstrFileName, DWORD nsize);
参数hProcess:接受进程句柄的参数,是HANDLE类型的变量;
参数hModule:指针型参数,在本文的程序中取值为NULL;
参数lpstrFileName:LPTSTR类型的指针,用于接受主调函数传递来的用于存放进程名的字符数组指针;
参数nsize:lpstrFileName所指数组的长度;
函数返回值:如果调用成功,返回一个大于0的DWORD类型的数据,同时将hProcess所对应的进程名存放在lpstrFileName参数所指向的数组中;如果调用失败,则返回0。
通过下列代码就可以遍历系统中的进程,获得进程列表:
//获取当前进程总数
EnumProcesses(process_ids, sizeof(process_ids), &num_processes);
//遍历进程
for (int i = 0; i < num_processes; i++)
{
//根据进程ID获取句柄
process[i] = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0,
process_ids[i]);
//通过句柄获取进程文件名
if (GetModuleFileNameExA(process[i], NULL, File_name, sizeof(fileName)))
cout << fileName << endl;
}
2. 通过句柄获取窗口内容
句柄这一概念是MFC里的一个类,MFC有专门的函数来获取窗口句柄。HWNDhwnd;hwnd=CreateWindow("myownwindowshandle","jaycnvip",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL)
;这是用一个句柄变量来保存新创建的窗口句柄。
其它如:通过窗口标题获取窗口句柄CWnd*pWnd=FindWindow(_T("#32770"),_T("QQ用户登录"))
;CWnd有个成员函数HWNDGetSafeHwnd()const;在对话框类的成员函数里用HWNDhwnd=GetSafeHwnd();得到的hwnd就是句柄了
3. 文件句柄是文件的识别依据
是不是取某个程序的窗口句柄?我以前写辅助的时候弄过使用的API函数是findWindow首先声明一下API在你窗口最顶的位置上写上Private Declare Function 取窗口句柄 Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long'由于VB支持中文的 我就定义成 取窗口句柄 这个了 '在窗体中添加一个按钮里面放进下面代码就OK了Private Sub Command1_Click()Dim 窗口句柄 As Long '声明窗口句柄变量存储窗口句柄 = 取窗口句柄(vbNullString, "新建 文本文档.txt - 记事本") '取窗口标题的句柄 把得到窗口标题句柄赋予给刚才 窗口句柄 这变量里If 窗口句柄 = 0 Then '判断窗口句柄是否等于0 如果等于0表示无法找到窗口句柄 MsgBox "无法找到需要的窗口句柄"Else MsgBox "已找到窗口句柄 句柄数为:" & 窗口句柄End IfEnd Sub纯手工+VB写出来的代码 完全不是自己找的
4. 通过文件句柄获取文件信息的方法有
Linux文件数打开数 查看当前系统最大的文件打开数, 在linux终端中输入ulimit -a “open files”参数选项后面的数值就是当前系统支持的最大打开文件数 修改linux最大文件打开数 如果要修改linux最大文件打开数,可以通过参数命令 unlimit -n 后面接需要设置的文件数量。
设置好之后,再次查看 unlimit -a 你会发现已经设置为新的数量了 设置好之后,再次编辑修改重启设置的服务,已经没有刚刚那个1024文件数限制的报错提示 其他修改方法 除此之外,如果针对不同的用户。
也可以通过编辑修改 /etc/rc.local文件设置环境变量,添加 unlimit -n ,重启之后一般就自动设置好了 查看系统句柄文件数 当前系统文件句柄的最大数目,只用于查看,不能设置修改 cat /proc/sys/fs/file-max 查看进程打开文件数 如果需要查看所有进程的文件打开数,命令lsof |wc -l
5. 文件句柄怎么看
句柄无效处理方法:此警告音是否由于安装了第三方软件后提示的,如果是建议卸载掉不要使用,或查看是不是游戏本身遇到了问题,可以卸载重新下载安装。
系统不能加载用户配置, 但能加载默认配置。
6. 查看文件句柄的命令
1.首先打开python的编辑器pycharm。
2.然后再文件中使用open 函数来打开文件,格式:open(文件地址,文件类型)。例如:f=open("1.txt",'r')表示打开1.txt这个文件,打开方式是只读的打开方式。
3.然后通过read函数将文件中的内容读取出来。b=f.read()。
4.读取完毕之后,我们要记得将打开文件的句柄关掉,使用close关掉即可。f.close()。
5.接着我们将文件内容打印出来。print(b)。
6.点击顶部的菜单栏run这个运行命令。
7.在下方的控制台我们就可以看到从文件中读取的内容了!
7. 如何获取文件句柄
现理解的句柄有以下两种意义:
第一种是指程序设计;
第二种是指Windows编程。现在大部分都是指程序设计、程序开发这类。
句柄解释也有以下两种:
第一种解释:句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
第二种解释:句柄是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例。
例如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但这里的句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。
8. 文件句柄获取文件名
这是操作系统里的一个概念,句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。
WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。
从数据类型上来看它只是一个16位的无符号整数。
应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。
如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。
对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢? 为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。
Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。
这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。
这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
句柄地址(稳定)→记载着对象在内存中的地址----→对象在内存中的地址(不稳定)→实际对象 本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。
假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。