类似word 2002中打开文件的功能是如何实现的?(200分)

  • 主题发起人 主题发起人 boyuanus
  • 开始时间 开始时间
B

boyuanus

Unregistered / Unconfirmed
GUEST, unregistred user!
据个例子,如果我在桌面上面有个test.doc文件,我用鼠标把它双击打开,这个时候word 2002会自动运行并且打开这个文件。这一个步骤我明白如何实现。<br><br>现在的问题是,word已经打开了这个test.doc文件,我不知道我已经用word打开了,我在桌面上面找到test.doc文件,然后双击,可以看到那个打开的test.doc文件窗口自动获得焦点,并且显示在最前面。<br>请问这一步骤应该如何实现。想了很久,一直不得其解。<br>
 
补充一下,当这个文件已经被打开之后再被双击打开,word不会去开新的窗口,而会把原来这个文件的窗口显示在最前面。<br>这一步的处理如果用delphi是应该如何处理。
 
不是很明白你的意思。<br>1、双击就可以打开,是将.doc文件与winword.exe建立关联即可。<br>2、如果文档已经打开,就显示在最前面:运行word时,word程序先检测已经运行的word程序实例,并取得文档名,如果该文档名与要打开的文档名相同,就将其显示在最前面,而新的word进程则退出运行即可。
 
to watsonyin:<br>&gt;2、如果文档已经打开,就显示在最前面:运行word时,word程序先检测已经运行的word程序实例,并取得文档名,如果该文档名与要打开的文档名相同,就将其显示在最前面,而新的word进程则退出运行即可。<br><br>可否提供一些相关代码?我查找了一些,但是没有找到。<br>
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=737517<br>Delphi与Word之间的融合技术
 
一种方法是使用 FindWindow,但如果窗口标题经常变动则不能使用。<br>var<br>&nbsp; PrevWnd: HWND;<br>begin<br>&nbsp; PrevWnd := FindWindow(nil, 'Form2');<br>&nbsp; if PrevWnd &lt;&gt; 0 then<br>&nbsp; begin<br>&nbsp; &nbsp; ShowMessage('Running!');<br>&nbsp; &nbsp; SetForegroundWindow(PrevWnd); &nbsp;// 窗口提前<br>&nbsp; &nbsp; Exit; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 退出<br>&nbsp; end;<br><br>&nbsp; Application.Initialize;<br>&nbsp; Application.CreateForm(TForm1, Form1);<br>&nbsp; Form1.Caption := 'Form2'; &nbsp; &nbsp; &nbsp; &nbsp;// 临时改个名字<br>&nbsp; Application.Run;<br>end.<br><br>一种方法是创建 Mutex 对象,但这样不知道如何得到窗口句柄。<br>var<br>&nbsp; HMutex: THandle;<br>begin<br>&nbsp; HMutex := CreateMutex(nil, False, 'MyAppMutexName');<br>&nbsp; if GetLastError = ERROR_ALREADY_EXISTS then<br>&nbsp; begin<br>&nbsp; &nbsp; ShowMessage('Running!');<br>&nbsp; &nbsp; Exit;<br>&nbsp; end;<br>&nbsp; Application.Initialize;<br>&nbsp; Application.CreateForm(TForm1, Form1);<br>&nbsp; Form1.Caption := 'Form2';<br>&nbsp; Application.Run;<br>&nbsp; ReleaseMutex(HMutex);<br>end.<br><br>假如找到了已存在实例的窗口,可以通过发送 WM_COPYDATA 给该窗口,通知它打开新的文件名。<br><br>我想知道如果窗口名称经常变动的时候如何找到实例的窗口。如果 Application.Title 保持不变,并用它作为窗口名称查找,那么如何处理 WM_COPYDATA 消息?<br>
 
每打开一个文件就设置一个GlobalAtom。然后在程序执行打开文件操作的时候就去检查这个atom是否存在,如果存在就退出,并将焦点转到已打开的窗口中。<br>这样应该可以吧!
 
后退
顶部