日期:2014-05-18  浏览次数:20860 次

请教大家一个调用问题
我想在程序中调用一个exe执行文件,并且执行exe程序里面的一个按钮事件

请问 有什么方法或是函数?

------解决方案--------------------
顶~~~~~~~~~~~
------解决方案--------------------
关注...
------解决方案--------------------
启动程序倒是非常简单,用Process.Start("路径",null)就可以启动了。
如果要执行窗体中的某个事件的话,那比较复杂,在VB中还可以向指定串口发送指定快捷键,以出发相应按钮的事件。
C#中好像比较复杂,而且如果按钮没有快捷键的话,就比较麻烦。我觉得如果要实现的话,应该要用到API函数,先是用FindWindowsEx函数来查找窗体,然后找到你要触发按钮事件的按钮的句柄,再触发一个按钮单击事件。
------解决方案--------------------
ding
------解决方案--------------------
ding
------解决方案--------------------
HRESULT ExecCommand(
long cmdID,
long cmdExecOpt,
VARIANT* pInVar = NULL,
VARIANT* pOutVar = NULL
) const;
HRESULT ExecCommand(
const GUID* pGuid,
long cmdID,
long cmdExecOpt,
VARIANT* pInVar = NULL,
VARIANT* pOutVar = NULL
) const
cmdID
The command ID to be executed. For a list, see MSHTML Command Identifiers.
cmdExecOpt
Values taken from the OLECMDEXECOPT enumeration, which describe how the object should execute the command.
pInVar
The input arguments.
pOutVar
The command output.
pGuid
The GUID of the command group.
Returns S_OK on success, or an error HRESULT on failure.

------解决方案--------------------
探讨
启动程序倒是非常简单,用Process.Start("路径",null)就可以启动了。
如果要执行窗体中的某个事件的话,那比较复杂,在VB中还可以向指定串口发送指定快捷键,以出发相应按钮的事件。
C#中好像比较复杂,而且如果按钮没有快捷键的话,就比较麻烦。我觉得如果要实现的话,应该要用到API函数,先是用FindWindowsEx函数来查找窗体,然后找到你要触发按钮事件的按钮的句柄,再触发一个按钮单击事件。

------解决方案--------------------
lihai ~~~
------解决方案--------------------
Process.Start可以启动窗体
试试EnumProcess
先找到进程,然后用EnumProcessModules枚举每个进程的模块,将枚举到的模块句柄和你已知的HMODULE比较(前提是你得知道HMODULE名称),如果相等,再枚举Top-Level窗口。

看看第二部分。 

http://msdn.microsoft.com/msdnmag/issues/02/07/CQA/


------解决方案--------------------
调用进程时通过args 传递一个标记,在要调用的程序里Form_load时做个判断,根据标记判断是否需要调用按钮事件。
------解决方案--------------------
Process.Start(file);
System.Threading.Thread.Sleep(1000);//暂停一定的时间确保程序已完全启动
//确认需要按多少次tab键才能使焦点定位在按钮上
for (int i = 0; i <= 4; i++)
{
System.Windows.Forms.SendKeys.SendWait("{TAB}");
}
System.Windows.Forms.SendKeys.SendWait("{ENTER}");