返回首页

我要触发在我的应用程序按钮的Click事件,
我有按钮句柄,并已通过处理SendMessage的功能,但仍是不是我的程序点击按钮...
代码示例


Process notePad = new Process();

 

notePad.StartInfo.FileName = @"C:\Users\Fahad\Downloads\Programs\ccleaner.exe";

notePad.Start();

 

uint processID = 0;

uint threadId = GetWindowThreadProcessId(notePad.MainWindowHandle, out processID);

AttachThreadInput(GetCurrentThreadId(), threadId, true);

 

SetActiveWindow(notePad.MainWindowHandle);

IntPtr btnHandlr = FindWindowEx(notePad.MainWindowHandle, IntPtr.Zero, "Button", "OK");

SendMessage(btnHandlr, BM_CLICK, 0, 0);

            

CloseHandle(Handle);


请帮助......的SendMessage()不工作
anyother方式,如果请告诉...

回答

评论会员:游客 时间:2012/02/07
|保罗・瓦特,它看起来像你的应用程序试图关闭另一个进程中的一个对话框SetActiveWindow会失败,如果您正在尝试激活的窗口没有附加到线程的消息队列。您可以将当前线程首次通话GetWindowThreadProcessId,得到notePad.MainWindowHandle线程ID在你的进程然后调用AttachThreadInput重视你的线程在记事本中的对话,所以你可以调用SetActiveWindow。你应该使用VisualStudio来验证,如果你的按钮的消息被其他进程收到的工具间谍。在VS2008中,被发现在程序:的"C:\ProgramFiles文件\微软VisualStudio9.0\Common7\工具\spyxx.exe"
SAKryukov
评论会员:游客 时间:2012/02/07
你完全不需要本地代码混合NET代码,你做的方式。纯。NET代码将是绰绰有余。它看起来像你正在使用旧的机器码习惯,在世界的。NET,你是不是很熟悉。我建议你​​开始从头开始使用。NET中只。[编辑#1]OK,这里是一个使用一个按钮的图案。假设你已经创建了一个按钮MyButton的某个地方,它已经出现在你的表格或一个窗口。现在,如何使点击吗?位置:{C}按钮开始响应用户的点击,只要上面的'='操作执行。您可以添加多个处理程序,在某些情况下,这是非常重要的。你可以调用这个操作的代码,说在你的构造后,所有的控制设置。现在,你可以写任何代码withing的"{}"这个匿名的事件处理程序。但在许多情况下,调用只是一个像SomeMethodToBeCalledOnMyButtonClick单独的方法更好。为什么呢?因为有时你需要调用相同的方法,从其他一些地方(例如,菜单或其他任何)。这种方法是在事件处理程序传递的参数(发件人,EventArgs),并可以从任何地方调用。在其他情况下,你可以调用同样的方法从其他控件的处理程序,或创建一个命名方法的处理程序,并把它添加到不同的控件。在这种情况下,您将需要使用一个或两个上述的参数,参数化的手柄。[编辑#2]也许我不理解你,以及你想要的东西非常不同:"点击"按钮CCLEANER.EXE。如果是这样,我不得不说:这是一个坏的任务,我不建议解决所有:你不会得到可靠的结果。这是更好地创造自己的注册表清洁,否则,你让用户能够做到这一点。应用程序设计"自动化"这种方式,只是不这样做。mdash;SA