powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / GetCurrentProcessId
10 сообщений из 10, страница 1 из 1
GetCurrentProcessId
    #33279822
Тупой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если хочу получить ID другого процесса ? Или вообще
хендл другого процесса, ну примерно так как это делает GetCurrentProcess(), для своего. Как кто с этим бореться ?
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279833
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Как кто с этим бореться ?
Бороться со своими желаниями?
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279844
Тупой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич, Причем тут желание ? Вы вообще о чем ? Может вы топиком ошиблись и вам в просто треп.
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279856
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот таким кодом пользовался для поиска процесса. Обработку нахождения процесса можно заменить на то, что вам нужно. Код на основе какой-то интернет-училки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
//----------------------------------------------------------------------------
#include <tlhelp32.h>
bool FindTheBat()
{
aaaaaa:
PROCESSENTRY32 PC32;
HANDLE hnd=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0 );
if ((int)hnd==- 1 )goto aaaaaa;
PC32.dwSize=sizeof(PC32);
bool i=Process32First(hnd,&PC32);
while (i)
        {
        AnsiString m_process = PC32.szExeFile;
        m_process = m_process.LowerCase();
        if (m_process.Pos(m_bat_path.LowerCase()))
                {
                CloseHandle(hnd);
                return true;
                }
        i=Process32Next(hnd,&PC32);
        }
CloseHandle(hnd);
return false;
}
//
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279866
Тупой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что нужно. Респект!!!
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279875
Тупой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял, это поиск хендела процесса по имени, а куда имя-то пихать ? Простите за тупость. и как его ID получить ?
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279884
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТупойГавриленко Сергей Алексеевич, Причем тут желание ? Вы вообще о чем ? Может вы топиком ошиблись и вам в просто треп.
Да нет, форма вопроса интересная:
ТупойА если хочу получить ID другого процесса ? ... Как кто с этим бореться ?
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33279898
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТупойКак я понял, это поиск хендела процесса по имени, а куда имя-то пихать ? Простите за тупость. и как его ID получить ?
Так, поскольку в С я не очень, прошу ногами не пинать. Коряво, но в свое время у меня работало.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <vcl.h>
#include <winbase.h>
#include <tlhelp32.h>
//---------------------------------------------------------------------------
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
unsigned long GetThePID(AnsiString my_process)
{
aaaaaa:
PROCESSENTRY32 PC32;
HANDLE hnd=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0 );
if ((int)hnd==- 1 )goto aaaaaa;
PC32.dwSize=sizeof(PC32);
bool i=Process32First(hnd,&PC32);
while (i)
        {
        AnsiString m_process = PC32.szExeFile;
        m_process = m_process.LowerCase();
        if (m_process.Pos(my_process.LowerCase()))
                {
                CloseHandle(hnd);
                return PC32.th32ProcessID;
                }
        i=Process32Next(hnd,&PC32);
        }
CloseHandle(hnd);
return  0 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString my_mess = AnsiString(GetThePID("explorer.exe"));
Application->MessageBoxA(my_mess.c_str(),"",ID_OK);
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33280056
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тебе список всех процессов, найти нужный уже несложно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
#include <map>
#include <string>
#include <locale>
#include <windows.h>
#include <winnt.h>

#pragma warning(disable:  4127 ) // conditional expression is constant


using namespace std;

//---------------------------------------------------------------------------------------------------------------------
// Some definitions from NTDDK

typedef LONG	NTSTATUS;
typedef LONG	KPRIORITY;

#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >=  0 )

#define STATUS_INFO_LENGTH_MISMATCH      ((NTSTATUS)0xC0000004L)

#define SystemProcessesAndThreadsInformation	 5 

typedef struct _IDCLIENT 
{
    DWORD	    UniqueProcess;
    DWORD	    UniqueThread;
} IDCLIENT;

typedef struct _UNISTRING 
{
    USHORT	    Length;
    USHORT	    MaximumLength;
    PWSTR	    Buffer;
} UNISTRING;

typedef struct _VM_COUNTERS 
{
    SIZE_T	    PeakVirtualSize;
    SIZE_T	    VirtualSize;
    ULONG	    PageFaultCount;
    SIZE_T	    PeakWorkingSetSize;
    SIZE_T	    WorkingSetSize;
    SIZE_T	    QuotaPeakPagedPoolUsage;
    SIZE_T	    QuotaPagedPoolUsage;
    SIZE_T	    QuotaPeakNonPagedPoolUsage;
    SIZE_T	    QuotaNonPagedPoolUsage;
    SIZE_T	    PagefileUsage;
    SIZE_T	    PeakPagefileUsage;
} VM_COUNTERS;

typedef struct _SYS_THREADS 
{
    LARGE_INTEGER   KernelTime;
    LARGE_INTEGER   UserTime;
    LARGE_INTEGER   CreateTime;
    ULONG			WaitTime;
    PVOID			StartAddress;
    IDCLIENT	    ClientId;
    KPRIORITY	    Priority;
    KPRIORITY	    BasePriority;
    ULONG			ContextSwitchCount;
    LONG			State;
    LONG			WaitReason;
} SYS_THREADS, * PSYS_THREADS;

// Note that the size of the SYS_PROCESSES structure is different on
// NT 4 and Win2K, but we don't care about it, since we don't access neither
// IoCounters member nor Threads array

typedef struct _SYS_PROCESSES 
{
    ULONG			NextEntryDelta;
    ULONG			ThreadCount;
    ULONG			Reserved1[ 6 ];
    LARGE_INTEGER   CreateTime;
    LARGE_INTEGER   UserTime;
    LARGE_INTEGER   KernelTime;
    UNISTRING  ProcessName;
    KPRIORITY	    BasePriority;
    ULONG			ProcessId;
    ULONG			InheritedFromProcessId;
    ULONG			HandleCount;
    ULONG			Reserved2[ 2 ];
    VM_COUNTERS	    VmCounters;
#if _WIN32_WINNT >= 0x500
    IO_COUNTERS	    IoCounters;
#endif
    SYS_THREADS  Threads[ 1 ];
} SYS_PROCESSES, * PSYS_PROCESSES;

//---------------------------------------------------------------------------------------------------------------------
//  lstEnumProcesses
//
//  Enumerates all processes in the system using NtQuerySystemInformation.
//  
//  Parameters:
//	[OUT]  lst - list of PID and names
//
//  Returns:
//	  true, if successful, false - otherwise.
//
//---------------------------------------------------------------------------------------------------------------------
// convert wstring_to_string
inline std::string lexical_cast(const std::wstring &source)
    {
        std::string result;
        result.resize( source.size() );

        for ( std::wstring ::const_iterator it = source.begin(); it != source.end(); ++it )
            result[ std::distance ( source.begin(), it )  ] =
                std::use_facet < std::ctype < wchar_t > > ( std::locale(),  0  ).narrow( (*it), '?' );
        return result;
    }
//---------------------------------------------------------------------------------------------------------------------
bool LstEnumProcesses( std::map<std::string, DWORD> &lst )
{
    lst.clear();
	HINSTANCE hpNtDll;
	NTSTATUS (WINAPI * pfnZwQSI)(UINT, PVOID, ULONG, PULONG);
    bool bRes = true;
    PSYS_PROCESSES pProcesses = NULL;
    PVOID pBuffer = NULL;
	NTSTATUS Status;
    ULONG cbBuffer = 0xABCD; // 40K buffer should be enough
	HANDLE hHeap = GetProcessHeap(); // get a handle to the default process heap

	// get handle to NTDLL.DLL
	hpNtDll = GetModuleHandle( "ntdll.dll" );
	if( hpNtDll == NULL )
    {
        return false;
    }
	// find the address of ZwQuerySystemInformation
	*(FARPROC *)&pfnZwQSI = GetProcAddress(hpNtDll, "ZwQuerySystemInformation");
	if( pfnZwQSI == NULL )
    {
        bRes = false;
		goto _end;
    }
    do
    {
		pBuffer = HeapAlloc(hHeap,  0 , cbBuffer);
		if (pBuffer == NULL)
        {
            bRes = false;
		    goto _end;
        }
		Status = pfnZwQSI( SystemProcessesAndThreadsInformation, pBuffer, cbBuffer, NULL);

		if (Status == STATUS_INFO_LENGTH_MISMATCH)
		{
			HeapFree(hHeap,  0 , pBuffer);
			cbBuffer = cbBuffer <<  2 ; // if buffer size is not enough then encrease it
		}
		else if( !NT_SUCCESS(Status) )
		{
			HeapFree(hHeap,  0 , pBuffer);
            bRes = false;
		    goto _end;
		}
    }while( STATUS_INFO_LENGTH_MISMATCH == Status );
    pProcesses = (PSYS_PROCESSES)pBuffer;
    while(true)
    {
		PCWSTR pszProcessName = pProcesses->ProcessName.Buffer;
		if( pszProcessName == NULL )
        {
			pszProcessName = L"System Idle Processes";
        }
#ifdef _UNICODE
        lst[pszProcessName] = pProcesses->ProcessId;
#else
		CHAR szProcessName[MAX_PATH];
		WideCharToMultiByte(CP_ACP,  0 , pszProcessName, - 1 , szProcessName, MAX_PATH, NULL, NULL);

        wstring instr = pszProcessName;
        string outstr = lexical_cast( instr );
        lst[outstr] = pProcesses->ProcessId;
#endif
		if( pProcesses->NextEntryDelta ==  0 )
        {
			break;
        }
		// find the address of the next process structure
		pProcesses = (PSYS_PROCESSES)(((LPBYTE)pProcesses) + pProcesses->NextEntryDelta);
	}
_end:
    if( NULL != pBuffer )
    {
	    HeapFree(hHeap,  0 , pBuffer);
    }
    if(  0  != hpNtDll )
    {
        FreeLibrary(hpNtDll);
    }
	return true;
}
//---------------------------------------------------------------------------------------------------------------------
map<string, string> GetServiceList() // get list of services   <service name, display name>
{
    map<string, string> lstResult;
	SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
	if( hSCM == NULL )
    {
		return lstResult;
    }
	BYTE bBuffer[ 2048 ] = { 0 };
	DWORD dwResumeHandle =  0 ;
	DWORD cbNeeded;
	DWORD cServices;
	BOOL bContinue;
	DWORD dwError;
	LPENUM_SERVICE_STATUS pStatus;
	do
	{
		bContinue = FALSE;
		pStatus = (LPENUM_SERVICE_STATUS)bBuffer;
		// retrieve a portion of service status information
		if (!EnumServicesStatus(hSCM, SERVICE_WIN32, SERVICE_STATE_ALL,
								pStatus, sizeof(bBuffer), &cbNeeded,
								&cServices, &dwResumeHandle))
		{
			dwError = GetLastError();
			if (dwError != ERROR_MORE_DATA)
			{
				break;
			}
			bContinue = TRUE;
		}
		for (DWORD i =  0 ; i < cServices; i++) 
		{
            lstResult[ pStatus->lpServiceName ] = pStatus->lpDisplayName;
			pStatus++;
		}
	}
	while( bContinue );
	CloseServiceHandle(hSCM);
    return lstResult;
}
...
Рейтинг: 0 / 0
GetCurrentProcessId
    #33281007
siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей АлексеевичДа нет, форма вопроса интересная:
ТупойА если хочу получить ID другого процесса ? ... Как кто с этим бореться ?

Респект!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / GetCurrentProcessId
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]