Process打开的文件怎么获取,使用它的菜单栏?50分送上,谢谢~

mykelly6 2008-12-08 12:55:57
Process.Start(@"C:\Program Files\Outlook Express\wab.exe")打开了这个window自带的可执行文件,我希望通过程序来使用它的菜单栏,从而导出csv的通讯录到指定的文件夹~~

不知道需要通过什么方式来获取这个打开的进程,并控制他的菜单以及子菜单,之前看到别人好像用c写的,但是不知道在哪了

请各位高手指点下阿,谢谢
...全文
212 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
mykelly6 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yetze 的回复:]
public override BizResponse Process()
{
BizResponse res = base.Process();

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.WorkingDirectory = context.HomeFolderName;
info.FileName = "UnRAR.EXE";
info.Arguments = "e -o+ 考生照片.rar"; //e-->解压缩到当前文件夹;-o+-->…
[/Quote]
大哥,这是什么啊?完全没看懂啊
jxxx2967 2008-12-10
  • 打赏
  • 举报
回复
DAY DAY UP!
yetze 2008-12-10
  • 打赏
  • 举报
回复
public override BizResponse Process()
{
BizResponse res = base.Process();

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.WorkingDirectory = context.HomeFolderName;
info.FileName = "UnRAR.EXE";
info.Arguments = "e -o+ 考生照片.rar"; //e-->解压缩到当前文件夹;-o+-->覆盖原有的同名文件
info.UseShellExecute = false;
info.CreateNoWindow = true;
System.Diagnostics.Process process = System.Diagnostics.Process.Start(info);
if (process == null)
{
res.Error = "创建进程失败!";
res.Success = false;
return res;
}
else
{
process.WaitForExit();
if (process.ExitCode != 0)
{
res.Error = "执行解压缩程序出错!";
res.Success = false;
return res;
}
}
process.Dispose();

DirectoryInfo dir = new DirectoryInfo(context.HomeFolderName);
FileInfo[] files = dir.GetFiles();
using (IMyOATransaction trans = DBFactory.CreateDBTransaction())
{
try
{
foreach (FileInfo file in files)
{
string[] vs = file.Name.Substring(0, file.Name.IndexOf(file.Extension)).Split('_');

Candidate candidate = trans.Load<Candidate>(EX.E(Candidate.Meta.Code, EX.EQ, vs[0]));

if (!candidate.IsEmpty)
{
EDU.Image image = new EDU.Image();

image.FileName = file.Name;
using (FileStream fs = file.Open(FileMode.Open))
{
BinaryReader rd = new BinaryReader(fs);
image.Content = rd.ReadBytes((int)fs.Length);
}

trans.Save(image);
trans.Update<Candidate>(candidate, EX.F(Candidate.Meta.PictureGuid), EX.V(image.Guid));
}
}

trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}

dir.Delete(true);

return res;
}
mykelly6 2008-12-10
  • 打赏
  • 举报
回复
继续等待~
mykelly6 2008-12-10
  • 打赏
  • 举报
回复
发现c#搞这个outlook express的导入真是悲剧阿,找到的代码都是适用vb,c的,虽然看懂了,但是用c#不大好实现。。。

再等一天,明天没人理九揭帖了
mykelly6 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 eglic 的回复:]
根据进程号找到他的主窗口句柄
向该窗口发送 WM_SYSCOMMAND 消息,其中一个参数就是菜单的编号
这个编号你可以通过Spy++获得
[/Quote]
我下了CSDN的一个spy++,但是没有捕捉到编号啊,另外发送 WM_SYSCOMMAND 消息是用SendMessage方法吗?参数具体该怎么写?
我参照了网上的一些例子写了,获得的子控件句柄都是0,不知道哪错了阿

Process pro = Process.Start(@"C:\Program Files\Outlook Express\wab.exe");
try
{
System.Threading.Thread.Sleep(2000);
IntPtr iptr = FindWindow("WABBrowseView", "address book");//这里能得到窗体的句柄
//接下来的句柄都是0,所以发送click命令也无效了
IntPtr menuHandle = FindWindowEx(iptr, IntPtr.Zero,null, "File(&F)");
IntPtr deleteToolBar = FindWindowEx(iptr, new IntPtr(0), "ToolbarWindow32", "Delete");
SendMessage(deleteToolBar, 0xF5, 0, 0);

}
catch
{
pro.Dispose();
}
mykelly6 2008-12-09
  • 打赏
  • 举报
回复
救命啊~
killer_liqiao 2008-12-09
  • 打赏
  • 举报
回复
up
birdlonger 2008-12-09
  • 打赏
  • 举报
回复
mark !
mykelly6 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangping_li 的回复:]
C# code
//查到窗体,得到整个窗体
ParenthWnd = FindWindow(窗口类名,lpszParentWindow);

//判断这个窗体是否有效
if (!ParenthWnd.Equals(IntPtr.Zero))
{
EdithWnd = FindWindowEx(ParenthWnd,EdithWnd,窗体上的控件,""); //获取窗体上指定控件句柄
if(!EditWnd.Equals(IntPtr.Zero))//如果该控件存在
{
//...
}

}
[/Quote]
我是这么做的,可视窗体上的控件找不到阿。。得到的句柄是0,我看到c什么的都有getMenu,getMenuItem之类的方法阿,c#有吗?
mykelly6 2008-12-09
  • 打赏
  • 举报
回复
up
mykelly6 2008-12-09
  • 打赏
  • 举报
回复

IntPtr mailList = FindWindowEx(iptr, new IntPtr(0), "SysListView32", "");
ListView view = (ListView)ListView.FromHandle(mailList);

现在发现第一行能取到SysListView32的句柄,但是怎么样通过句柄来获取这个系统的ListView呢,第二行代码得到的是null。。。
wangping_li 2008-12-08
  • 打赏
  • 举报
回复

//查到窗体,得到整个窗体
ParenthWnd = FindWindow(窗口类名,lpszParentWindow);

//判断这个窗体是否有效
if (!ParenthWnd.Equals(IntPtr.Zero))
{
EdithWnd = FindWindowEx(ParenthWnd,EdithWnd,窗体上的控件,""); //获取窗体上指定控件句柄
if(!EditWnd.Equals(IntPtr.Zero))//如果该控件存在
{
//...
}

}
wangping_li 2008-12-08
  • 打赏
  • 举报
回复

using System.Runtime.InteropServices;

[DllImport("User32.dll",EntryPoint="FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);

[DllImport("user32.dll",EntryPoint="FindWindowEx")] //找子窗体
private static extern IntPtr FindWindowEx(IntPtr hwndParent,
IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

mykelly6 2008-12-08
  • 打赏
  • 举报
回复
up下,顶者有分~
mykelly6 2008-12-08
  • 打赏
  • 举报
回复
现在的问题是怎么写Findwindow(),FindwindowEx()的参数,还请高人指点挖~
mykelly6 2008-12-08
  • 打赏
  • 举报
回复
Findwindow()的参数lpClassName,lpWindowName要怎么写啊。。

没有做过类似的东西,哪位大大能给个示例的代码吗?
mykelly6 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dayizhixiaotutu 的回复:]
Findwindow获的wab.exe运行的form的句柄 然后在用findwindowex获取他的子控件
[/Quote]
Findwindow这个是哪里来的啊,能不能给我一个示例~谢谢了
是是非非 2008-12-08
  • 打赏
  • 举报
回复
根据进程号找到他的主窗口句柄
向该窗口发送 WM_SYSCOMMAND 消息,其中一个参数就是菜单的编号
这个编号你可以通过Spy++获得
dayizhixiaotutu 2008-12-08
  • 打赏
  • 举报
回复
Findwindow获的wab.exe运行的form的句柄 然后在用findwindowex获取他的子控件
加载更多回复(1)

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧