小弟现在要用vc控制另外程序开打那个程序支持的文件;
程序名patran.exe,此程序不支持命令行调用,也就是WinExec("patran.exe xxx.xxx", SW_SHOWNORMAL)只能打开程序而不能顺道打开文件;
patran.exe程序打开文件都是通过点击“打开文件”按钮出来打开文件提示框实现的;
在控制能最好能重复打开不同文件小弟vc所会不多,请各位大侠帮忙,分不够可以再加,急,谢!
程序名patran.exe,此程序不支持命令行调用,也就是WinExec("patran.exe xxx.xxx", SW_SHOWNORMAL)只能打开程序而不能顺道打开文件;
patran.exe程序打开文件都是通过点击“打开文件”按钮出来打开文件提示框实现的;
在控制能最好能重复打开不同文件小弟vc所会不多,请各位大侠帮忙,分不够可以再加,急,谢!
或者在ShellExecute中指定打开的文件名称。参考文章:ShellExecute用法种种
http://www.xiaozhou.net/cooldog/blogview.asp?logID=79
运行exe->找到File菜单->找到Open菜单->找到对话框的文件框->SetWindowText->打开至于怎么找到,菜单对话框的id应该是固定的,拿个工具查一下
具体的可能要查一下相关文章
WinExec打开程序
FindWindow找到程序hwnd
FindWindowEx找到“打开按钮”,或者如truewill兄说的找到“菜单对话框id”
SendMessage在打开的对话框中找到输入的文本框,直接修改(能不能修改呢?)
SendMessage点击打开patran.exe这个程序大家没有,可能不好写代码。
这样吧,就用notepad做例子,控制其打开本地硬盘的一个文本文件
请大侠们给出具体代码
小弟我笨得要命,见谅!
谢!分不够可以再加
感觉这篇文章写的不错
但是我看了后还是不知道程序该具体怎么编
求各位大侠帮忙啊!
分不够可以再加哦
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);
}