Avatar billede kierch Nybegynder
30. januar 2004 - 13:55 Der er 8 kommentarer

SetForegroundWindow virker ikke

Hej Jeg har et program hvorfra jeg starter et andet prg. med
Create process Se kode herunder. Men når winduet for dette program åbner kan jeg ikke altid tvinge mit eget programs windue øverst. jeg har prøvet med SetForegroundWindow(); Kan jeg minimere winduet som den proces jeg har startet har ???
        if(Device == 1)
        {
            if(!CreateProcess(
                      NULL,
                      lpCommandLine1,
                      NULL,
                      NULL,
                      FALSE,
                      NORMAL_PRIORITY_CLASS,
                      NULL,
                      NULL,
                      &startInfo,
                      &processInfo
                    )
                  )
                {
                  fprintf(stderr, "CreateProcess failed on error %d\n", GetLastError());
                  ExitProcess(1);
                }
                NextDevice = 2;
        }
Avatar billede jpk Nybegynder
30. januar 2004 - 14:29 #1
Har du prøvet at sætte wShowWindow memberen på STARTUPINFO strukturen til SW_MINIMIZE?
Avatar billede kierch Nybegynder
30. januar 2004 - 14:32 #2
Ja men det ser ud som om det prg jeg starter over skriver denne. For det virker ikke


        ZeroMemory(&startInfo, sizeof(STARTUPINFO));
        startInfo.cb = sizeof(STARTUPINFO);
        startInfo.wShowWindow=SW_MINIMIZE;
        startInfo.dwX=0;
        startInfo.dwY=0;

        //      HWND hwnd = GetActiveWindow();
        //      ShowWindow(hwnd, SW_MINIMIZE);


        startInfo.dwFlags=STARTF_USESHOWWINDOW|STARTF_USEPOSITION;
Avatar billede jpk Nybegynder
30. januar 2004 - 14:38 #3
Og SW_FORCEMINIMIZE?
Avatar billede kierch Nybegynder
30. januar 2004 - 14:47 #4
Virker heller ikke har lige prøvet
Avatar billede squashguy Nybegynder
30. januar 2004 - 14:52 #5
hvorfor det ikke altid virker ses i WinMain:

int WINAPI WinMain(

    HINSTANCE hInstance,    // handle to current instance
    HINSTANCE hPrevInstance,    // handle to previous instance
    LPSTR lpCmdLine,    // pointer to command line
    int nCmdShow     // show state of window
  );

Hvis programmet ignorerer nCmdShow, vil denne parameter ingen effekt have
Avatar billede kierch Nybegynder
30. januar 2004 - 15:01 #6
Hvad gør jeg så for at sikre at det er mit program der er øverst på desktopen ikke det andet program som jeg har startet fra mit prg..
Avatar billede bertelbrander Novice
30. januar 2004 - 20:55 #7
Måske med SetWindowPos(...)
Avatar billede coldplay Nybegynder
31. januar 2004 - 23:56 #8
Er "CreateProcess" et must?

Hvis opgaven for det første er at kalde et andet program, så kan det gøres lettere.

Prøv følgende:

*********************************

HWND hwnd = GetActiveWindow();

SHELLEXECUTEINFO info;
memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.lpVerb = "open";
   
info.lpFile = ? /* lpCommandLine */
   
info.lpParameters = "";

info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.nShow = SW_SHOWDEFAULT;

ShellExecuteEx(&info);

ShowWindow(hwnd, SW_MINIMIZE);

WaitForSingleObject(info.hProcess,  INFINITE);

ShowWindow(hwnd, SW_RESTORE);

***********************************

For det andet:

WaitForSingleObject venter indtil den kaldte applikation afsluttes af bruger.

Den kaldende applikation minimeres før kaldet til WaitForSingleObject og genskabes
efter WaitForSingleObject har returneret.

Årsag:

Mens WaitForSingleObject kaldet venter på at returnere, er den kaldende applikation ude af stand til at genskabe sit vindue, hvis og såfremt vinduet bliver flyttet eller overlappet af den kaldte applikation.

Dette er naturligvis møgirriterende, men jeg har et løsningsforslag...

Men prøv lige koden først, ok?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis