unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
HOOK_MD5_FILENAME='3a25d2dd729b67b19463ce804c841f48';
var
Form1: TForm1;
lpname:PPChar;
lp:THandle;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp = 0 then begin
lp := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,256, HOOK_MD5_FILENAME);
end;
if lp <> 0 then
lpname:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0);
if PChar(lpname)='c:\windows\system32\cmd.exe' then
begin
//返回True给project2 这里该怎么把这个结果传给project2;
end
else
begin
//返回False给project2
end;
end;end.
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;procedure Select_Exe;external 'apd.dll';implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
Select_Exe;
end;end.library apd;uses
windows,
sysutils,
Classes;const
HOOK_MD5_FILENAME='3a25d2dd729b67b19463ce804c841f48';var
lpname:PPChar;
lp:THandle;
b:bool;procedure Select_Exe;Stdcall;
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp = 0 then begin
lp := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,256, HOOK_MD5_FILENAME);
end;
if lp <> 0 then
lpname:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0); if ExtractFileName('c:\windows\windows\cmd.exe')<>'' then
begin
StrCopy(PChar(lpname),'c:\windows\windows\cmd.exe'); //这里传入lpname后该怎么通知project1.exe去读取lpname; // 这里该怎么 等project1.exe传入数据后,判断是否要删除cmd.exe; if b then
DeleteFile('c:\windows\system32\cmd.exe')
else
Exit;
end;
end;exports Select_Exe;beginend.问题在代码注示里,请帮修改下,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
HOOK_MD5_FILENAME='3a25d2dd729b67b19463ce804c841f48';
var
Form1: TForm1;
lpname:PPChar;
lp:THandle;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp = 0 then begin
lp := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,256, HOOK_MD5_FILENAME);
end;
if lp <> 0 then
lpname:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0);
if PChar(lpname)='c:\windows\system32\cmd.exe' then
begin
//返回True给project2 这里该怎么把这个结果传给project2;
end
else
begin
//返回False给project2
end;
end;end.
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;procedure Select_Exe;external 'apd.dll';implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
Select_Exe;
end;end.library apd;uses
windows,
sysutils,
Classes;const
HOOK_MD5_FILENAME='3a25d2dd729b67b19463ce804c841f48';var
lpname:PPChar;
lp:THandle;
b:bool;procedure Select_Exe;Stdcall;
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp = 0 then begin
lp := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,256, HOOK_MD5_FILENAME);
end;
if lp <> 0 then
lpname:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0); if ExtractFileName('c:\windows\windows\cmd.exe')<>'' then
begin
StrCopy(PChar(lpname),'c:\windows\windows\cmd.exe'); //这里传入lpname后该怎么通知project1.exe去读取lpname; // 这里该怎么 等project1.exe传入数据后,判断是否要删除cmd.exe; if b then
DeleteFile('c:\windows\system32\cmd.exe')
else
Exit;
end;
end;exports Select_Exe;beginend.问题在代码注示里,请帮修改下,
解决方案 »
- 怎样在DBgrid中同时实现搜索和修改功能
- 关于启动与退出的问题,能否像VB一样有End与Sub Main
- 伟大的俺,发现了一个CSDN惊天大密秘!! 哇哈哈哈,各位JR进来告诉你们哈
- 求TdxTreeList(Delphi6)控件!哪位大侠有帮帮忙啦
- 哪里有video for D6 、D7 这个控件的下载
- 双击FastReport的TfrPreview为什么不能进入编辑模式(没反应)?
- 简单问题,散分...
- 如何提高导出速度
- 带压缩文件的发信、收信问题?(手头就这么点分,我还会继续加)
- 代做python深度学习实验,代码调试,环境搭建
- 调用外部exe后,有没有办法自动输入该exe的密码?
- 恐怖问题
给你个例子,你的问题,用DLL共享即可解决,即不同进程间共享DLL数据,注,来源于DELPHI 5开发者指南
//dll代码
library shareLib;
uses ShareMem,Windows,Sysutils,Classes'
const
cMMFileName : Pchar = 'SharedMapData';
{$I DLLDATA.INC} //数据结构定义
var
GLobalData : PGLobalDLLData;
MapHandle : THandle;
procedure GetDllData(var AGlobalData : PGLobalDLLData);stdcall;
begin
AGlobalData := GLobalData;
end;
procedure OpenShareData;
var Size : integer;
begin
Size := Sizeof(TGLobalDLLData);
MapHandle := CreateFileMapping(DWord(-1),nil,PAGE_READWRITE,0,Size,cMMFileName);
if MapHandle = 0 then RaiseLastWin32Error;
GLobalData := MapVierOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,Size);
GLobalData^.s := 'ShareLib';
GLobalData^.i := 10;
if GLobalData = nil then
begin
CloseHandle(MapHandle);
RaiseLastWin32Error;
end;
end; procedure CloseShareData;
begin
UnmapViewofFile(GLobalData);
CloseHandle(MapHandle);
end;procedure DllEntryPoint(dwReason : DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH : OpenShareData;
DLL_PROCESS_DETACH : CloseShareData;
end;
end;exports
GetDLLData;
begin
DllProc := @DllEntryPoint;
DllEntryPoint(DLL_PROCESS_ATTACH);
end.
//DLLDATA.INC 数据定义
Type
PGlobalDLLData = TGlobalDLLData;
TGlobalDLLData = record;
S : string[100];
i : integer;
end;注意是两个不同的应用
//读取DLL数据程序
{$I DLLDATA.INC}
var GLobalData : PGlobalDLLData;
procedure GetDLLData(var AGlobalData : PGlobalDLLData);stdcall External 'Sharelib.dll';//静态方式
//定时器中读取数据
procedure TMainform.tmTimerTimer(sender : TObject);
begin
GetDllData(LobalData);
end;//写数据程序
var GLobalData : PGlobalDLLData;
procedure GetDLLData(var AGlobalData : PGlobalDLLData);stdcall External 'Sharelib.dll';
//先获取数据
GetDllData(GLobalData);
//再写数据
GLobalData^.s := '测试';
GLobalData^.I := 100000;
要在进程间用CreateFileMapping传递数据很简单的办法是定义需要传递的数据结构
PShareDataRec = ^TShareDataRec;
TShareDataRec = packed record
LpName: array[0..255] of Char; //程序路径
....其它数据
end;发送方:
var
pMap:pointer;
ShareData:PShareDataRec ; ShareData:=PShareDataRec(MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0));
ShareData^.LpName:='.....';//需要传的名字。接收方:
var
pMap:pointer;
ShareData:PShareDataRec ;
ShareData:=PShareDataRec(MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0));
ShareData^.LpName //获取
不知道行不行,但愿你的程序时有窗口的