怎么得到已经打开的的句柄.doc_第1页
怎么得到已经打开的的句柄.doc_第2页
怎么得到已经打开的的句柄.doc_第3页
怎么得到已经打开的的句柄.doc_第4页
怎么得到已经打开的的句柄.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

怎么得到已经打开的文件的句柄我想在自己的程序中打开一个正在使用的文件,比如记事本或word打开的文件,不知道怎么做,请大家不吝赐教。 最佳答案FindWindow 获得窗口句柄OpenProcess 获得进程句柄具体参数查看MSDN FindWindowThe 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 windows 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) 请问诸位高手,findwindow这个函数怎么使用? 请问诸位高手,findwindow这个函数怎么使用? 小弟又来打扰了! 回答者长命百岁!阖家美满! 我是因为这个才问大家的 IfFindwindow(IExplorer,baidu登陆)=0Then .记录键盘 Else Close. 作者:风筝19912006-2-6 12:27 回复此发言 2回复:请问诸位高手,findwindow这个函数怎么使用? iffindwindow(窗口类名,窗口标题)0then记录键盘 作者:222.217.206.*2006-2-6 14:31 回复此发言 3回复:请问诸位高手,findwindow这个函数怎么使用? FindWindow VB声明 DeclareFunctionFindWindowLibuser32AliasFindWindowA(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong 说明 寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题) 返回值 Long,找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 参数表 参数类型及说明 lpClassNameString,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类 lpWindowNameString,指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题 注解 很少要求同时按类与窗口名搜索。为向自己不准备参数传递一个零,最简便的办法是传递vbNullString常数 示例 Dimhw&,cnt& DimrttitleAsString*256 hw&=FindWindow(ThunderRT5Main,vbNullString)ThunderRTMainunderVB4 cnt=GetWindowText(hw&,rttitle,255) MsgBoxLeft$(rttitle,cnt),0,RTMaintitle 求助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 LongPrivate Sub Timer1_Timer()Dim hwnd As Longhwnd = FindWindow(vbNullString, Microsoft Visual Basic)If hwnd = 0 ThenLabel1.Caption = 程序未运行Timer1.Enabled = TrueExit SubEnd IfIf hwnd 0 ThenLabel1.Caption = 程序已运行End IfEnd Sub请问,为什么这样子不能在Label中显示出我的程序是否已经运行?拜托大家了,小弟新手,这种问题难免,希望大家不要笑话,帮帮小弟!小弟感激不尽! 提问者: YzoneY - 实习生 一级 最佳答案FindWindow是通过窗口标题查找窗口的.在你试验这段代码的时候你窗口标题已经不是Microsoft Visual Basic啦.你可以再开一个vb,不建立任何工程试试看.另外.timer的Interval属性不能设置为0. 我的目的是使用findwindow函数获取打开的IE窗口的句柄:DoWhilen=0n=FindWindow(IEFrame,vbNullString)msgboxnloopmsgbox任务完成我当前一共打开4个IE的窗口,可是这样的程序只能获取一个句柄,之后就完了,请问上面的程序应该如何写了才能正确,谢谢回复内容【cangwu_lee】:PrivateDeclareFunctionEnumWindowsLibuser32(ByVallpEnumFuncAsLong,ByVallParamAsLong)AsLong【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 hProcessEnd 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.dllOpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。1.函数原型HANDLE OpenProcess(DWORD dwDesiredAccess, / access flagBOOL bInheritHandle, / handle inheritance optionDWORD dwProcessId / process identifier);2.返回值:如成功,返回值为指定进程的句柄。如失败,返回值为空,可调用GetLastError获得错误代码。-3.举例HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID );- 4.附:BOOL ReadProcessMemory( HANDLE hProcess, PVOID pvAddressRemote, PVOID pvBufferLocal, DWORD dwSize, PDWORD pdwNumBytesRead); 参数 hProcess /为远程进程的句柄 pvAddressRemote /用于指明远程进程中的地址 pvBufferLocal /是本地进程中的内存地址 dwSize /是需要传送的字节数 pdwNumBytesRead和pdwNumBytesWritten /用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值. 编辑本段二.在vb中的使用1.VB声明 Declare Function OpenProcess Lib kernel32 Alias OpenProcess (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId 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 编辑本段三、DelphivarProcessHandle, PID: longword;beginGetWindowThreadProcessId(FindWindow(Shell_TrayWnd, nil), PID);/获取c的PIDProcessHandle := 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的用法 OptionExplicit DimhWndForm()AsLong,WndFormAsLong,iAsLong,nHandleAsLong DimFormCaption()AsString,Str1AsString*255,HooKIDAsLong,nThreadIdAsLong DimProgHndAsLong PrivateSubForm_Load() ReDimPreservehWndForm(0) WndForm=GetWindow(Form1.hwnd,GW_HWNDFIRST) hWndForm(0)=WndForm 枚举每个窗体句柄 DoWhileWndForm0 WndForm=GetWi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论