2 / 2 / 0
Регистрация: 17.12.2014
Сообщений: 148
1

Получение Pid процесса

12.02.2017, 14:08. Показов 5260. Ответов 9
Метки нет (Все метки)

Программа определяет размер и заполненность жесткого диска, название звуковой карты и выводит список и количество запущенных процессов. Хочу добавить выведение pid процесса рядом с названием. Подскажите пожалуйста как это можно осуществить ?
C++
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
# include <Windows.h>
# include <conio.h>
# include <locale>
#pragma comment(lib, "wbemuuid.lib")
 
 
int main(int argc, char **argv)
{
int a = 0;
 
cout<<" Information about hard disk drive :  "<<endl;
 
 
 
 
      setlocale(LC_ALL, "rus");
    int sz = GetLogicalDriveStrings(NULL, 0);
    TCHAR* szLogicalDrives = new TCHAR [sz];
    GetLogicalDriveStrings(sz, szLogicalDrives);
 
    while(*szLogicalDrives)
    {
        TCHAR szDisk[80];
        lstrcpy(szDisk, szLogicalDrives);
        GetDriveType(szDisk);
        UINT uDriveType = GetDriveType(szDisk);
        if(uDriveType == DRIVE_FIXED)
        {
            std::wcout << szDisk << std::endl;
            //определяем объем      
            __int64 uliTotalBytes;
            __int64 FreeBytesAvailable;
            GetDiskFreeSpaceEx(szDisk,(PULARGE_INTEGER)&FreeBytesAvailable,(PULARGE_INTEGER)&uliTotalBytes,NULL);
            std::wcout << L"Объем диска:\t" << uliTotalBytes/(1024*1024)  << L" МБ\n";
            std::wcout << L"Объем свободного места на диске:\t" << FreeBytesAvailable/(1024*1024)  << L" МБ\n";
            std::wcout << std::endl;
        }       
        while(*szLogicalDrives) szLogicalDrives++;
        szLogicalDrives++;
    }
 
////////////////////////
    cout<<" Information about sound device :  "<<endl;
cout<<" "<<endl;
    HRESULT hres;
 
    // Step 1: --------------------------------------------------
    // Initialize COM. ------------------------------------------
 
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hres))
    {
        cout << "Failed to initialize COM library. Error code = 0x" 
            << hex << hres << endl;
        return 1;                  // Program has failed.
    }
 
    // Step 2: --------------------------------------------------
    // Set general COM security levels --------------------------
 
    hres =  CoInitializeSecurity(
        NULL, 
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved
        );
 
                      
    if (FAILED(hres))
    {
        cout << "Failed to initialize security. Error code = 0x" 
            << hex << hres << endl;
        CoUninitialize();
        return 1;                    // Program has failed.
    }
    
    // Step 3: ---------------------------------------------------
    // Obtain the initial locator to WMI -------------------------
 
    IWbemLocator *pLoc = NULL;
 
    hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc);
 
    if (FAILED(hres))
    {
        cout << "Failed to create IWbemLocator object."
            << " Err code = 0x"
            << hex << hres << endl;
        CoUninitialize();
        return 1;                 // Program has failed.
    }
 
    // Step 4: -----------------------------------------------------
    // Connect to WMI through the IWbemLocator::ConnectServer method
 
    IWbemServices *pSvc = NULL;
 
    // Connect to the root\cimv2 namespace with
    // the current user and obtain pointer pSvc
    // to make IWbemServices calls.
    hres = pLoc->ConnectServer(
         _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
         NULL,                    // User name. NULL = current user
         NULL,                    // User password. NULL = current
         0,                       // Locale. NULL indicates current
         NULL,                    // Security flags.
         0,                       // Authority (for example, Kerberos)
         0,                       // Context object 
         &pSvc                    // pointer to IWbemServices proxy
         );
    
    if (FAILED(hres))
    {
        cout << "Could not connect. Error code = 0x" 
             << hex << hres << endl;
        pLoc->Release();     
        CoUninitialize();
        return 1;                // Program has failed.
    }
 
    cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
 
 
    // Step 5: --------------------------------------------------
    // Set security levels on the proxy -------------------------
 
    hres = CoSetProxyBlanket(
       pSvc,                        // Indicates the proxy to set
       RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
       NULL,                        // Server principal name 
       RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
       RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
       NULL,                        // client identity
       EOAC_NONE                    // proxy capabilities 
    );
 
    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket. Error code = 0x" 
            << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }
 
    // Step 6: --------------------------------------------------
    // Use the IWbemServices pointer to make requests of WMI ----
 
    // For example, get the name of the operating system
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_SoundDevice"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for operating system name failed."
            << " Error code = 0x" 
            << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }
 
    // Step 7: -------------------------------------------------
    // Get the data from the query in step 6 -------------------
 
    IWbemClassObject *pclsObj = NULL;
    ULONG uReturn = 0;
   
    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
            &pclsObj, &uReturn);
 
        if(0 == uReturn)
        {
            break;
        }
 
        VARIANT vtProp;
 
        hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
        wcout << L" Name : " << vtProp.bstrVal << endl;
        hr = pclsObj->Get(L"Status", 0, &vtProp, 0, 0);
        wcout << L" Status : " << vtProp.bstrVal << endl;
        hr = pclsObj->Get(L"DeviceID", 0, &vtProp, 0, 0);
        wcout << L" DeviceID : " << vtProp.bstrVal << endl;
        VariantClear(&vtProp);
 
        pclsObj->Release();
    }
     ///////////
    cout<<"  "<<endl;
    cout<<" Information about running proces :  "<<endl;
    cout<<"  "<<endl;
 
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_Process"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for processes failed. "
             << "Error code = 0x" 
             << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }
    else
    { 
        IWbemClassObject *pclsObj;
        ULONG uReturn = 0;
   
        while (pEnumerator)
        {
            
            hres = pEnumerator->Next(WBEM_INFINITE, 1, 
                &pclsObj, &uReturn);
 
            if(0 == uReturn)
            {
                break;
            }
 
            VARIANT vtProp;
 
            // Get the value of the Name property
            hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
            wcout << "Process Name : " << vtProp.bstrVal << endl;
            VariantClear(&vtProp);
            a++; ////////// счетчик
        }
    }
 
    cout<<"Количество запущенных процессов  "<<a<<endl;
 
 
    // Cleanup
    // ========
    
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    CoUninitialize();
 
    system("pause");
    return 0;   // Program successfully completed.
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2017, 14:08
Ответы с готовыми решениями:

Получить PID процесса
Здравствуйте все! помогите кто чем может...:( Задача: Два разных процесса (А и В) запустили...

Получить по PID имя процесса
Здравствуйте! У меня проблема заключается в том, что есть PID нужного мне процесса, но имя самого...

Как узнать состояние процесса по PID?
Доброго времени суток, подскажите как можно узнать запущен ли процесс или не запущен если я знаю...

Как узнать заголовок окна по PID процесса
Тут Я скрываю окно по Заголовку программы. У меня не большой вопрос как узнать Заголовок окна на...

9
Покинул форум
3851 / 1243 / 329
Регистрация: 07.05.2015
Сообщений: 2,481
12.02.2017, 16:26 2
NtQuerySystemInformation или CreateToolhelp32Snapshot или EnumProcesses - выбирайте.
0
2 / 2 / 0
Регистрация: 17.12.2014
Сообщений: 148
12.02.2017, 23:12  [ТС] 3
Я плохо разбираюсь в WMI и API, сделал примерно так. Но PID который я вывожу не меняется, подскажите пожалуйста где я ошибаюсь ? Место где я использовал EnumProcessModules выделено /////////////

C++
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
 cout<<" Information about running proces :  "<<endl;
    cout<<"  "<<endl;
 
 
    
 
 
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_Process"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for processes failed. "
             << "Error code = 0x" 
             << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }
    else
    { 
        IWbemClassObject *pclsObj;
        ULONG uReturn = 0;
   
        while (pEnumerator)
        {
            ////////////////////////
            int processID = 0;
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );
    BOOL WINAPI EnumProcessModules(
     HANDLE  hProcess,
  _Out_ HMODULE *lphModule,
  _In_  DWORD   cb,
  _Out_ LPDWORD lpcbNeeded
    ); 
    ////////////////////////
            hres = pEnumerator->Next(WBEM_INFINITE, 1, 
                &pclsObj, &uReturn);
 
            if(0 == uReturn)
            {
                break;
            }
 
            VARIANT vtProp;
 
            // Get the value of the Name property
            hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
            wcout << "Process Name : " << vtProp.bstrVal << endl;
             wcout << "Process ID: " << EnumProcessModules << endl;
            VariantClear(&vtProp);
            a++;
        }
    }
 
    cout<<"Количество запущенных процессов  "<<a<<endl;
0
Покинул форум
3851 / 1243 / 329
Регистрация: 07.05.2015
Сообщений: 2,481
13.02.2017, 09:28 4
Vlados117, уважаемый, Вы определитесь: ID процесса или его модули Вам нужны?
0
2 / 2 / 0
Регистрация: 17.12.2014
Сообщений: 148
13.02.2017, 12:30  [ТС] 5
Извиняюсь, ошибся. Нужен ID. Получается :
C++
1
wcout << "Process ID: " << processID << endl;
.
Тогда EnumProcessModules не нужен ?
Получается что в hProcess у меня находится HANDLE процесса, а есть функция которая возвращает ID по HANDLE ?
0
Покинул форум
3851 / 1243 / 329
Регистрация: 07.05.2015
Сообщений: 2,481
13.02.2017, 13:09 6
Vlados117, послушайте, уважаемый, либо Вы сейчас четко формулируете конечную цель, либо Вы останетесь один на один со своей проблемой. ID какого процесса? Вам просто нужен список процессов с их ID или все же что? Вы способны отвечать на прямо поставленный вопрос?
0
Эксперт Python
5395 / 3819 / 1213
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
13.02.2017, 14:06 7
Цитата Сообщение от Vlados117 Посмотреть сообщение
а есть функция которая возвращает ID по HANDLE ?
Может GetProcessId?
0
2 / 2 / 0
Регистрация: 17.12.2014
Сообщений: 148
13.02.2017, 16:22  [ТС] 8
Нужно вывести названия всех запущенных процессов и их ID

Добавлено через 1 минуту
Вот так ?
C++
1
2
3
DWORD WINAPI GetProcessId(
  HANDLE hProcess
);
Добавлено через 16 минут
C++
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
cout<<" Information about running proces :  "<<endl;
    cout<<"  "<<endl;
 
 
    
 
 
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_Process"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for processes failed. "
             << "Error code = 0x" 
             << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }
    else
    { 
        IWbemClassObject *pclsObj;
        ULONG uReturn = 0;
   
   
      int processID=0 ;
        while (pEnumerator)
        {
            ////////////////////////
            
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );
    DWORD WINAPI GetProcessId(
  HANDLE hProcess
);
    
    ////////////////////////
           
hres = pEnumerator->Next(WBEM_INFINITE, 1, 
                &pclsObj, &uReturn);
 
            if(0 == uReturn)
            {
                break;
            }
 
            VARIANT vtProp;
 
            // Get the value of the Name property
            hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
            wcout << "Process Name : " << vtProp.bstrVal << endl;
             wcout << "Process ID: " << GetProcessId(
  hProcess)<< endl;
            VariantClear(&vtProp);
            a++;
        }
    }
 
    cout<<"Количество запущенных процессов  "<<a<<endl;
0
Покинул форум
3851 / 1243 / 329
Регистрация: 07.05.2015
Сообщений: 2,481
13.02.2017, 17:32 9
Лучший ответ Сообщение было отмечено Vlados117 как решение

Решение

Накидал пример (правда на C), допиливайте его на свое усмотрение сами.
C
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
#define UNICODE
 
#include <windows.h>
#include <stdio.h>
#include <locale.h>
 
typedef LONG NTSTATUS;
 
#define SystemProcessInformation 5
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
 
typedef struct _UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
 
typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG          NextEntryOffset;
    ULONG          NumberOfThreads;
    LARGE_INTEGER  WorkingSetPrivateSize;
    ULONG          HardFaultCount;
    ULONG          NumberOfThreadsHighWatermark;
    ULONGLONG      CycleTime;
    LARGE_INTEGER  CreateTime;
    LARGE_INTEGER  UserTime;
    LARGE_INTEGER  KernelTime;
    UNICODE_STRING ImageName;
    LONG           BasePriority;
    HANDLE         UniqueProcessId;
    HANDLE         InheritedFromUniqueProcessId;
    ULONG          HandleCount;
    ULONG          SessionId;
    ULONG_PTR      UniqueProcessKey;
    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;
    SIZE_T         PrivatePageCount;
    LARGE_INTEGER  ReadOperationCount;
    LARGE_INTEGER  WriteOperationCount;
    LARGE_INTEGER  OtherOperationCount;
    LARGE_INTEGER  ReadTransferCount;
    LARGE_INTEGER  WriteTransferCount;
    LARGE_INTEGER  OtherTransferCount;
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
 
NTSTATUS (__stdcall *NtQuerySystemInformation)(
    ULONG  SystemInformationClass,
    PVOID  SystemInformation,
    ULONG  SystemInformationLength,
    PULONG ReturnLength
);
 
ULONG (__stdcall *RtlNtStatusToDosError)(
    NTSTATUS Status
);
 
BOOLEAN LocateSignatures(HMODULE mod) {
  if (!(NtQuerySystemInformation = (PVOID)GetProcAddress(
    mod, "NtQuerySystemInformation"
  ))) return FALSE;
 
  if (!(RtlNtStatusToDosError = (PVOID)GetProcAddress(
    mod, "RtlNtStatusToDosError"
  ))) return FALSE;
 
  return TRUE;
}
 
void PrintErrMessage(NTSTATUS nts) {
  LPVOID msg;
  FormatMessage(
      FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
      NULL, 0 != nts ? RtlNtStatusToDosError(nts) : GetLastError(),
      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR) &msg, 0, NULL
  );
  wprintf(L"%s", msg);
  LocalFree(msg);
}
 
int wmain(void) {
  PSYSTEM_PROCESS_INFORMATION spi, tmp;
  NTSTATUS nts;
  ULONG sz = 1024;
 
  if (!LocateSignatures(GetModuleHandle(L"ntdll.dll"))) {
    PrintErrMessage(0);
    return -1;
  }
 
  spi = (PSYSTEM_PROCESS_INFORMATION)malloc(sz);
  if (STATUS_INFO_LENGTH_MISMATCH == NtQuerySystemInformation(
    SystemProcessInformation, spi, sz, &sz
  )) {
    spi = (PSYSTEM_PROCESS_INFORMATION)realloc(spi, sz);
    if (!NT_SUCCESS(nts = NtQuerySystemInformation(
      SystemProcessInformation, spi, sz, NULL
    ))) {
      PrintErrMessage(nts);
      free(spi);
      return -1;
    }
  }
 
  printf("Process                   Pr    PID\n");
  printf("-------                  ---   ----\n");
  tmp = spi;
  while (tmp->NextEntryOffset) {
    wprintf(L"%-25s%3d%7lu\n", tmp->ImageName.Buffer, tmp->BasePriority, tmp->UniqueProcessId);
    tmp = (PSYSTEM_PROCESS_INFORMATION)((PCHAR)tmp + tmp->NextEntryOffset);
  }
  free(spi);
 
  return 0;
}
2
Ушел с форума
Эксперт С++
16449 / 7413 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
13.02.2017, 20:18 10
Лучший ответ Сообщение было отмечено Vlados117 как решение

Решение

Ну и вариант с Toolhelp API на всякий случай:
C++
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
#include <Windows.h>
#include <TlHelp32.h>
#include <cstdio>
 
int main()
{
    HANDLE const hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    if (INVALID_HANDLE_VALUE == hSnap)
    {
        printf("CreateToolhelp32Snapshot failed, err = 0x%.8lx.\r\n", GetLastError());
        return EXIT_FAILURE;
    }
 
    PROCESSENTRY32W Entry = {0};
    Entry.dwSize = sizeof (Entry);
 
    if (Process32FirstW(hSnap, &Entry))
    {
        do
        {
            wprintf(L"Process PID = %lu, Name = %s\r\n", Entry.th32ProcessID, &Entry.szExeFile[0]);
        } while (Process32NextW(hSnap, &Entry));
    }
 
    CloseHandle(hSnap);
    return EXIT_SUCCESS;
}
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2017, 20:18
Помогаю со студенческими работами здесь

Получение PID по щелчку
Подскажите пожалуйста, никак нельзя получить PID другого процесса, щелкнув мышью по окну, которое...

Определить заголовок(имя) окна, зная PID его процесса
Сабж! Уже 2ой день не могу найти - как? У меня известе PID и hwnd процесса, как узнать имя окна(то...

Зная pid процесса (либо его заголовок), развернуть окно приложения на полный экран
Друзья, всем привет! Подскажите, в каком направлении двигаться, и какие функции использовать. ...

Получение кода завершения процесса
Здравствуйте, уважаемые форумчане, начал работать с WinAPI, написал такую небольшую программу....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru