vc.net中使用System::Diagnostics ::Process.StartInfo->Arguments得不到想要的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc.net中使用System::Diagnostics ::Process.StartInfo->Arguments得不到想要的结果相关的知识,希望对你有一定的参考价值。

用cmd输入命令F:\VCProject\gunzip>funzip a.zip > b.jpg可以用funzip.exe把a.zip解压为b.jgp。funzip.exe和a.zip在F:\VCProject\gunzip目录下,F:\VCProject\gunzip下生成b.jpg

我vs2008创建的c/c++窗体应用程序也在F:\VCProject\gunzip目录下

可是在调试中用以下代码执行时只是屏幕闪了以下,a.zip并没有被解压出b.jpg,感觉像是a.zip > b.jpg参数属性没有套到funzip.exe后面,只是单纯的启动了一下funzip.exe

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
System::Diagnostics ::Process ^p=gcnew System::Diagnostics ::Process ();
p->StartInfo->FileName ="F:\\VCProject\\gunzip\\funzip.exe";
p->StartInfo ->Arguments ="a.zip > bbb";
p->Start ( );
if(p->HasExited )
p->Kill ();

不会C++,电脑也没装你那个funzip,因此无法重现你的情况。下面的C#语句在我的电脑上是运行成功的。

        //using System.Diagnostics;
        static void Main(string[] args)
        
            string fn = @"C:\\Program Files\\7-Zip\\7z.exe";
            string arg = @"e D:\\1.zip -oD:\\des *.jpg -r";
            Process p = new Process();
            p.StartInfo.FileName = fn;
            p.StartInfo.Arguments = arg;
            p.Start();
        

参考技术A System.Diagnostics.Process.Start("*.mp3")

关于CTreeView中CTreeCtrl空间的使用

昨天QQ群里有人问我怎么实现CTreeCtrl的功能,说实话,我也是一个VC 的初级学者,没有弄过CTreeView的代码,参考了MSDN后,写了一小段代码,和大家一起分享,其中包括窗口切分,都是比较基础的内容。【以下代码是在VC .net 2005中调试成功】
 
1.首先建立一个“基于单文档”的MFC应用程序,在CMainFrame类中重载OnCreateClient()函数,其内部的代码为:
 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
 
 
// TODO: Add your specialized code here and/or call the base class
 
m_wndSplitter.CreateStatic(this, 1, 2);//生成行列的静态窗口划分。
 
 
 
m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMySplitterTreeView), CSize(0, 0), pContext);
 
m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CEditView), CSize(0, 0), pContext);
 
 
 
CRect r;
 
GetClientRect(&r);
 
 
 
//设置第行的高。
 
m_wndSplitter.SetRowInfo( 0, r.Height(), 0 );
 
//设置第列的宽。
 
m_wndSplitter.SetColumnInfo( 0, r.Width()/4, 0 );
 
 
 
return TRUE;
 
 
 
//将原来重载生成的返回代码注释掉。
 
//return CFrameWnd::OnCreateClient(lpcs, pContext);
 
 
 
 
2.上面的语句m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMySplitterTreeView), CSize(0, 0), pContext);中的CMySplitterTreeView是自己添加的MFC类,其基类设置为CTreeView。
 
3.在生成的CMySplitterTreeView类中添加成员变量CTreeCtrl * ptheTree;【以备以后调用使用】。并重载OnInitialUpdate()函数,其内部的代码为:
 
 
 
void CMySplitterTreeView::OnInitialUpdate()
 
 
CTreeView::OnInitialUpdate();
 
 
 
// TODO: Add your specialized code here and/or call the base class
 
ptheTree = &GetTreeCtrl();
 
//::SetWindowLong(ptheTree->m_hWnd,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS,NULL);
 
 
 
//修改CTreeCtrl控件的Style。
 
ptheTree->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);
 
 
 
TVINSERTSTRUCT tvInsert;
 
HTREEITEM hTreeItem;
 
tvInsert.hInsertAfter = NULL;//TVI_LAST;
 
tvInsert.hParent = TVI_ROOT;
 
tvInsert.item.mask = TVIF_TEXT;
 
tvInsert.item.pszText = L"一年级";
 
hTreeItem = ptheTree->InsertItem(&tvInsert);
 
tvInsert.hParent = hTreeItem;
 
tvInsert.item.pszText = L"1班";
 
ptheTree->InsertItem(&tvInsert);
 
tvInsert.item.pszText = L"2班";
 
ptheTree->InsertItem(&tvInsert);
 
ptheTree->Expand(hTreeItem,TVE_EXPAND); //默认为合上的【TVE_COLLAPSE】。
 
 
 
tvInsert.hParent = TVI_ROOT;
 
tvInsert.item.pszText = L"二年级";
 
hTreeItem = ptheTree->InsertItem(&tvInsert);
 
tvInsert.hParent = hTreeItem;
 
tvInsert.item.pszText = L"1班";
 
ptheTree->InsertItem(&tvInsert);
 
tvInsert.item.pszText = L"2班";
 
ptheTree->InsertItem(&tvInsert);
 
tvInsert.item.pszText = L"3班";
 
ptheTree->InsertItem(&tvInsert);
 
 
运行一下,就会发现在窗体被分割成两个部分,其中左侧的那个部分中有一个CTreeCtrl树形控
 

以上是关于vc.net中使用System::Diagnostics ::Process.StartInfo->Arguments得不到想要的结果的主要内容,如果未能解决你的问题,请参考以下文章

查找用于在 Windows 上打开特定文件类型的默认应用程序

vc.net中使用System::Diagnostics ::Process.StartInfo->Arguments得不到想要的结果

vc++.net问题: 如何让STATIC控件接受WM_LButtonDown, WM_LButtonUp, WM_MouseMove的消息?

VB.net调用VC.net写的DLL出现“当前不会命中断点,还没有为该文档加载任何符号”!!急!急急!!!

用VB.NET和VC.NET编译出来的文件是IL格式还是纯PE(EXE)文件格式?

VC中创建新线程