程序在后台运行,被热键触发以后,我需要弹出自己的窗口并获取当前系统输入
  我已经实现热键触发,但就是不能很好的弹出来
    设置窗口到前台的API函数只能使标题闪烁;
    把窗口设为TOP顶层窗口这样又不太好;
    我现在先调用“刷新桌面”最小化所有窗口,然后Restore自己的窗口,但这样感觉不好。
    另外怎样激活其他程序到前台(已知进程ID)?
 

解决方案 »

  1.   

    SetActiveWindow  不行
    BringToFront     不行
    ShowWindow       好像也不行
      

  2.   

    SetForegroundWindow只能使其任务栏图标闪烁
      

  3.   

    SendMessage(Form1->Handle,WM_ACTIVATE ,0 ,1);也不成功
      

  4.   

    当程序在后台时 form.visible = false 激活时 form.visible=true 不行吗,还是我没理解你的意思
      

  5.   

    试试:
    ShowWindow(Application.Handle, SW_Show);
    SetForegroundWindow(Application.Handle);
    Form1.Visible := True;
      

  6.   

    简单说就像是“金山游侠”的热键激活一样
    我实现了热键呼叫(98,2000,XP的DrectX游戏模式下都可以),但在弹出自己的窗口时遇到了问题,系统不让切换键盘输入焦点
      

  7.   

    几种方法:
    1.让窗口alwayTop一下.
    2.AttachInput到当前活动进程,再SetActiveWindow
      

  8.   

    最简单,保管好用:SetWindowPos(Handle,width,height,0,0,WM_MOSTTOP);
      

  9.   

    不好意思。是:SetWindowPos(Handle,WM_TOPMOST,width,height,0,0,SWP_SHOWWINDOW );
      

  10.   

    楼上说得有些错误,应该将第二个参数改为HWND_TOPMOST
    SetWindowpos(h,HWND_TOPMOST,100,100,0,0,sw_shownormal);
    不知道楼主要得是不是这样的结果
      

  11.   

    如果只是将窗口唤到最前面
    SetWindowpos(h,HWND_TOP,100,100,0,0,sw_shownormal);
      

  12.   

    PostMessage(YOUR_RESTORE_FORM_Handle, CM_RESTORE, 0, 0);用这个吧
      

  13.   

    都不行,可惜阿。
    //procedure SwitchToThisWindow(hWnd:HWND;bRestore:Boolean);stdcall;external 'user32.dll';//SwitchToThisWindow(self.handle,false);
    //yourform.show;