C#SendKeys.SendWait到另一个进程的对话框(notepad.exe)获取流程p=newProcess();p.StartInfo.Filename="notepad.exe";p.开始();//使用user32.dll的SetForegroundWindow方法SetForegroundWindow(p.MainWindowHandle);//确保记事本有焦点SendKeys.SendWait("sometext");SendKeys.SendWait("%f");//发送ALT+fSendKeys.SendWait("x");//sendx=exit//出现一个确认对话框所有这一切都按预期工作,但现在在我发送ALT+f+x后,我得到一个“你想将更改保存为无标题”对话框,我想关闭通过在应用程序中“按”我的“不保存”。但是SendKeys.SendWait("n");仅当我的应用程序没有失去焦点时(在ALT+f+x之后)才有效。如果是这样,我会尝试重新使用SetForegroundWindow(p.MainWindowHandle);这会将焦点设置到记事本主窗口而不是确认对话框。我使用了user32.dll中的GetForegroundWindow方法,发现对话框句柄与记事本句柄不同(有点恍惚)但是SetForegroundWindow甚至不能使用对话框窗口句柄知道如何将焦点放回对话框以便我可以成功使用SendKeys?这是完整的代码[DllImport("user32.dll")]staticexternboolSetForegroundWindow(IntPtrhWnd);[DllImport("user32.dll")]staticexternIntPtrGetForegroundWindow();[DllImport("User32.DLL")]staticexternboolShowWindow(IntPtrhWnd,intnCmdShow);publicconstintSW_RESTORE=9;...进程p=newProcess();p.StartInfo.FileName="notepad.exe";.睡眠(1000);SendKeys.SendWait("一些文本");SendKeys.SendWait("%f");//发送ALT+FSendKeys.SendWait("x");//发送x=退出IntPtrdialogHandle=GetForegroundWindow();System.Diagnostics.Trace.WriteLine("记事本句柄:"+p.MainWindowHandle);System.Diagnostics.Trace.WriteLine("对话框句柄:"+dialogHandle);线程.睡眠(5000);//切换到不同的应用程序以失去焦点SetForegroundWindow(p.MainWindowHandle);显示窗口(dialogH然后,SW_RESTORE);线程.睡眠(1000);SendKeys.SendWait("n");谢谢无法提供您没有的东西-SetForegroundWindow()仅在您的应用程序具有焦点时才有效现代Windows版本阻止应用程序程序窃取焦点,因为这是Windows9x时代的主要烦恼。此外,'Alt+F,x'仅指在英语Windows版本上退出,它不适用于大多数其他语言。避免使用SendKeys(),它不可能以可靠的方式使用。以上就是C#学习教程:C#SendKeys.SendWait到另一个进程对话框(notepad.exe)分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注~本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
