小弟现在要用vc控制另外程序开打那个程序支持的文件;
程序名patran.exe,此程序不支持命令行调用,也就是WinExec("patran.exe xxx.xxx", SW_SHOWNORMAL)只能打开程序而不能顺道打开文件;
patran.exe程序打开文件都是通过点击“打开文件”按钮出来打开文件提示框实现的;
在控制能最好能重复打开不同文件小弟vc所会不多,请各位大侠帮忙,分不够可以再加,急,谢!

解决方案 »

  1.   

    不知道你的那个另外的程序支持不支持Automation,要是支持的话,用createobject,或者用getobject来获得该程序,然后用它提供的文档子对象打开文档就可以了.
      

  2.   

    用ShellExecute,你直接给一个文件名称。系统会自动寻找相应的程序来打开。
    或者在ShellExecute中指定打开的文件名称。参考文章:ShellExecute用法种种
    http://www.xiaozhou.net/cooldog/blogview.asp?logID=79
      

  3.   

    找个按键精灵来实现咯或者自己做
    运行exe->找到File菜单->找到Open菜单->找到对话框的文件框->SetWindowText->打开至于怎么找到,菜单对话框的id应该是固定的,拿个工具查一下
    具体的可能要查一下相关文章
      

  4.   

    谢谢楼上好心人的回复:我刚才也找了很多资料,感觉使用下面的方法应该是我要的:
    WinExec打开程序
    FindWindow找到程序hwnd
    FindWindowEx找到“打开按钮”,或者如truewill兄说的找到“菜单对话框id”
    SendMessage在打开的对话框中找到输入的文本框,直接修改(能不能修改呢?)
    SendMessage点击打开patran.exe这个程序大家没有,可能不好写代码。
    这样吧,就用notepad做例子,控制其打开本地硬盘的一个文本文件
    请大侠们给出具体代码
    小弟我笨得要命,见谅!
    谢!分不够可以再加
      

  5.   

    LRESULT lRet = (LRESULT)ShellExecute(hwnd, "open", "notepad", "c:\data.txt", NULL, SW_SHOWNORMAL);不过要看你的patran.exe能不能处理参数了
      

  6.   

    可以直接执行patran.exe这个进程,但需要能输入参数,以便能直接打开文件等
      

  7.   

    “程序名patran.exe,此程序不支持命令行调用,也就是WinExec("patran.exe xxx.xxx", SW_SHOWNORMAL)只能打开程序而不能顺道打开文件;”小弟我说的很清楚啦,不支持输入参数的。
      

  8.   

    http://blog.csdn.net/laiyiling/archive/2004/11/21/189305.aspx
    感觉这篇文章写的不错
    但是我看了后还是不知道程序该具体怎么编
    求各位大侠帮忙啊!
    分不够可以再加哦
      

  9.   

    如果是记事本 ,想通过另外一个程序控制它打开一个文档:
    HWND hTop = ::GetWindow(::GetDesktopWindow(),GW_CHILD);
    HWND hTemp = hTop;
    HWND hOpenDlg = NULL;
    char szTitle[_MAX_PATH] = "\0"; while(hTemp)
    {
    ::GetWindowText(hTemp,szTitle,_MAX_PATH);
    CString str = szTitle;
    if(str.Find("记事本") != -1)
    {
    //"弹出打开对话框打开"
    ::SendMessage(hTemp,WM_COMMAND,MAKELONG(2,1),0);
    hOpenDlg = hTemp;
    break;
    }
    hTemp = ::GetNextWindow(hTemp,GW_HWNDNEXT);
    } if(!hOpenDlg) return ; char szType[_MAX_PATH] = "\0";
    hTemp = ::GetWindow(hOpenDlg,GW_CHILD);
    while(hTemp)
    {
    RealGetWindowClass(hTemp,szType,_MAX_PATH);
    CString str = szType;
    if(str == "Edit")
    {
    ::SetWindowText(hTemp,"c:\\aaa.txt");
    break;
    }
    hTemp = ::GetNextWindow(hTemp,GW_HWNDNEXT);
    } hTemp = ::GetWindow(hOpenDlg,GW_CHILD);
    while(hTemp)
    {
    ::GetWindowText(hTemp,szTitle,_MAX_PATH);
    CString strTitle = szTitle;
    ::RealGetWindowClass(hTemp,szType,_MAX_PATH);
    CString strType = szType;
    if(strType == "Button" && strTitle.Find("打开") != -1)
    {
    ::SendMessage(hTemp,WM_LBUTTONDOWN,0,0);
    break;
    }
    hTemp = ::GetNextWindow(hTemp,GW_HWNDNEXT);
    }
      

  10.   

    命令参数由Microsoft Spy++跟踪