none
求救:Form程序中,如何让应用程序成为活动程序,并且让窗体成为活动窗体,并获得焦点。 RRS feed

  • 问题

  • Form程序中,如何让应用程序成为活动程序并且让窗体成为活动窗体并获得焦点。

    如正在操作word或其它程序,如何让我写的程序窗体激活并自动获得焦点。

    Form.Activate(); 只能使窗体图标在任务栏闪烁,有什么办法直接就能获得焦点吗?

    谢谢帮忙!

    这个问题是跨进程抢鼠标焦点的问题。

    进程内让一个窗口变为活动窗体可以做到,进程间的我还没有方法。

    Form.Activate()只有在程序是活动程序时才会获得焦点,程序不是活动程序时只会在任务栏闪烁;

    是否windows机制上不允许直接抢别的进程的焦点?只让在任务栏闪烁?

    • 已编辑 yjw 2010年12月28日 1:22
    2010年12月27日 2:29

答案

  • 是的,windows机制上不允许你这么做。

    我看到过有程序在实现前置窗口的代码中,前面是一堆api调用,后面就是模拟鼠标点击了。

    • 已标记为答案 yjw 2010年12月29日 3:09
    2010年12月28日 7:11

全部回复

  • 谢谢,试过了,效果同Form.Activate()一样, 只能使窗体图标在任务栏闪烁。

    关掉visual studio之后运行就只在任务栏闪烁,打开visual studio就可以获得焦点。

    原先我用Form.Activate()的时候也是这样,打开visual studio环境就可以获得焦点,关掉就不能获得,只是在任务栏闪烁。

    2010年12月27日 3:19
  • dear
    因为你在操作Word时是最大化,且正在编辑文件,这时你下达Form.Activate()没有用的原因是因为事件被吃掉了,你应该先最小化word再使用Form.Activate()或是将Form 提到最上层后this.TopMost = true,或者将视窗Show出来后再 Form.Activate()

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月27日 9:07
  • 可以参考 ShowWindow(handle, SW_SHOWNORMAL),应该会把最小化到任务栏的窗口拉出来并设置为活动。
    Mark Zhou
    2010年12月27日 10:34
  • 谢谢你,Form.Activate()只有在程序是活动程序时才会获得焦点,程序不是活动程序时只会在任务栏闪烁;当其它程序(如word)获得焦点时,我的程序用Form.Activate()只会在任务栏闪烁。关键问题我怎么才能使我的程序变为活动程序呢?

    我使用的是

    this.TopMost = true;

    this.Activate();

    this.TopMost = false;

    不起作用。

    this.TopMost = true;只能使窗体为最前,但不能成为活动窗体。

    先使窗体最小化

    this.Activate();

    然后最大化

    这个可以,但是窗口的“最小化然后最大化”的用户体验是很不好的,我的程序不能使用。

    2010年12月28日 1:14
  • 这个问题不是最小化最大化的问题,我的程序并未最小化。要把最小化窗体拉出来C#里有个属性,设置了就可以了。

    这个问题是进程间抢鼠标焦点的问题。

    进程内让一个窗口变为活动窗体可以做到,进程间的我还没有方法。

    是否windows机制上不允许?只让在任务栏闪烁?

    2010年12月28日 1:19
  • 是的,windows机制上不允许你这么做。

    我看到过有程序在实现前置窗口的代码中,前面是一堆api调用,后面就是模拟鼠标点击了。

    • 已标记为答案 yjw 2010年12月29日 3:09
    2010年12月28日 7:11
  • 1. 需要设置Activate()

    2. 需要设置this.WindowState, 比如为FormWindowState.Normal;

    这样就以Normal大小显示你的程序了.

    • 已建议为答案 Shirubei 2012年9月11日 10:51
    2011年1月13日 17:25