我试图创建一个基本的宏记录/回放系统。如果我想选择一个开放的应用程序(如记事本)将其带到前面输入,我将如何去调用它的名称或其他可以参考的属性?C#如何选择一个打开的应用程序窗口
回答
这里是一个例子。基本上,得到Process,然后调用SetForegroundWindow它是MainWindowHandle:
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
namespace StackOverflow.Test
{
class Program
{
static void Main(string[] args)
{
var proc = Process.GetProcessesByName("notepad").FirstOrDefault();
if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
SetForegroundWindow(proc.MainWindowHandle);
}
[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
}
}
你应该知道的限制:
系统限制哪些进程可以设置前台窗口。的方法,可以设置前台窗口仅当下列条件之一为真:
- 过程是前台进程。
- 该过程由前台进程启动。
- 该进程收到最后一个输入事件。
- 没有前台进程。
- 正在调试前台进程。
- 前景未锁定(请参阅LockSetForegroundWindow)。
- 前台锁定超时已过期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。
- 没有菜单处于活动状态。
您可以从Process.GetProcesses
开始 - 这会给你一个所有正在运行的进程的列表。检查每个过程的不同属性 - 这应该让你去。
我面临的问题是,我如何使该进程窗口成为活动窗口。 – ashurexm 2010-10-19 19:00:23
签出名为“Autohotkey”的应用程序,它可以满足您的所有需求,并为您节省大量编程时间,而且免费。
如果AutoHotkey的不能解决你的问题,或者如果你这样做是出于学习目的,有人问一个“全新”的应用程序等,也有一些链接可能会有所帮助:
Bringing Window to the Front in C# using Win32 API http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/92823775-29f6-4950-bf06-d2f1ca89ec8d(它说“移动窗口”,但仍然可以帮助)
希望它有帮助。
我已经看过autohotkey。这绝对是一个有用的外观应用程序,问题在于,由于第三方的限制和未来的预期用途(基于关闭选项列表的宏输入等),这必须是内部类型的东西。 – ashurexm 2010-10-19 18:59:36
- 1. 从Chrome应用程序窗口打开另一个Chrome应用程序窗口
- 2. 如何在c#应用程序中打开sapi火车窗口?
- 3. 在一个新窗口中打开一个Chrome应用程序
- 4. 同一个应用程序的两个窗口不能打开
- 5. `start`程序打开一个新窗口
- 6. 如何在Windows窗体应用程序中打开一个新窗口
- 7. .net C#windows窗体应用程序:打开弹出窗口
- 8. Macintosh C创建一个导航窗口来选择一个应用程序
- 9. 从C++应用程序打开目标c窗口
- 10. 如何选择要打开的两个应用程序? (Automator)
- 11. 在另一个应用程序后面打开窗口
- 12. 如何打开窗口并在该窗口中选择对象?
- 13. c#wpf打开基于应用程序的新窗口
- 14. 如何重新打开应用程序的窗口时,Xcode
- 15. 链接到应用程序选项卡不打开一个新窗口
- 16. 如何在启动时在Cocoa应用程序中打开一个新窗口
- 17. 如何在弹出窗口中打开另一个应用程序?
- 18. 如何从一个窗口打开一个窗口
- 19. 如何阻止用户打开一个已打开的窗口?
- 20. 如何使用IIS应用程序窗口10 CMD使用C#打开
- 21. 如何从node-webkit应用程序打开浏览器窗口?
- 22. 如何防止从其他应用程序打开窗口?
- 23. 如何在asp.net web应用程序中打开弹出窗口
- 24. 如何从控制台应用程序打开WPF窗口
- 25. 如何在lightswitch应用程序中打开浏览器窗口?
- 26. 如何在主应用程序窗口后直接打开窗口
- 27. 打开一个线程内的窗口
- 28. 如何打开Visual C++控制台应用程序的新控制台窗口?
- 29. 选择哪个监视器打开一个JavaFX窗口
- 30. C#窗口应用程序
非常感谢您的非常详细回答。我会立即尝试执行此操作。 – ashurexm 2010-10-19 19:40:28
这似乎可行,但我遇到了一个特殊问题。我已经在这里问它作为一个新的问题:http://stackoverflow.com/questions/3973532 – ashurexm 2010-10-19 23:13:10