L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #1 本人用一个程序做了一个“资源管理器”。<br><br> 我现在想知道是,在运行我的这个程序后,用户在里面打开了很多文件和程序,如:doc、txt、exe等文件,如何实现在退出我的程序后把所有用我程序打开的文件或程序窗口都关掉???
本人用一个程序做了一个“资源管理器”。<br><br> 我现在想知道是,在运行我的这个程序后,用户在里面打开了很多文件和程序,如:doc、txt、exe等文件,如何实现在退出我的程序后把所有用我程序打开的文件或程序窗口都关掉???
Y yuzk2005 Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #2 procedure TForm1.Button2Click(Sender: TObject);<br>var<br><br>Wnd: HWnd;//存储指定的外部应用程序窗口句柄<br>begin<br><br><br> Wnd := FindWindow(nil, PChar(窗口标题));<br><br> if Wnd <> 0 then //如果查找成功,则发送消息,关闭指定的窗口<br><br> SendMessage(hWnd,WM_CLOSE,0,0)<br> <br> else //否则,给出提示信息<br><br> ShowMessage('没找到指定的应用程序,所以无法关闭!');<br>end;
procedure TForm1.Button2Click(Sender: TObject);<br>var<br><br>Wnd: HWnd;//存储指定的外部应用程序窗口句柄<br>begin<br><br><br> Wnd := FindWindow(nil, PChar(窗口标题));<br><br> if Wnd <> 0 then //如果查找成功,则发送消息,关闭指定的窗口<br><br> SendMessage(hWnd,WM_CLOSE,0,0)<br> <br> else //否则,给出提示信息<br><br> ShowMessage('没找到指定的应用程序,所以无法关闭!');<br>end;
Q qi_jianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #3 记录下所有 窗口的 handle ,然后在程序关闭时根据 handle 来半闭所有打开的窗口
Q qi_jianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #4 楼主呀,缘分呀,看看我的名和你的名<br><br>qi_jianzhou <br>lijianzhou<br><br>呵呵,应该是同名吧
L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #5 比如我打开了一个文件是:<br>d:/abc/文件.doc<br>如何得到该窗口的句柄.<br><br>我打开的方式是<br>ShellExecute(self.handle, 'open',PChar(d:/abc/文件.doc'), nil, nil,SW_SHOWNORMAL);<br><br>楼上两位的方法我知道,问题是如何知道该文件的窗口标题,目前只知道文件路径.
比如我打开了一个文件是:<br>d:/abc/文件.doc<br>如何得到该窗口的句柄.<br><br>我打开的方式是<br>ShellExecute(self.handle, 'open',PChar(d:/abc/文件.doc'), nil, nil,SW_SHOWNORMAL);<br><br>楼上两位的方法我知道,问题是如何知道该文件的窗口标题,目前只知道文件路径.
I iseek Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #7 也可以在私有域保存打开文件名,这样在findwindow时就方便了.
L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-05-31 #9 "也可以在私有域保存打开文件名,这样在findwindow时就方便了."<br><br>这个可以做到,但是如何退出程序后自动关闭该文件窗口呢?不知道窗口标题,只知道文件位置.
M mydelphi2006 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-03 #10 ShellExecute會返回你打開的進程Handle,保留所有打開的Handle,關主程序時再用TerminateProcess關閉所有的打開的外部進程便可以了
T tianliangle2003 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-03 #11 用createprocess打开所有程序,这样便于控制
L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #12 哪个高手能不能提供点代码之类的,我用你们的方法测试了,都不行啊
C ctaxp Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #13 你打开一个程序后,这个程序就会有一个标题,取得它的handle后,发送close消息不就行了嘛
C ctaxp Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #14 procedure Tform1.closemysoft(stitle:string); //stitle存储指定的外部应用程序的窗口名<br>var<br>hWndClose: HWnd; //存储指定的外部应用程序窗口句柄<br>begin<br> hWndClose := FindWindow(nil, PChar(stitle));<br> if hWndClose <> 0 then //如果查找成功,则发送消息,关闭指定的窗口<br> SendMessage(hWndClose,WM_CLOSE,0,0);<br>end;
procedure Tform1.closemysoft(stitle:string); //stitle存储指定的外部应用程序的窗口名<br>var<br>hWndClose: HWnd; //存储指定的外部应用程序窗口句柄<br>begin<br> hWndClose := FindWindow(nil, PChar(stitle));<br> if hWndClose <> 0 then //如果查找成功,则发送消息,关闭指定的窗口<br> SendMessage(hWndClose,WM_CLOSE,0,0);<br>end;
L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #15 问题的关键是标题是可变的,你打开一个doc或其他文档,这个标题不是预先知道的啊,如果知道标题关闭到是比较简单.
L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #17 你不理解我的意思.比如一个文件夹下有上百个不同类型的文件(文件可以自己增加或删除),你打开其中一个文件时标题肯定不知道啊.只知道文件名而已
W weiliu Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #18 遍历所有的窗口,找出符合条件的句柄,把它关掉。<br>虽然不知道具体的标题,但标题里肯定有固定的字串,比如NOTEPAD什么的。
C ctaxp Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-17 #19 你知道文件名?不知道标题?<br>你用回调机制做个枚举试试看,有不有和你文件名对应的,<br>没试过你咋就那么肯定没有或不知道呢
L lijianzhou Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-18 #20 我都已经试过不可以啊。<br>打个比方,我打开的是abc.doc文件,则出现的标题是:abc - Microsoft Word<br>,打开abc.txt则标题为:abc - 记事本,换句话说通过文件名一般是不知道标题的。虽然标题有一部分是文件名组成,但是用遍历所有窗口通过模糊判断标题来关闭窗口的做法我想是要不得的,不知道还有没有好的方法?
我都已经试过不可以啊。<br>打个比方,我打开的是abc.doc文件,则出现的标题是:abc - Microsoft Word<br>,打开abc.txt则标题为:abc - 记事本,换句话说通过文件名一般是不知道标题的。虽然标题有一部分是文件名组成,但是用遍历所有窗口通过模糊判断标题来关闭窗口的做法我想是要不得的,不知道还有没有好的方法?