C# 操作EXCEL的关闭按钮
最近用C#做一个小软件,遇到这样一个问题:关闭EXCEL工作簿时(这里是点击EXCEL工作簿上的“X”号,不是EXCEL主菜单上的“X”号),EXCEL本身会有保存提示。如图:
想实现这样3个功能:1.修改这个提示信息,如“是否保存对“book1”的更改”修改成“AAA”
2.当鼠标点击这个“是”或 “否”的按钮时,在C#中获取到这个动作,如果点击了“是”,C#执行代码段A;如果点击了否,C#执行代码段B
3.如果2实现不了,能不能做成这样,当我点击EXCEL工作簿上的这个“X”号时,屏蔽EXCEL本身的提示信息,调用我自己定义的C#窗体程序。
接触C#时间不长,摸索了一阵子句柄的方法,进展不大。
近来因为此事,折腾不轻,希望高手能给我指点,小弟感激不尽。
------解决方案--------------------1.修改这个提示信息,如“是否保存对“book1”的更改”修改成“AAA”
FindWindow
SetWindowText
2.当鼠标点击这个“是”或 “否”的按钮时,在C#中获取到这个动作,如果点击了“是”,C#执行代码段A;如果点击了否,C#执行代码段B
比较困难,需要CreateRemoteThread
然后用C编写代码SubClass这个WndProc
3.如果2实现不了,能不能做成这样,当我点击EXCEL工作簿上的这个“X”号时,屏蔽EXCEL本身的提示信息,调用我自己定义的C#窗体程序。
SendMessage WM_COMMAND
然后自己调用MessageBox
------解决方案--------------------本帖最后由 jiangsheng 于 2013-03-18 11:17:00 编辑
class WorkbookEventSink
{
Workbook workbook;
ISynchronizeInvoke invokeHandle;
public WorkbookEventSink(Workbook workbook,ISynchronizeInvoke invokeHandle)
{
this.workbook=workbook;
this.invokeHandle=invokeHandle;
this.workbook.BeforeClose +=
new Excel.WorkbookEvents_BeforeCloseEventHandler(
Workbook_BeforeClose);
}
void Workbook_BeforeClose(ref bool Cancel)
{
if (DialogResult.Yes ==
MessageBox.Show(Do you want to save the workbook?",
"Example", MessageBoxButtons.YesNo))
{
workbook.Save();
}
else{
Cancel=true;
invokeHandle.Invoke(
(MethodInvoker)
delegate {
workbook.Close(false,null,false);
}
); &n