Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/37: Рейтинг темы: голосов - 37, средняя оценка - 4.95
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
1

Обмен данными между процессами

19.10.2013, 20:07. Показов 7404. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
хотелось бы узнать в какую сторону копать сей вопрос (Обмен данными между процессами)

надо чтобы одна программа передала другой, скажем строку из 200 символов

условия :
-не использовать чтение диска, иначе я бы не задавал этот вопрос
-другая программа не знает handle процесса другой (предполагается что должна откудато узнать) знает только ее имя и может знать все что и другая при запуске (свой путь параметры и прочее)

по сути мне интересно как сказать операционоой системе что повилась программа N и она где-то создала в памяти хранилище с ключем K, чтобы все остальные запущенные дочерние процессы могли чтобы нибудь оттуда прочесть без использования диска
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2013, 20:07
Ответы с готовыми решениями:

Обмен данными между формами
Есть две формы, как организовать что бы из form2.edit1 данные переместились в переменную a из form1?

Обмен данными между программами
Подскажите, можно ли одновременно принимать данные из двух или более программ в третьей, например в...

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

Обмен данными между TWebBrowser и TMemo
Подскажите как организовать обмен значениями полей из TWebBrowser в TMemo и наоборот. Например...

8
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
19.10.2013, 20:19 2
FindWindow
SendMessage
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
19.10.2013, 20:27  [ТС] 3
FindWindow
предлагаешь слепо верить именам процессов которые запущены, ведь кроме как по имени, как найти "свой" процесс?
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
19.10.2013, 20:35 4
Если процессы ты создаешь сам, то можешь задать им нужные уникальные имена.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
19.10.2013, 20:41  [ТС] 5
Имя процесса совпадает с именем файла? если так, что придется имя файла называть как adf346ftfg.exe чтобы быть уверенным что совпадений не будет.

А также что делать в случае если чужой процесс так был назван умышленно чтобы нарушить работу программы. Неужели кроме имени окна нельзя ничего "сохранить в системе временно" под своим ключем, например сохранить там этот Handle процесса и далее просто через WM_COPYDATA обмениваться
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
19.10.2013, 20:50 6
Цитата Сообщение от noname_club Посмотреть сообщение
Неужели кроме имени окна нельзя ничего "сохранить в системе временно" под своим ключем
RegisterWindowMessage
Mutex
About Atom Tables

IPC: основы межпроцессного взаимодействия
1
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
19.10.2013, 21:06  [ТС] 7
http://delphiworld.narod.ru/base/filemapping.html думаю это самое подходящее
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
19.10.2013, 22:01  [ТС] 8
Выкладываю готовый модуль

ProcessTransport.pas
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
unit ProcessTransport;
 
// модуль обмена данными между процессами
 
// [url]http://delphiworld.narod.ru/base/filemapping.html[/url]
 
interface
 
uses
  Windows,SysUtils;
 
type
  PT_File = record
    name: AnsiString;
    handle: THandle;
    size: byte;
    memoryAdress: PChar;
  end;
 
function PT_CreateFileMapping(filename: AnsiString; fileSize: byte = 2):PT_File;
 
procedure PT_WriteToFileMapping(fileRecord: PT_File; data:AnsiString);
 
function PT_ReadFromFileMapping(fileRecord: PT_File): AnsiString;
 
procedure PT_CloseFileMapping(fileRecord: PT_File);
 
implementation // -----------------
 
function PT_CreateFileMapping(filename: AnsiString; fileSize: byte = 2):PT_File;
begin
  Result.name:=filename;
  Result.size:= fileSize;
  Result.memoryAdress := nil;
 
  Result.handle := Windows.CreateFileMapping(MAXDWORD,Nil,PAGE_READWRITE,0,fileSize,PChar(filename));
  if Result.handle<>0 then
    Result.memoryAdress:= Windows.MapViewOfFile(Result.handle,FILE_MAP_WRITE,0,0,0);
 
end;
 
procedure PT_WriteToFileMapping(fileRecord: PT_File; data: AnsiString);
begin
  if (fileRecord.memoryAdress=nil) then exit;
 
  SysUtils.StrPCopy(fileRecord.memoryAdress, data);
 
end;
 
function PT_ReadFromFileMapping(fileRecord: PT_File): AnsiString;
begin
   if (fileRecord.memoryAdress=nil) then exit;
 
   result:= PChar(fileRecord.memoryAdress);
end;
 
procedure PT_CloseFileMapping(fileRecord: PT_File);
begin
    if (fileRecord.handle=0) OR (fileRecord.memoryAdress=nil) then exit;
    Windows.UnMapViewOfFile(fileRecord.memoryAdress);
    Windows.CloseHandle(fileRecord.handle);
end;
 
end.
исходник программы

Обмен данными между процессами


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
unit Main;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, ProcessTransport;
 
type
  TForm1 = class(TForm)
    edVariable: TEdit;
    lbEnterValues: TLabel;
    bbOK: TBitBtn;
    bbExit: TBitBtn;
    lbShowValue: TLabel;
    lbVariable: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure bbExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbOKClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
    Form1: TForm1;
 
    myfile: PT_File;
implementation
 
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
myfile:=PT_CreateFileMapping('helloworld');
 
end;
 
procedure TForm1.bbExitClick(Sender: TObject);
begin
//закроем форму
    Close;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 
    PT_CloseFileMapping(myfile);
 
    Action:=caFree;
end;
 
procedure TForm1.bbOKClick(Sender: TObject);
begin
// запись данных
 
    PT_WriteToFileMapping(myfile, edVariable.Text);
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// считывание
    lbVariable.Caption:= PT_ReadFromFileMapping(myfile);
end;
 
end.
Вложения
Тип файла: zip filemappingex.zip (802.5 Кб, 112 просмотров)
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
20.10.2013, 10:48  [ТС] 9
пересобрал с поддержкой юникода

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
unit ProcessTransport;
 
// модуль обмена данными между процессами
 
// [url]http://delphiworld.narod.ru/base/filemapping.html[/url]
 
interface
 
uses
  Windows,SysUtils;
 
type
  PT_File = record
    name: AnsiString;
    handle: THandle;
    size: byte;
    memoryAdress: PChar;
  end;
 
function PT_CreateFileMapping(filename: AnsiString; fileSize: byte = 2):PT_File;
 
procedure PT_WriteToFileMapping(fileRecord: PT_File; data:UTF8String);
 
function PT_ReadFromFileMapping(fileRecord: PT_File): UTF8String;
 
procedure PT_CloseFileMapping(fileRecord: PT_File);
 
implementation // -----------------
 
function PT_CreateFileMapping(filename: AnsiString; fileSize: byte = 2):PT_File;
begin
  Result.name:=filename;
  Result.size:= fileSize;
  Result.memoryAdress := nil;
 
  Result.handle := Windows.CreateFileMapping(MAXDWORD,Nil,PAGE_READWRITE,0,fileSize,PChar(filename));
  if Result.handle<>0 then
    Result.memoryAdress:= Windows.MapViewOfFile(Result.handle,FILE_MAP_WRITE,0,0,0);
 
end;
 
procedure PT_WriteToFileMapping(fileRecord: PT_File; data: UTF8String);
begin
  if (fileRecord.memoryAdress=nil) then exit;
 
  SysUtils.StrPCopy(fileRecord.memoryAdress, data);
 
end;
 
function PT_ReadFromFileMapping(fileRecord: PT_File): UTF8String;
begin
   if (fileRecord.memoryAdress=nil) then exit;
 
   result:= PWideChar(fileRecord.memoryAdress);
end;
 
procedure PT_CloseFileMapping(fileRecord: PT_File);
begin
    if (fileRecord.handle=0) OR (fileRecord.memoryAdress=nil) then exit;
    Windows.UnMapViewOfFile(fileRecord.memoryAdress);
    Windows.CloseHandle(fileRecord.handle);
end;
 
end.
Обмен данными между процессами
Вложения
Тип файла: zip filemappingexUnicode.zip (802.6 Кб, 118 просмотров)
3
20.10.2013, 10:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2013, 10:48
Помогаю со студенческими работами здесь

Обмен данными между двумя объектами Memo
Разработать программу, обеспечивающую обмен данными между двумя объектами Memo, (т.е. текст должен...

Обмен данными между Excel и приложением с применением dde
Здраствуйте, помогите ,пожалуйста, нужно написать программу обмена данными между программой excel и...

Обмен данными между массивами, описанными в разных формах
Приветствую коллеги, есть массив формы 1 и массив формы 2. Имена массивов одинаковые. Как...

Обмен данными между программами с помощью технологии DDE.
Помогите ,пожалуйста,написать программу, которая будет передавать в Excel коэффициенты квадратного...

Разработать программу, обеспечивающую обмен данными между двумя объекта-ми Memo
Разработать программу, обеспечивающую обмен данными между двумя объекта-ми Memo, (т.е. текст должен...

Разработать программу, обеспечивающую обмен данными между двумя объектами ТMemo
Разработать программу, обеспечивающую обмен данными между двумя объектами Memo, (т.е. текст должен...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru