SOS:高手请指教->(50分)

  • 主题发起人 主题发起人 quaver
  • 开始时间 开始时间
Q

quaver

Unregistered / Unconfirmed
GUEST, unregistred user!
1、如何知道系统在运行哪些打开过文档文件的外部程序
(如wordPad、word、autoCad,excel...)
2、如果这些文件(可能一个程序修改过多个文档,或新建了一个文件
)已经被修改,如何对这些文件自动进行安全保存(即完全由程序控制保存)?

 
好象看过了,没必要。就是可能实现的话,也不划算。
 
例如说word,
uses ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
WordApp: OleVariant;
begin
WordApp:= CreateOleObject('Word.Document');

WordApp.NewDocument; //新建一个Word文档
//....
WordApp.Save; //在你想保存时调用
end;
说明:NewDocument、Save只是举个例子,实际上word提供的函数好像不是这样的,你需要到
Word的帮助里去找什么是新建,什么是保存,这些帮助信息可能需要定制安装word时选中,
典型安装似乎是不装的,如果你用的是delphi5,可以看看servers元件页上的控件。
 
我在编一个与UPS通讯的软件,目的是在UPS低电位时安全关机。
所谓安全关机即:对打开过文档文件的外部程序执行安全保存后关闭Windows,
现在我通过获取窗口句柄后再获取菜单File的子菜单Save 或Save As的句柄
已可以安全保存记事本、画图、写字板中的文档(SDI),但无法找到Word中的
子菜单句柄,不知何故?
请高手赐教,在下不尽感激!
有关源码如下:
procedure TDocSaveForm.SaveClose(nClassType:integer;sClassName,sNewFileTitle:string);
var
m:HMENU;
winName:Array[0..255] of Char;
begin
h:=FindWindow(pchar(sClassName),nil);
if h<>0 then
begin
GetWindowText(h,winName,SizeOf(winName));
SetForegroundWindow(h);
m:=GetMenu(h);//取主菜单句柄
m:=GetSubMenu(m,0);//取‘File’菜单句柄,通常为第一个
if Pos(uppercase(newFileTitle),uppercase(StrPas(@winName)))<=0 then //非新文件
if ClassType=11 then
//对于Word,运行File的第五个子菜单(即Save),测试无效
SendMessage(h,WM_COMMAND,MakeLong(GetMenuItemId(m,4),0),GetSubMenu(m,4))
else
//对于其他如WordPad,运行File的第三个子菜单(即Save),测试通过,可行
SendMessage(h,WM_COMMAND,MakeLong(GetMenuItemId(m,2),0),GetSubMenu(m,2))
else
if ClassType=11 then
//对于Word,运行File的第六个子菜单(即Save As),测试无效
SendMessage(h,WM_COMMAND,MakeLong(GetMenuItemId(m,5),0),GetSubMenu(m,5))
else
//对于其他如WordPad,运行File的第四个子菜单(即Save As) ,测试通过,可行
PostMessage(h,WM_COMMAND,MakeLong(GetMenuItemId(m,3),0),GetSubMenu(m,3));
//以下不必关注
h:=GetForegroundWindow;
if Pos(uppercase(newFileTitle),uppercase(StrPas(@winName)))<=0 then //非新文件
EnumChildWindows(h,@ClickYesInSaveDlg,0)
else
begin
SaveDocFlag:=0;
Timer1.enabled:=true;
end;
// CloseFlag:=0;
// TimerClose.enabled:=true;
end;
end;
 
用dde关闭word吧!
 
如果希望继续讨论,请在20天内至少回来提前一次
 
感觉方向不对,很难实现无人值守。
WORD本身就有自动恢复功能。
笔记本采用的将内存保存的方法可能更有意义。
 
只能让用户自己在走前关了:(
 
多人接受答案了。
 
后退
顶部