HWND FindWindow(LPCTSTR lpClassName, //类名指针 
                LPCTSTR lpWindowName //窗口名指针 
                ); 

解决方案 »

  1.   

    试试showwindow;然后setforegroundwindow;当然要一些参数,这你应该明白!
      

  2.   

    ShowWindow(hwnd,SW_RESTORE);
    SetForegroundWindow(hwnd);这样用估计就行了,hwnd就要自己找了!
      

  3.   

    SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
      

  4.   

    用SetWindowPos()可以让指定窗口总显示在最前面。
      

  5.   

    To pcman1990(pcman):
       這方式其實是我最先嘗試的。他只是用來設置焦點,不發生任何表面上的動作.
    to iuyon:
       還是不行.
      

  6.   

    SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
      

  7.   

    也不可以阿。如果誰有興趣。。可以自己做個Button看看。
      

  8.   

    真正的現象是這樣的:我用的是兩台機子,一台發送消息,呼叫另外一台機子,使得另外一台機子執行機子裏面的應用程序(CreateProcess).結果發現,當我的被網絡呼叫的主程序界面窗口在所有界面窗口最前面的時候,CreateProcess創建的窗口責永遠被顯示在最上層.但是當我的被網絡呼叫的主程序界面窗口被另外一個窗口覆蓋(失去了焦點).這時候響應程序(createProecess的窗口)雖然出現在最上層,但是當點擊其他窗口的時候,它將被其他窗口佔據最上層顯示狀態。
      

  9.   

    //我试了一下,首先我启动“计算器”程序,然后执行下列程序
    //是可以达到要求的
    //楼上的条件太特殊了,反正单机状态下是可以的
    //注意 CWnd不能为空
    //     标题变化的问题
    void CDemoDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here

    CWnd* pWnd=FindWindow(NULL,"计算器"); if(pWnd==NULL) return;
    pWnd->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
    }
      

  10.   

    void CDemoDlg::OnButton1() 
    {
    CWnd* pWnd=FindWindow(NULL,"计算器");
    if(pWnd==NULL) return;
       pWnd->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
           SetTimer(1,5000,NULL);         
    }
    CDemoDlg::OnTimer(n.)
    {
             KillTimer(1);
             CString FileAddress="//這裡輸入應用程式的路徑.如C:\\Program.exe";
    PROCESS_INFORMATION Info2;
    STARTUPINFO info;
    ZeroMemory(&info, sizeof(info));
    info.cb = sizeof(STARTUPINFO); if(!CreateProcessW(FileAddress,NULL, NULL, NULL, FALSE,NULL,NULL ,NULL, &info, &Info2)){
    AfxMessageBox(_T("CreateProcess failed."));
    }
    }要注意在這5秒鐘内你隨便點一個窗口讓你的主界面不顯示在最上層。過5秒後你再看看執行應用程式的路徑所指定的exe。這將使得它不會永遠佔據最上層.
      

  11.   

    to  zhuojohn(zhuojian):
       你那樣總是成立的。你可以嘗試這樣的一個工作。就是在你的上面寫的程序里添加如下代碼.
    void CDemoDlg::OnButton1() 
    {
    CWnd* pWnd=FindWindow(NULL,"计算器");
    if(pWnd==NULL) return;
       pWnd->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
           SetTimer(1,5000,NULL);         
    }
    CDemoDlg::OnTimer(n.)
    {
             KillTimer(1);
             CString FileAddress="//這裡輸入應用程式的路徑.如C:\\Program.exe";
    PROCESS_INFORMATION Info2;
    STARTUPINFO info;
    ZeroMemory(&info, sizeof(info));
    info.cb = sizeof(STARTUPINFO); if(!CreateProcessW(FileAddress,NULL, NULL, NULL, FALSE,NULL,NULL ,NULL, &info, &Info2)){
    AfxMessageBox(_T("CreateProcess failed."));
    }
    }要注意在這5秒鐘内你隨便點一個窗口讓你的主界面不顯示在最上層。過5秒後你再看看執行應用程式的路徑所指定的exe。這將使得它不會永遠佔據最上層.
      

  12.   

    我要的是CreatePorcess(的是在最上方)
      

  13.   

    把你的程式如下改造
    void CXieTestDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    // CWnd* pWnd=FindWindow(NULL,"我的电脑");
    // if(pWnd==NULL) return;
      //  SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
        SetTimer(1,5000,NULL);
        //要注意在這5秒鐘内你隨便點一個窗口讓你的主界面不顯示在最上層}void CXieTestDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    switch(nIDEvent){
    case 1:{
    KillTimer(1);
        CString FileAddress="C:\\WINNT\\System32\\calc.exe";
    PROCESS_INFORMATION Info2;
    STARTUPINFO info;
    ZeroMemory(&info, sizeof(info));
    info.cb = sizeof(STARTUPINFO);
    if(!CreateProcess(FileAddress,NULL, NULL, NULL, FALSE,NULL,NULL ,NULL, &info, &Info2)){
    AfxMessageBox(_T("CreateProcess failed."));
    }
    SetTimer(2,4,NULL);
    break;}
    case 2:{
    KillTimer(2);
    CWnd* pWnd=FindWindow(NULL,"计算器");
    if(pWnd==NULL) return;
        pWnd->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
    break;}
    }
    CDialog::OnTimer(nIDEvent);
    }问题你将发现
      

  14.   

    setforegroundwindow可以設置窗口到最前面。但是沒有辦法讓我用CreateProcess調用的程序窗口到最上層,SetWindowPos加上去後就會出現上面我所說的問題