vb中已知进程名称(不知道窗口标题),如何获取其hWnd(句柄)

vb中已知进程名称(不知道窗口标题),如何获取其hWnd(句柄),第1张

窗体代码如下 在TEXT输入进程PID

Private Sub Command1_Click()

List1Clear

Find_Window Val(Text1Text)

End Sub

Private Sub Form_Load()

Text1Text = ""

Command1Caption = "枚举窗口"

End Sub

模块代码如下

Option Explicit

Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Dim IfPid As Long

Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long

Dim Pid1 As Long

Dim wText As String 255

GetWindowThreadProcessId hwnd, Pid1

If IfPid = Pid1 Then

GetWindowText hwnd, wText, 100

Form1List1AddItem "句柄:" & hwnd & " 标题:" & wText

End If

EnumWindowsProc = True

End Function

Public Sub Find_Window(ByVal Pid As Long)

IfPid = Pid

EnumWindows AddressOf EnumWindowsProc, 0

End Sub

进程名称是需要枚举的。我个人认为也就这个方法了。

可以通过指令查询当前进程打开了多少句柄,Linux下有exec函数族可以执行指令,把指令写进去就行了。

-查看当前进程打开了多少句柄数

# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

-根据ID号来查看进程名。

# ps aef|grep ID号

有的,获得指定进程句柄的方法很多

首先用 CreateToolhelp32Snapshot 获得系统快照然后用 Process32First 获得第一个进程然后用 Process32Next 获得下一个进程依次类推,然后判断如果是想呀的进程用 OpenProcess就可以打开这个进程,获得进程的句柄,然后你可以比如用 TerminateProcess 之类的结束进程

另外你说的那个API不知道有没有,我懒得去查,不过估计有有的话意思是

Get + Current + Process 翻译过来就是得到当前进程,返回值应该是个句柄算了帮你查下

HANDLE GetCurrentProcess(VOID)

解释是:The GetCurrentProcess function returns a pseudohandle for the current process

意思大致是这个API函数返回当前进程的句柄(pseudohandle 不知道什么意思应该是,没见过这个单词呵呵!)

强制转换是肯定不行的,我想了个笨方法。在获得某进程的Id后,获取桌面上每个窗口的进程Id,再与先获得的进程Id进行比较,然后就能知道哪个窗口属于哪个进程的了。

另外网上找的一篇文章:>

通过进程名称结束 进程

BOOL FindProcessHandleAndKill(const CString &cs_WndName)

{

HWND hWnd;

DWORD ProcessID;

HANDLE hProcess;

hWnd=::FindWindow(NULL, cs_WndName);

if(hWnd==NULL)//テサモミユメオスエーソレ

{

return FALSE;

}

else

{

if(GetWindowThreadProcessId(hWnd, &ProcessID)==0)//ハァーワ

{

return FALSE;

}

else

{

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);

if(hProcess==NULL)

{

return FALSE;

}

else

{

if(TerminateProcess(hProcess, 0))

{

return TRUE;

}

else

{

return FALSE;

}

}

}

}

}

用NtQueryInformationProcess可以查询单个进程的句柄数 但是要打开进程

用NtQuerySystemInformation可以获取所有进程的统计信息,而且没有任何权限要求

这个用一个api就可以解决,你用pdh涉及到的更多

以上就是关于vb中已知进程名称(不知道窗口标题),如何获取其hWnd(句柄)全部的内容,包括:vb中已知进程名称(不知道窗口标题),如何获取其hWnd(句柄)、linux如何获取某个进程打开的句柄数,c代码实现、如何取得某进程的句柄 = =谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9347832.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存