程序已运行,如何打开其所属文件 proe.exe是画图软件
09br12.prt.1是其保存的文件
用这种方法可以打开:
shellexecute(handle,'open','proe.exe','e:\2009\9mon\09br12.prt.1',nil,sw_Show);如果proe.exe之前已经在运行状态,再执行以上代码时,会造成重复打开proe.exe这个软件。怎么才可以避免重复打开啊。
还有个问题,proe.exe在运行状态,选中09br12.prt.1直接拖放在proe软件界面上,可以打开这个文件,如果
能上delphi代码以这种方式打开文件,也不会重复打开proe.exe这个软件。
09br12.prt.1是其保存的文件
用这种方法可以打开:
shellexecute(handle,'open','proe.exe','e:\2009\9mon\09br12.prt.1',nil,sw_Show);如果proe.exe之前已经在运行状态,再执行以上代码时,会造成重复打开proe.exe这个软件。怎么才可以避免重复打开啊。
还有个问题,proe.exe在运行状态,选中09br12.prt.1直接拖放在proe软件界面上,可以打开这个文件,如果
能上delphi代码以这种方式打开文件,也不会重复打开proe.exe这个软件。
解决方案 »
- 100 分:如何在FAST-REPORT中实现套打??
- 关于ONGETTEXT
- 能告诉我delphi制作、注册、发布Activex控件的详细步骤吗?
- 高分,急问
- 请教一个关于获取web页面中图片的问题
- 在一个过程中打开一个窗体,如何等待该窗体关闭后才继续执行该过程中后面的语句?
- ADODataSet计算字段显示乱码的问题
- 快帮帮忙!
- Where can I get wbzx for windows 2000?.Can you give me?
- 这样的列表delphi里面用什么控件来实现
- MenuItem控件在那?谢谢
- 能否用两个timer实现label的上移及其caption的string循环变换?
程序是否是单实例运行不能通过外部程序实现
你不能修改那个程序
既然他有拖文件的功能,就用这个消息算了
注意接收文件的句柄可能不是窗体,而是其中的一个控件
用SPY++跟踪一下消息看看
用sendmessage发送这个消息
procedure TForm1.Button1Click(Sender: TObject);
var
Size: Cardinal;
DropFiles: PDropFiles;
Run: PChar;
MemHandle: THandle;
I: Integer;
hFile: HWND;
FileName: string;
Files: TStringList;
begin
hFile := FindWindow(nil, '画图软件');
if hFile = 0 then Exit;
FileName := 'C:\Code.txt';
Size := 0;
Files := TStringList.Create;
Files.Add(FileName);
for I := 0 to Files.Count - 1 do
begin
Inc(Size, Length(Files[I]) + 1);
end;
if Size > 0 then
begin
Inc(Size, 1 + SizeOf(TDropFiles));
MemHandle := GlobalAlloc(GMEM_ZEROINIT,Size);
DropFiles := GlobalLock(MemHandle);
with DropFiles^ do
begin
pFiles := SizeOf(TDropFiles);
pt := Point(0, 0);
fNC := False;
fWide := False;
end;
Run := Pointer(DropFiles);
Inc(Run, SizeOf(TDropFiles));
for I := 0 to Files.Count - 1 do
begin
StrPCopy(Run, Files[I]);
Inc(Run, Length(Files[I]) + 1);
end;
Run^ := #0;
GlobalUnlock(MemHandle);
PostMessage(hFile, WM_DROPFILES, MemHandle, 0);
GlobalFree(MemHandle);
end;
Files.Free;
end;