精华内容
下载资源
问答
  • 枚举 Windows 进程和应用程序窗口  http://blog.163.com/ghzh_sd/blog/static/3154966200711733545614/

    枚举 Windows 进程和应用程序窗口  

    http://blog.163.com/ghzh_sd/blog/static/3154966200711733545614/

    展开全文
  • adb shell 查看当前进程和窗口信息

    千次阅读 2018-08-22 10:40:23
    adb shell 查看当前进程和窗口信息可以使用如下命令: >adb shell >dumpsys window windows |grep "Window #" 显示信息如下:   2:打开AMS、WMS的命令行如下: adb shell dumpsys...

    adb shell 查看当前进程和窗口信息可以使用如下命令:

    >adb shell

    >dumpsys window windows |grep "Window #"

    显示信息如下:

     

    2:打开AMS、WMS的命令行如下:

    adb shell dumpsys activity log x on
    adb shell dumpsys window -d enable a

     

    3:查看屏幕分辨率和GPU频率

    adb shell “cat /proc/gpufreq/gpufreq_opp_dump”

    还有wm size,adb shell wm size

     

    4:

    adb shell wm size WXH 命令是按witch x hight 设置分辨率。如果分辨率设置的过大,图标会变大,反之则变小

    adb shell wm size reset 命令是将分辨率设置为LCD原始分辨率

     

    5:抓起loading 和fps 和freq

    adb shell "setprop debug.egl.traceGpuCompletion 1"

    adb shell "setprop debug.atrace.tags.enableflags 0x3fe"

    adb shell "setprop debug.egl.trace systrace"

    adb shell "stop;start"

     

       2,请帮忙抓一下卡顿场景的GPU loading 和freq和FPs, 可以同时起三个命令行抓取,把得到的结果提供给我们。

        // loading 

        adb shell "while(true) ; do cat /d/ged/hal/gpu_utilization;sleep 0.1; done" 

       

        // freq

       adb shell "while(true) ; do cat /proc/gpufreq/gpufreq_var_dump | grep g_cur_gpu_freq; sleep 1; done"

       // FPS

        adb shell "while(true) ; do cat /d/ged/hal/ged_kpi; sleep 1; done"

     

    6:读取Settings db中的属性值

     adb shell settings list global | grep game

     adb shell settings list secure| grep game

     

    7:使用adb命令过滤logcat中的命令信息。

    (1) adb shell findstr | grep service_to_fd

    (2)adb shell

        logcat | grep service_to_fd

     

    Line 526: 12-06 15:11:32.074  1526  1526 I ADB_SERVICES: service_to_fd shell:am start -W -S 'com.android.contacts/.activities.PeopleActivity'
        Line 2430: 12-06 15:12:05.530  1526  1526 I ADB_SERVICES: service_to_fd shell:dumpsys -t 30 meminfo --package com.android.contacts
        Line 2433: 12-06 15:12:06.127  1526  1526 I ADB_SERVICES: service_to_fd shell:am force-stop 'com.android.contacts'

    展开全文
  • 本文通过已知窗口进程ID获取窗口句柄的实例来浅谈EnumWindows函数使用、委托函数的定义及其意义、ByValByRef的区别。

      有时候我们需要通过窗口的进程ID获取窗口的句柄,在windows中又没有直接的函数可用,这时候我们只能曲线救国,通过EnumWindows函数枚举所有顶级窗口,然后用GetWindowThreadProcessId函数来获取已知进程ID的窗口句柄。网上有很多C和C++EnumWindows函数的使用实例和详细解释,但是VB.NET中EnumWindows函数的详细解释和实例资源非常稀少,我也是费了很长时间才把C++语言改写为VB.NET语言的,并在Windows7和vs2019中实测通过。希望能对有此困惑的人有所帮助!
      顺便说一下,本人是外科医生,编程实属业余爱好,不务正业之举,编程方面菜鸟一枚,有不对的望各位大佬指正,批评!!!
      废话不多说,开始正题。
      本文涉及以下几方面的内容:
      1、API函数EnumWindows 及GetWindowThreadProcessId在VB.NET中的使用
      2、函数中ByVal和ByRef的使用注意事项

      一、EnumWindows 函数的运行流程

      EnumWindows 函数(枚举顶级窗口)和EnumChildWindows函数(枚举指定父窗口的子窗口)运行流程都差不多,会了一个就会另外一个。
      EnumWindows 枚举窗口,将窗口句柄传递给其回调函数,回调函数根据这个句柄进行相关的判断和处理事件,并返回一个布尔值给EnumWindows,如果返回true则EnumWindows 函数继续枚举,返回false则停止枚举。
      EnumWindows 和其回调函数用第二个参数传递程序需要的值。(这句话比较难懂,也是这个函数的难点,下面会有详细的解释)

      二、函数的声明

       两个函数在vb中的声明:

    Declare Sub EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
    

      两个函数在vb.net中的声明:

    Private Declare Ansi Function EnumWindows Lib "user32" Alias "EnumWindows"(ByVal lpEnumFunc As EnumWindowsProc, ByRef lParam As EnumWindowsArg) As Integer  '声明API函数EnumWindows
    Private Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Integer, ByRef lpdwProcessId As Integer) As Integer '第二个参数一定要用ByRef类型。
    

      vb.net中声明的几点说明:
       1、Function 后面的EnumWindows 只是函数的名称,你可以随便改成自己喜欢的名字,但是Alias 后面的名称不能改,那是windows函数库中的标准名称,改了程序就找不到库中的函数了。GetWindowThreadProcessId
    类同。
       2、Ansi的意义:EnumWindows 声明时在Function 前要不要加Ansi ,网上查的资料说需要加,我不加测试也通过了。还请明白声明时Ansi的意义的大佬指点一下;
       3、EnumWindows 函数第二个参数lParam 的意义:
       原文是这样写的:在枚举期间,传递给dwcbkd32.ocx定制控件之EnumWindows事件的值。这个值的含义是由程序员规定的。
       关于这个参数的含义和用法查了很多资料,都是c语言的,而且也没有表达清楚到底怎么传递参数的值。vb.net的相关资料几乎没有。经过我的不断摸索,终于搞清楚这个参数的用法,在此分享一下:
       EnumWindows 函数第二个参数 “lParam” 只是变量名,你可以随便改 ,变量前面的ByVal 和ByRef 使用要小心,ByVal 的意思是只传递变量的值,ByRef 只传递变量的地址。EnumWindows函数使用第二个参数和其回调函数某个参数来回传递变量的地址,也就是说回调函数某个参数的值发生改变,EnumWindows函数的第二个参数的值也随之而改变,这是函数的要求,所以你如果用第二个参数,必须用传递地址的方式使用第二个参数,当然你也可以不用第二个参数。还有一点,EnumWindows函数第二个参数 “lParam” 可以是你自己定义的变量类型,本例就是我自己定义的变量类型:EnumWindowsArg,具体定义如下:

    Structure EnumWindowsArg
            Dim HwndWindow As Integer
            Dim ProcessID As Integer
    End Structure
    

       此变量包含有窗口句柄和窗口进程ID两个属性。你也可以把第二个参数定义成你自己需要的数据类型。
       4、声明到此,还没完,你还需用Delegate声明一个委托函数,因为VB.NET中,EnumWindows函数不能直接调用你的回调函数,不声明为委托函数,你用AddressOf是无效的,无法获取回调函数的地址。
       什么是委托?
       简单的理解,委托就是对一个方法映射,把方法名当参数来传递,类似JS中的在某个function的参数中把另一个function的名称当参数来传递。也就是把函数(一种方法的定义)名当作另一个函数的参数使用。委托可以理解为一种接口,具体的方法实现这个接口,在开发阶段只需要关心委托的定义就可以调用,而不用关心它如何实现的或者在哪里实现的。
       vb.net中委托函数调用时要先实例化,然后通过AddressOf调用实例化的指针来执行委托函数的方法。
       是不是有点云山雾罩的感觉了,那就对了,看个实例就全都理解了。

       定义委托函数(即回调函数的方法,相当于类,class):

    Private Delegate Function EnumWindowsProc(ByVal Hwnd As Integer, ByRef ewa As EnumWindowsArg) As Boolean '声明一个委托函数
    

      三、具体代码

       1、回调函数代码:

     '自定义回调函数,EnumWindows函数接收其返回值,返回true则继续enum,返回false则停止enum。
        '参数Hwnd为EnumWindows函数枚举窗口的句柄
        '参数ewa为按址传值的自定义参数,其参数名称可以和EnumWindows函数里第二个参数不一样,但参数类型必须与EnumWindows函数第二个参数相同。
        '相当于和EnumWindows共用的一块地址,两个函数都可以更改和读取这个地址里的值。
        '注意:这个回调函数要与定义的委托函数的参数类型要兼容,最好相同。
        Private Function EnumWindowsProc_GetHwndByPID(ByVal Hwnd As Integer, ByRef ewa1 As EnumWindowsArg) As Boolean
            Dim pArg As EnumWindowsArg = ewa1
            Dim ProcessID As Integer
    
       '通过枚举的窗口句柄用windows api 函数 GetWindowThreadProcessId取得窗口进程ID
            '与要查找的窗口进程比较,相同,则找到了该进程的窗口句柄。
            Dim threadID = GetWindowThreadProcessId(Hwnd, ProcessID)
            If ProcessID = pArg.ProcessID Then
                pArg.HwndWindow = Hwnd
                '找到了返回FALSE
                ' Return False
            End If
            If threadID = pArg.ProcessID Then
                pArg.HwndWindow = Hwnd
                Return False
            End If
            '没找到,继续找,返回TRUE
            Return True
    
       End Function
    

       2、主函数

     Public Function GetWindowhandleByProcessID(ByVal ProcessID As Integer) As Integer '通过窗口的进程ID获取窗口句柄
            Dim Hwndrtn As Integer '返回窗口句柄的变量
            Dim ewa As EnumWindowsArg '自定义的变量,用来传递窗口进程和窗口句柄
            ewa.ProcessID = ProcessID '
            ewa.HwndWindow = 0
            Dim Prc As EnumWindowsProc = New EnumWindowsProc(AddressOf EnumWindowsProc_GetHwndByPID) '实例化一个回调函数
    
            'EnumWindows枚举窗口,prc为实例化的回调函数指针(地址),EnumWindows将枚举窗口的句柄传递给回调函数prc处理。 
            'ewa为向回调函数按址传递的一个参数, 就是可以向回调函数传值, 也可以接收从回调函数返回的值。
            EnumWindows(Prc, ewa)
            If ewa.HwndWindow <> 0 Then
                Hwndrtn = ewa.HwndWindow
            End If
            Return Hwndrtn
        End Function
    
    展开全文
  • 在得到窗口句柄后我们可以通过GetWindowThreadProcessId这个函数来获得窗口所属进程ID和线程ID,从而判断创建窗口进程和线程。 函数原型: DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD ...

     在得到窗口句柄后我们可以通过GetWindowThreadProcessId这个函数来获得窗口所属进程ID和线程ID,从而判断创建窗口的进程和线程。

    函数原型:

    DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId);

    参数说明:

    hWnd:传入的窗口句柄;lpdwProcessId:返回的进程ID地址。

    返回值:

    函数返回的是窗口所属线程ID

    使用例子:

    DWORD ProcessID;
    DWORD ThreadID;
    ThreadID=GetWindowThreadProcessId(hWnd,&ProcessID);
    ...

    展开全文
  • Windows下如何改写目标进程窗口函数来注入DLL 2011年02月21日  Windows的UI线程简单地说就是创建了窗口的线程,  其创建的窗口都有窗口函数,在这里,我介绍一个改写  UI线程窗口过程来注入DLL的方法,不...
  • 系统屏蔽相关热键主要是屏蔽相关系统快捷键功能,...系统就将该热键注册为安全序列,应用程序级别是无法获得该组合键的消息的,经过一周的调研,发现在windows系统系列中,XPwin7及以上系统对于该组合快捷键的处...
  • Windows进程管理

    2017-06-04 21:52:57
    这篇博客将主要讲进程的管理,主要涉及到打开进程(OpenProcess()函数)、终止进程(TerminateProcess()函数)、对当前进程进行权限修改(OpenProcessToken(), AdjustTokenPrivileges()函数)、窗口查找(FindWindow...
  • Windows和X11下进程间键盘钩子全局热键,修改相关窗口句柄之后就可以直接运行。 需要运行起来手工获得句柄,并将句柄修改到键盘钩子进程
  • Windows 进程管理器

    2011-08-04 10:38:30
    Process Explorer 可显示有关进程已打开或加载哪些句柄 DLL 的信息。 Process Explorer 的显示由两个子窗口组成。顶部窗口总是显示当前活动进程的列表(包括拥有它们的帐户的名称),而底部窗口中显示的信息取决...
  • 创建一个windows窗口程序,含有4个菜单项,分别用来创建和撤消记事本进程和计算器进程。若相应进程已经创建了,再选择创建进程菜单,则弹出对话框提示进程已经创建;若进程已经撤消了,再选择撤消进程菜单,则弹出对话框...
  • 又一个进程与枚举和窗口的Delphi程序实例,可实现适时刷新Windows所有进程以及枚举出当前所有打开的窗口名称等。
  • 内容索引:C#源码,系统相关,进程,任务管理器,仿Windows 系统自带的任务管理器功能差不多,界面也有点相似,可以新建结束进程,主窗口显示正在运行的所有程序。这是VSBOX的作品,很不错。
  • MSYS2:PID与windows 进程ID

    2019-07-15 17:42:27
    MSYS2下启动的进程ID分两种:MSYS2空间的PID和windows的PID 以mysql为例,在MSYS2窗口启动mysqld $ mysqld --console 如下我们在windows CMD窗口用netstat查找3306端口的进程ID为2356 C:\>netstat -aon | ...
  • 进程窗口广播消息

    2020-08-25 16:11:14
    这个消息可以发送给Windows系统所有的顶层窗口,包括禁用或不可见的未拥有窗口,重叠窗口,弹出窗口,子窗口除外 1.首先定义消息  静态UINT WM_ADDR = RegisterWindowMessage(_T(“WM_ADDR”)); 注意:发送...
  • Windows进程设置文本发送消息

    千次阅读 2011-09-03 15:02:27
    进程内设置文本,可以调用SetWindowText,跨进程这个会无效,应当如下:::SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)文本内容); 注意这里不能使用PostMessage向另一进程窗口发送回车键消息方法为:::PostMes
  • windows和linux 杀死进程

    2019-02-15 09:01:50
    windows 最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,...第一步,打开cmd命令窗口,输入命令,根据端口号查找对应的进程号 netstat -ano | findstr 80 //列出进程极其占用的端口,且包含 ...
  • VB枚举窗口和进程信息-源码,获取当前打开的所有窗口的标题和进程ID信息,类似Windows中的任务管理器的功能,根据窗体的类名或者标题名,调用FindWindow函数来取得相应的窗体,调用BringWindowToTop函数,将窗体激活...
  • windows 在命令窗口中输入命令中输入netstat -ano | findstr “端口号”,然后回车就可以看到这个端口被哪个应用占用 查看到对应的进程id之后,就可以通过id查找对应的进程名称,使用命令tasklist | findstr “进程...
  • 这一次是python开发: 1. 分别在Windows和Linux下运行控制台程序procListWithPSUTIL.py... 改写procListWithPSUTIL.py为一个WX窗口应用程序procListWin.py在Windows和Linux下运行. 提交:procListWin.py procL...
  • 比如XAMPP或是APPSERVER等等,而如果开启了虚拟机或者其他应用可能会导致本地环境无法开启或者其他应用无法开启,报错可能是提示某个端口被占用,那么在windows环境中如何查看端口被哪个进程使用了呢,使用下面命令...
  • 微软官网的翻译整理 原文:https://docs.microsoft.com/zh-cn/windows/win32/winstation/window-stations-and-desktops ... 窗口站创建时和进程相关联,并且被放到当前的会话 只有WinSta0可以有交互界面,...
  • WINDOWS窗口消息

    千次阅读 2010-07-09 00:28:00
    WINDOWS窗口消息 Windows窗口消息 不看不知道,一看吓一跳。原来就只是单单理解了SendMessagePostMessage。前者是发送完要处理后再返回,后者是发送后立即返回,不管有没有处理。但今天仔细看...
  • MSG构造体WndProc窗口进程关于Windows编程十分主要,假如不理解它们,可以说就没有学会Windows编程。MSG构造体MSG 构造体用来表现一条音讯,各个字段的寄义如下: typedefstructtagMSG{HWNDhwnd;//窗口句柄...
  • 我有一个Helloworld程序,cout helloworld到标准输出,我想在一个主程序里面创建多个进程,每个进程开一个窗口,显示各自的输出。 大概就是这么个意思,关键在百度谷歌上关于这个问题的说明都有点语焉不详,谷歌...
  • Windows进程通信——匿名管道

    千次阅读 2017-06-05 15:10:18
    匿名管道是在本地机器上使用,实现父进程和子进程之间的通信的进程通信机制。需要注意两点: (1)就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信 (2)实现的是父进程和子进程之间的通信...
  • 该程序只是再一次地启动自身,显示它的系统进程 ID它在进程列表中的位置。 步骤 1:创建一个“Win32 Consol Application”工程,然后可复制下面中的程序,编译成可执行文件或者使用 VC++ 6.0创建编译执行下面代码...
  • 在cmd窗口中输入netstat -ano -a显示所有连接侦听端口。 -n以数字形式显示地址端口号。 -o显示拥有的与每个连接关联的进程 ID。 2、查看指定端口的连接信息 使用netstat -ano | findstr “8080”,在“|”...
  • 可以隐藏其他程序的托盘图标 可以修改窗口显示图标文字,起到伪装作用,例如可以把聊天窗口伪装成Word,在Windows的任务工具栏上显示的是Word,而实际的窗口却是聊天窗口

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,844
精华内容 737
关键字:

windows进程和窗口