方法/步骤
选择‘程序’(数字1处)-->双击‘DLL命令’(数字2处)--> 右键单击如图标注(数字3处) ---选择‘新建DLL命令’。
输入如下图所示信息。途中所使用的DLL可以获取与指定窗口关联在一起的一个线程和进程标识符。其参数一填写指定窗口句柄,参数二填写一个变量,在使用这个命令后,在参数二中填写的变量,其值将自动变更为进程标识符。
双击启动窗口,写下如图所示代码,其输出值为本程序的进程ID,其值和使用任务管理器获得的值相同。
我还以为是程序呢,argv[0]不就行了。如果是动态库的话,就比较麻烦了,先上网down一个busybox的源代码吧,参考一下里面top的实现方式,基本思路就是遍历内核的整个进程链表,根据自己的pid(可以用getpid获得)找到对应的进程名。
Imports SystemRuntimeInteropServices
Module winapi
<DllImport("User32dll", CallingConvention:=CallingConventionStdCall, EntryPoint:="GetWindowThreadProcessId")> _
Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef procId As UInt32) As UInt32
End Function
<DllImport("kernel32dll", CallingConvention:=CallingConventionStdCall, EntryPoint:="OpenProcess")> _
Function OpenProcess(ByVal access As UInt32, ByVal inherit As Boolean, ByVal procid As UInt32) As IntPtr
End Function
<DllImport("kernel32dll", CallingConvention:=CallingConventionStdCall, EntryPoint:="CloseHandle")> _
Function CloseHandle(ByVal handle As IntPtr) As Boolean
End Function
<DllImport("psapidll", CallingConvention:=CallingConventionStdCall, EntryPoint:="GetModuleFileNameExW", Charset:=CharSetUnicode)> _
Function GetModuleFileNameExW(ByVal hProc As IntPtr, ByVal hMod As IntPtr, ByVal arrName() As Char, ByVal arrSize As UInt32) As UInt32
End Function
End Module
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1Click
Dim procid As UInt32
GetWindowThreadProcessId(MeHandle, procid)
Dim handle As IntPtr
handle = OpenProcess(1040, False, procid)
Dim name(65536) As Char
Dim nameSize As UInt32 = GetModuleFileNameExW(handle, IntPtrZero, name, 65536)
Dim strName As String = New String(name, 0, nameSize)
CloseHandle(handle)
MsgBox(strName)
End Sub
End Class
可恶……我不会vb……临时去七拼八凑查了点语法……尽力了
在“开始”—“运行”栏中输入“wmic”,然后点“确定”,此时XP就会d出一个名为“C:\WINDOWS\System32\Wbem\wmicexe”的命令行黑窗口(如果大家是第一次运行的话,窗口中会先显示“正在安装WMIC,请稍候。”),它的提示符是“wmic:root\cli>”,我们在其后输入“Process”命令(“进程”的意思)并回车,就会看到进程与其所对应的路径了
代码:
package comtest;
import javalangmanagementManagementFactory;
import javalangmanagementRuntimeMXBean;
public class Target {
public static void main(String[] args) throws InterruptedException { Systemoutprintln(getProcessID());
while(true) {
Threadsleep(10000);
}
}
public static final int getProcessID() {
RuntimeMXBean runtimeMXBean = ManagementFactorygetRuntimeMXBean();
Systemoutprintln(runtimeMXBeangetName());
return IntegervalueOf(runtimeMXBeangetName()split("@")[0]) intValue();
}
}
运行结果:2896@PC-20150603VRPL2896
当前进程ID为2896。
ManagementFactory是一个在运行时管理和监控Java VM的工厂类,它能提供很多管理VM的静态接口,比如RuntimeMXBean;
RuntimeMXBean是Java虚拟机的运行时管理接口
以上就是关于易语言如何获取外部窗口的进程名全部的内容,包括:易语言如何获取外部窗口的进程名、Linux 下C++程序中如何获取本程序运行时的进程名、vb.net如何通过窗口句柄获取进程名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)