Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028

Программа в 10 строк на Delphi работает, а в Builder не хочет

08.12.2010, 10:01. Показов 2575. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форма, одна кнопка, поле мемо. Программа выводит в мемо список процессов.
В делфи работает без проблем, в билдере - отказано в доступе.
А мне надо этот кусок вставить в прогу С++
Первая проблема с подключением psapi.h (#include <psapi.h>)
C++
1
2
3
[Linker Error] Unresolved external 'EnumProcesses' referenced from C:\MY_PROJECTS\BUILDER\READPROCESS\UNIT1.OBJ
[Linker Error] Unresolved external 'EnumProcessModules' referenced from C:\MY_PROJECTS\BUILDER\READPROCESS\UNIT1.OBJ
[Linker Error] Unresolved external 'GetModuleFileNameExA' referenced from C:\MY_PROJECTS\BUILDER\READPROCESS\UNIT1.OBJ
Пришлось добавить строку
C++
1
#pragma comment(lib,"C:/Program Files/Borland/CBuilder6/Lib/Psdk/psapi.lib")
Чо еще надо - не пойму.
Хелп, плиз!

Borland Delphi 7:
Delphi
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
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PsAPI;
-----------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var aProcesses: array [0..$FFF] of DWORD;
i,cbNeeded: cardinal;
hProcess: THandle;
ModName:array[0..max_path] of char;
hMods:hmodule;
 
begin
  if Not EnumProcesses(@aProcesses,SizeOf(aProcesses),cbNeeded) then Exit
  else
    begin
      for i:=0 to cbNeeded div 4-1 do
        begin
            hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, aProcesses[i]);
            if hProcess>0 then
              begin
               EnumProcessModules(hProcess, @hMods, 4, cbNeeded);
               GetModuleFileNameEx(hProcess, hMods, ModName, sizeof(ModName));
               Memo1.Lines.Add(string(ModName));
               CloseHandle(hProcess);
              end;
        end;
    end;
end;
end.
С++ Builder:
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
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#include <vcl.h>
#pragma hdrstop
#pragma comment(lib,"C:/Program Files/Borland/CBuilder6/Lib/Psdk/psapi.lib")
#include "Unit1.h"
------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 DWORD aProcesses[0xFFF];
 unsigned long i, cbNeeded;
 HANDLE hProcess;
 char ModName[MAX_PATH];
 HMODULE hMods[1024];
 
 if (! EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded)) return;
 else
     {
     for (i=0;i<( cbNeeded/4-1 );i++)
         {
         hProcess=OpenProcess(PROCESS_QUERY_INFORMATION || PROCESS_VM_READ, false, aProcesses[i]);
 
         //==============   MessageBox( GetLastError ) =================================
         LPVOID lpMsgBuf;
         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
         NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0, NULL );
         MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK); LocalFree( lpMsgBuf );
         //==============================================================================
 
         if (hProcess>0)
             {
             EnumProcessModules(&hProcess, hMods, 4, &cbNeeded);
             GetModuleFileNameEx(hProcess, hMods, ModName, sizeof(ModName));
             Memo1->Lines->Add(ModName);
             CloseHandle(hProcess);
             }
         }
     }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2010, 10:01
Ответы с готовыми решениями:

Не работает программа. Не хочет читать файл
Нехочет читать файл, пишет error C2660: 'fopen_s' : function does not take 2 arguments #include &quot;stdafx.h&quot; #include...

Builder. Программа для создания прогам. Delphi 7
ПОЖАЛУЙСТА ! Как создавать программу которая имеет настройки, Например: Login и Пароль, я их вписал и всё нажимаю Build ( Создать )...

C++ Builder Не работает программа с массивом
Помогите пожалуйста, с программой на C++ Не работает обращение к массиву XOGame Вот фрагмент программы : int XOGame; int...

2
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
08.12.2010, 11:51
как то писал программку для работы с процессами, вот ссылка на топик может поможетУбить процесс, зная имя.exe

откомпилировал твою программку без проблем, правда не работает она
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
08.12.2010, 13:38  [ТС]
AlexSt, всё равно на OpenProcess спотыкается.
Вообще, глобальная задача - прочитать пару байт из процесса, зная его FileName.
А ReadProcessMemory просит хэндл процесса.

Добавлено через 35 минут
Ничо не понял.
Исправил
C++
1
2
 HMODULE hMods;
EnumProcessModules(hProcess, &hMods, 4, &cbNeeded);
Всё равно ругается - отказано в доступе, но всё равно работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.12.2010, 13:38
Помогаю со студенческими работами здесь

Программа не работает на компьютере, где не установлен Builder
Вот у меня есть програма написана на Borland C++ Builder. Я ее компилирую и все отлично пашет, но когда я переношу прогрогу на другой комп...

Программа работает на Delphi 2007 или более ранней но не работает на старших версиях (10.1 например)
В программе используются дополнительные файлы и dll написанные на fortran их кода нет ;( в ранних вернсиях все хорошо, в старшей 10.1 или...

Почему программа на Lazarus работает быстрее, чем на C++Builder?
Здравствуйте! Вопрос выкладываю на два форума - C++Builder и Lazarus. Это, пожалуй, не вопрос, а результат эксперемента. И так,...

Почему данный код работает в builder 6 а в builder 10 не работает?
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED); SetLayeredWindowAttributes(Handle, 0, 128,...

radiogroup delphi программа не работает
мне надо через программу с радио группой поменять местами 2 переменные. одна строка это обмен с помощью третьей переменной, другая без, но...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru