首先,将自己的程序与。txt文件相关联(通过注册表),然后试试这个代码(bcb的)在winmain()函数的开始处添加:
HWND RuningHandle=FindWindowEx(NULL,NULL,"自己窗体名",NULL);
//如果已经有一个实例运行,则只向该实例发送一个消息
//告诉它该打开哪个文件,而不运行程序if(RuningHandle!=NULL)
{
TClipboard *Clipbd=new TClipboard();
Clipbd->Clear();
Clipbd->SetTextBuf(CLine);
delete Clipbd;
PostMessage(RuningHandle,OPEN_NEW_FILE,NULL,NULL);
return 0;
}
HWND RuningHandle=FindWindowEx(NULL,NULL,"自己窗体名",NULL);
//如果已经有一个实例运行,则只向该实例发送一个消息
//告诉它该打开哪个文件,而不运行程序if(RuningHandle!=NULL)
{
TClipboard *Clipbd=new TClipboard();
Clipbd->Clear();
Clipbd->SetTextBuf(CLine);
delete Clipbd;
PostMessage(RuningHandle,OPEN_NEW_FILE,NULL,NULL);
return 0;
}
或者是用pagecontrol。
谢谢,这的确是个办法,但我还有点问题:
1.如果接收这个消息,我使用Delphi编程,要接管系统本身的消息吗,如何做?
2.我用EditPlus试了一下,发现每次打开一个新文件后,先前拷贝的剪贴板中的内容还在,它可能用的其它方法。
谢谢,这的确是个办法,但我还有点问题:
1.如果接收这个消息,我使用Delphi编程,要接管系统本身的消息吗,如何做?
2.我用EditPlus试了一下,发现每次打开一个新文件后,先前拷贝的剪贴板中的内容还在,它可能用的其它方法。
1.不需要
2.我再想想
1.不需要,那么在Delphi中如何写(接收)。
1.不需要,那么在Delphi中如何写(接收)。
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(OPEN_NEW_FILE,TMessage*,OpenNewFile)
END_MESSAGE_MAP(TForm)
我就是说,VB都要,VB要用API来操作,Delphi如何做,应该与BCB不同?
我就是说,VB都要,VB要用API来操作,Delphi如何做,应该与BCB不同?
我就是说,VB都要,VB要用API来操作,Delphi如何做,应该与BCB不同?
我想你要修改一下就很简单了吧!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;const
wm_Openfile=wm_user+100;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure wmopenfile(var msg:tmessage);message wm_openfile;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.wmopenfile(var msg: tmessage);
var
p:pchar;
begin
p:=pchar(msg.WParam);
showmessage(p);
end;procedure TForm1.Button1Click(Sender: TObject);
var
h:hwnd;
begin
caption:='abc';
h:=findwindow('tform1','form1');
if h>0 then
sendmessage(h,wm_Openfile,integer(pchar('c:\windows\readme.txt')),0);
caption:='form1';
end;end.