易语言如何获取外部窗口的进程名

易语言如何获取外部窗口的进程名,第1张

方法/步骤

启动易语言,新建Windows窗口程序

选择‘程序’(数字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如何通过窗口句柄获取进程名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9332439.html

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

发表评论

登录后才能评论

评论列表(0条)

保存