吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2866|回复: 2
收起左侧

[其他原创] 模糊搜索进程名

  [复制链接]
以南 发表于 2018-4-12 17:08
起因发现有些进程窗口名随着自己的角色变化,或者每次启动都给一个随机窗口名称?
当然无所谓了,进程名称没换就行-。-


没什么技术可言。见笑了。
为了方便大家代码贴上
源码上传。


这是头文件。
[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
#pragma once
#include <windows.h> 
#include <tlhelp32.h>
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
BOOL IsMainWindow(HWND handle);
BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam);
HWND FindMainWindow(unsigned long process_id);
PROCESSENTRY32 FindProcessname(const wchar_t *name);
BOOL check64ProcessEx(HANDLE hProcess);


CPP文件.
[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "FindPID.h"
 
 
struct DATA
{
        unsigned long process_id;
        HWND Handle;
};
 
 
BOOL IsMainWindow(HWND handle)
{
        return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);
}
 
 
BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam)
{
        DATA& data = *(DATA*)lParam;
        unsigned long process_id = 0;
        GetWindowThreadProcessId(handle, &process_id);
        if (data.process_id != process_id || !IsMainWindow(handle)) {
                return TRUE;
        }
        data.Handle = handle;
        return FALSE;
}
 
HWND FindMainWindow(unsigned long process_id)
{
        DATA data;
        data.process_id = process_id;
        data.Handle = 0;
        EnumWindows(EnumWindowsCallback, (LPARAM)&data);
        return data.Handle;
}
 
PROCESSENTRY32 FindProcessname(const wchar_t *name)
{
        int count = 0;                                 
        PROCESSENTRY32 c_Process;                     
        c_Process.dwSize = sizeof(c_Process);     
        HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 
        if (hProcess == INVALID_HANDLE_VALUE)
                return c_Process = {};
         
        bool bMore = Process32First(hProcess, &c_Process);  
        while (bMore)
        {
                if (_tcsstr(c_Process.szExeFile, name))
                        return c_Process;
                bMore = Process32Next(hProcess, &c_Process); 
                count++;
        }
 
        CloseHandle(hProcess); 
        return c_Process = {};
}
 
 
BOOL check64ProcessEx(HANDLE hProcess)
{
         
        bool X86 = false;
#ifndef _WIN64 
        X86 = GetProcAddress(GetModuleHandle(TEXT("ntdll")), "NtWow64DebuggerCall") == nullptr ? TRUE : FALSE;
#endif 
        if (X86)
                return FALSE;
 
         
        typedef BOOL(WINAPI *ISWOW64PROCESS)(HANDLE, PBOOL);
        ISWOW64PROCESS W64Process;
        BOOL check64 = TRUE;
        W64Process = (ISWOW64PROCESS)GetProcAddress(GetModuleHandle(L"kernel32"), "IsWow64Process");
        if (W64Process != nullptr)
                W64Process(hProcess, &check64);
        return !check64;
}



调用方法。
[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "FindPID.h"
 
  
 
int main()
{
        //需要模糊查找的文件
        const wchar_t *name = L"note";
 
 
        //返回一个结构体
        PROCESSENTRY32 C_Process= FindProcessname(name);
        if (C_Process.th32ProcessID && C_Process.szExeFile)
        {
                wcout << "PID=" << C_Process.th32ProcessID << "\tname=" << C_Process.szExeFile << endl;
        }
 
 
        //返回进程窗口句柄
        HWND hwnd = FindMainWindow(C_Process.th32ProcessID);
        if (hwnd)
                cout  << hwnd << endl;
 
 
 
        //返回进程句柄
        HANDLE hpros = OpenProcess(PROCESS_ALL_ACCESS, FALSE, C_Process.th32ProcessID);
        if (hpros)
                cout << hpros << endl;
 
 
 
        //返回真为64位
        //这里有点逻辑错误,单独拿出来的话。因为只有真假。除非和上面的返回值一起判断。
        bool _ture_64 = check64ProcessEx(hpros);
        if (_ture_64)
                cout << "64位程序" << endl;
        else
                cout << "32位程序" << endl;
 
 
        system("pause");
    return 0;
}


QQ图片20180412163248.png QQ图片20180412163313.png QQ图片20180412163618.png



源码下载。
https://pan.lanzou.com/i0tuu2b

密码:wuai

免费评分

参与人数 5吾爱币 +7 热心值 +5 收起 理由
xouou + 2 + 1 谢谢@Thanks!
凡华 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liphily + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wushaominkk + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hiflydragon + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wushaominkk 发表于 2018-4-12 17:19
感谢发布原创作品,吾爱破解论坛因你更精彩!
peterq521 发表于 2018-4-13 08:57
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-7-9 05:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表