为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[精华版]怎么得到已经打开的文件的句柄

2017-12-09 13页 doc 43KB 32阅读

用户头像

is_792768

暂无简介

举报
[精华版]怎么得到已经打开的文件的句柄[精华版]怎么得到已经打开的文件的句柄 怎么得到已经打开的文件的句柄 我想在自己的程序中打开一个正在使用的文件,比如记事本或word打开的文件,不知道怎 么做,请大家不吝赐教。 最佳答案 FindWindow 获得窗口句柄 OpenProcess 获得进程句柄 具体参数查看MSDN FindWindow The FindWindow function retrieves a handle to the top-level window whose class name and window name match ...
[精华版]怎么得到已经打开的文件的句柄
[精华版]怎么得到已经打开的文件的句柄 怎么得到已经打开的文件的句柄 我想在自己的程序中打开一个正在使用的文件,比如记事本或word打开的文件,不知道怎 么做,请大家不吝赐教。 最佳 FindWindow 获得窗口句柄 OpenProcess 获得进程句柄 具体参数查看MSDN FindWindow The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search. FindWindow函数根据给定的窗体类名称、窗体名称的字符串搜索父窗体并返回其窗体句 柄。这个函数并不搜索子窗体。这个函数并不完成一个事件感知的搜索。 To search child windows, beginning with a specified child window, use the FindWindowEx function. 要搜索给定窗体的子窗体,使用FindWindowEx函数。 Syntax 语法 HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName ); Parameters 参数 lpClassName [in] Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero. [输入]一个以零作为终结符的字符串指针,给定窗体的类名称或由先前执行RegisterClass 或RegisterClassEx函数创建的类原子,类原子的低位两个字节必须是lpClassName参数, 高位两个字节必须是零。 If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names. 如果lpClassName指针指向字符串,它就给定了窗体的类名称。类名称可以是RegisterClass 或RegisterClassEx注册的任意名称,或者是任何预先定义好的控件类名称。 If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter. 如果lpClassName是空指针,函数将按照lpWindowName参数搜索所有窗体。 lpWindowName [in] Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match. [输入]一个以零作为终结符的字符串指针,给定窗体名称(标题)。如果这个参数是空指针, 函数搜索时将忽略窗体名称。 Return Value 函数返回值 If the function succeeds, the return value is a handle to the window that has the specified class name and window name. 如果函数执行成功,返回值是一个给定的窗体类名称和窗体名称的窗体句柄。 If the function fails, the return value is NULL. To get extended error information, call GetLastError. 如果函数执行失败,返回值为零。执行GetLastError函数获得更多的错误信息。 看懂了MSDN就知道了这个函数是查找父窗体句柄的。 比如现在你这个帖子的IE浏览器窗体,它的窗体类名称是"IEFrame",窗体名称就是"百度 _vb吧_想问问findwindow(api)的具体用 法! - Microsoft Internet Explorer"。 所以现在这个窗体的句柄就这样来获得: hwnd=FindWindow("IEFrame","百度_vb吧_想问问findwindow(api)的具体用法! - Microsoft Internet Explorer") 请问诸位高 手,findwindo w这个函数怎 么使用? 请问诸位高手,findwindow这个函数怎么使 用? 小弟又来打扰了! 回答者长命百岁!阖家美满! 我是因为这个才问大家的 If Findwindow('IExplorer','baidu登陆 ') = 0 Then ....键盘 Else Close.. 作者:风筝1991 2006-2-6 12:27 回复此发言 2 回复:请问诸位高手,findwindow这个函数怎么使用? if findwindow(窗口类名,窗口标题)<>0 then 记录键盘 作者:222.217.206.* 2006-2-6 14:31 回复此发言 3 回复:请问诸位高手,findwindow这个函数怎么使用? FindWindow VB声明 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 说明 寻找窗口列中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口 的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程 序的标题) 返回值 Long,找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 参数表 参数 类型及说明 lpClassName String,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类 lpWindowName String,指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题 注解 很少要求同时按类与窗口名搜索。为向自己不准备参数传递一个零,最简便的办法是传递vbNullString常数 示例 Dim hw&, cnt& Dim rttitle As String * 256 hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4 cnt = GetWindowText(hw&, rttitle, 255) MsgBox Left$(rttitle, cnt), 0, "RTMain title" [求助]VB中Findwindow的一个新手问题~~ 悬赏分:10 - 解决时间:2007-5-6 21:13 添加一个模块,在模块中添加代码: Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 然后在窗体中添加一个Timer和一个Label,然后在窗体中添加代码: Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Timer1_Timer() Dim hwnd As Long hwnd = FindWindow(vbNullString, "Microsoft Visual Basic") If hwnd = 0 Then Label1.Caption = "程序未运行" Timer1.Enabled = True Exit Sub End If If hwnd <> 0 Then Label1.Caption = "程序已运行" End If End Sub 请问,为什么这样子不能在Label中显示出我的程序是否已经运行,,,, 拜托大家了,小弟新手,这种问题难免,希望大家不要笑话,帮帮小弟~~~~小弟感激不尽~~~~~~~ 提问者: YzoneY - 实习生 一级 最佳答案 FindWindow是通过窗口标题查找窗口的...在你试验这段代码的时候你窗口标题已经不是"Microsoft Visual Basic"啦.... 你可以再开一个vb,不建立任何工程试试看... 另外..timer的Interval属性不能设置为0.... 我的目的是使用findwindow函数获取打开的IE窗口的句柄: Do While n = 0 n = FindWindow("IEFrame", vbNullString) msgbox n loop msgbox "任务完成" 我当前一共打开4个IE的窗口,可是这样的程序只能获取一个句柄,之后就完了,请问上面的程序应该如何写了才能正确,谢谢~ 回复内容 【cangwu_lee】: Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long 【pigpag】: IE窗口有自己的COM接口 用ShellWindows集合对象可以轻松枚举。引用Web库 OpenProcess 关于VB中OpenProcess函数的问题 悬赏分:10 - 解决时间:2007-7-22 06:01 请给我解释一下下面的这几句程序的意思以及它所起到的作用 hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) If hProcess Then ReadProcessMemory hProcess, ByVal &H12F82C, base, 4, 0& CloseHandle hProcess End If 提问者: 96穆勒 - 职场新人 三级 最佳答案 hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) 打开进程 If hProcess Then ReadProcessMemory hProcess, ByVal &H12F82C, base, 4, 0& 读写进程内存 CloseHandle hProcess 结束进程 End If ---------------------- BOOL ReadProcessMemory( HANDLE hProcess, PVOID pvAddressRemote, PVOID pvBufferLocal, DWORD dwSize, PDWORD pdwNumBytesRead); 参数 hProcess为远程进程的句柄 pvAddressRemote用于指明远程进程中的地址 pvBufferLocal是本地进程中的内存地址 dwSize是需要传送的字节数 pdwNumBytesRead和pdwNumBytesWritten用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值. OpenProcess [编辑本段] 一.VC 名称: OpenProcess 位置: Kernel32.dll OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。 1.函数原型 HANDLE OpenProcess( DWORD dwDesiredAccess, // access flag BOOL bInheritHandle, // handle inheritance option DWORD dwProcessId // process identifier ); 2.返回值: 如成功,返回值为指定进程的句柄。 如失败,返回值为空,可调用GetLastError获得错误代码。 ------------------------------------------------------------- 3.举例 HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, p ID ); ---------------------- 4.附: BOOL ReadProcessMemory( HANDLE hProcess, PVOID pvAddressRemo te, PVOID pvBufferLocal, DWORD dwSize, PDWORD pdwNumBytesRead); 参数 hProcess //为远程进程的句柄 pvAddressRemote //用于指明远程进程中的地址 pvBufferLocal //是本地进程中的内存地址 dwSize //是需要传送的字节数 pdwNumBytesRead和pdwNumBytesWritten //用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值. [编辑本段] 二.在vb中的使用 1.VB声明 Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByV al dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProce ssId As Long) As Long 说明 打开一个现有进程的句柄 2.返回值 Long,如执行成功,返回进程句柄;零表示失败。会设置GetLastError 3.参数表 参数 类型 及 说明 dwDesiredAccess Long,指定这个句柄要求的访问方法。指定API32.TXT文件中以PROCESS_???开头的一个或多个常数 bInheritHandle Long,如句柄能够由子进程继承,则为TRUE dwProcessId Long,要打开那个进程的进程标识符 4.注解 这个函数经常用来打开一个要进行同步的进程(同步:即步调协同,你说完,我再说,按说好的先后次序来) 5.举例 hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) 打开进程 If hProcess Then ReadProcessMemory hProcess, ByVal &H12F82C, base, 4, 0& 读写进程内存 CloseHandle hProcess 结束进程 End If [编辑本段] 三、Delphi var ProcessHandle, PID: longword; begin GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @PID);//获取c的PID ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);//打开进程 Inject(ProcessHandle, @Main);//插入代码 CloseHandle(ProcessHandle);//关闭线程句柄 end. ------------------------------------------------------------------------------------------------ 1 求助,关于openprocess这个API的用法 比如:我要把当前窗休进程的线程转换为进程句柄 wHandle=openprocess(process_all_access,flase,app.threadid) 为什么wHandle为0, 正确的写法是什么,吧主帮帮我,我没有MSDN手上的API电子手册也没有openprocess的用法讲解。 作者:222.209.101.* 2006-12-10 18:35 回复此发言 3 回复:求助,关于openprocess这个API的用法 Option Explicit Dim hWndForm() As Long, WndForm As Long, i As Long, nHandle As Long Dim FormCaption() As String, Str1 As String * 255, HooKID As Long, nThreadId As Long Dim ProgHnd As Long Private Sub Form_Load() ReDim Preserve hWndForm(0) WndForm = GetWindow(Form1.hwnd, GW_HWNDFIRST) hWndForm(0) = WndForm '枚举每个窗体句柄 Do While WndForm <> 0 WndForm = GetWindow(WndForm, GW_HWNDNEXT) i = i + 1 ReDim Preserve hWndForm(i) hWndForm(i) = WndForm Loop '获取每个窗体句柄的窗体标题 For i = 0 To UBound(hWndForm()) ReDim Preserve FormCaption(i) GetWindowText hWndForm(i), Str1, 255 FormCaption(i) = Str1 Next i For i = 0 To UBound(FormCaption()) '如果这个窗体标题是"QQ用户登录"则把相应的窗体句柄存入nHandle If Left(LTrim(RTrim((FormCaption(i)))), 6) = "QQ用户登录" Then nHandle = hWndForm(i) '获取与窗体相关的进程ID nThreadId = GetWindowThreadProcessId(Form1.hwnd, nThreadId) '以当前进程得到相应的进程句柄 ProgHnd = OpenProcess(PROCESS_ALL_ACCESS, False, nThreadId) MsgBox ProgHnd MsgBox App.hInstance 'HooKID = SetWindowsHookEx(WH_KEYBOARD, AddressOf GetKeyValue, App.hInstance, nThreadId) End If Next i End Sub 'PASS:可是返回的ProgHnd为0,表示没有打开当前进程的句柄,是为什么呀, 作者:222.209.101.* 2006-12-10 19:15 回复此发言 4 回复:求助,关于openprocess这个API的用法 先声名 PROCESS_ALL_ACCESS 这个常数 作者:220.201.17.* 2007-7-27 15:50 回复此发言
/
本文档为【[精华版]怎么得到已经打开的文件的句柄】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索