鼠标点击任务栏上相应应用程序窗口,或者是按Tab按键可以激活一个应用程序窗口,请问一个程序如何将自己的窗口定时激活?假设现在任务栏上有A、B、C三个任务,A窗口现在是激活的,要求在一定条件下C自动激活,应如何实现。望高手赐教!

解决方案 »

  1.   

    当你的一定条件满足时用
    BOOL MoveWindow(
      HWND hWnd,      // handle to window
      int X,          // horizontal position
      int Y,          // vertical position
      int nWidth,     // width
      int nHeight,    // height
      BOOL bRepaint   // repaint flag
    );
    其它的函数也有一些
    BOOL ShowWindow(
      HWND hWnd,     // handle to window
      int nCmdShow   // show state of window
    );BOOL SetWindowPos(
      HWND hWnd,             // handle to window
      HWND hWndInsertAfter,  // placement-order handle
      int X,                 // horizontal position
      int Y,                 // vertical position
      int cx,                // width
      int cy,                // height
      UINT uFlags            // window-positioning flags
    );都可以
      

  2.   

    纠错,MoveWindow不行,其它的两个是可以的。
      

  3.   

    FindWindow 得到句柄,然后SetForgroundWindow
      

  4.   

    几个函数我都试过,好像都不行。
    比如我现在切换到A任务(用鼠标点击A在任务栏上的窗口图标),过一段时间,我需要C能自动切换到C任务(它自身),用ShowWindow、SetWindowPos都不能让C显示出它的工作窗口,要达到这个效果应如何处理?
      

  5.   

    同意,FindWindow 得到句柄,然后SetForgroundWindow
      

  6.   

    仔细看看你的程序,是不是哪里有问题,
    ShowWindow应该是可以得,
    看是不是调用了,是不是传递了正确得窗口句柄?
      

  7.   

    我试过,比如就简单设置一个定时器,在定时器handler里调用Showwindow,SetForgroundWindow
    程序在任务栏上确实“高亮”显示,但是程序的主窗口不能弹出来。
      

  8.   


             HWND hWnd = ::FindWindow(NULL,"TestDemo"); //TestDemo为窗口的名字
    ::ShowWindow(hWnd,SW_SHOWNORMAL);          //如果窗口在任务栏上用这个
             ::SetForegroundWindow(hWnd);               //如果窗口在其它窗口后面用这条语句
      

  9.   

    试试用PostMessage发一条SET_FOCUS给目标窗口
      

  10.   

    我同意楼上 cat_dog 的看法,
     不过你要找窗口的名字或属于某个类
     就要用Visual studio 6.0 Tools下的 Spy++这个工具,很好用的
     祝你成功!