Avatar billede ladyhawke Novice
19. august 2005 - 11:28 Der er 10 kommentarer og
1 løsning

Messagebox skal vises bag anden dialog (win32)

Jeg har en applikation som åbner add/remove programs for brugeren og derefter viser en dialog (messagebox). Det er meningen er brugeren skal besvare et spørgsmål efter at add/remove programs vinduet er lukket, så derfor vil jeg gerne vise messageboxen bag add/remove programs viduet... Hvordan gør jeg det?

(jeg har ikke fundet det muligt/praktisk at vente på at brugeren lukker add/remove programs)
Avatar billede nubi19 Nybegynder
19. august 2005 - 12:23 #1
Nu ved jeg ikke, hvordan din kode til at åbne add/remove programs ser ud, men hvis du bruger ShellExecute eller ShellExecuteEx så kan du faktisk vente på brugeren lukker add/remove. (Du skal bruge ShellExecuteEx hertil, men det er ret nemt at ændre fra ShellExecute)
Den giver dig et handle til processen, og så kan du starte en thread op der laver en WaitForSingleObject(hProcess); Næste linie smider du bare din messagebox i, så bliver den kørt så snart add/remove lukkes, og dit program sleeper indtil, så du ikke får 100 % cpu usage.

Der er dog et men: Jeg ved ikke om add/remove programs starter en ny process op, hvis det ikke gør, duer denne metode ikke. Men hvis den gør er det klart det mest optimale.

Alternativt kan du jo have en tråd til at tjekke hver 100ms eller 200ms, eller hvad du nu synes, om add/remove programs vinduet findes (findwindow fra API'en), denne metode er dog lidt "hovsa-løsning" agtig :P

Jeg vil tro du med SetWindowPos kan placere din messagebox bag add/remove vinduet, dog kan jeg ikke lige komme i tanke om hvordan det skal gøres. Men held og lykke med det.
Avatar billede ladyhawke Novice
19. august 2005 - 12:58 #2
jeg mener at løsningen med at vente fejler (har prøvet temmelig mange gange).

Jeg regnede med at der var et eller andet funktionskald som kunne gøre det, men skal lige finde ud af hvordan jeg identificerer dialogen så jeg kan "flytte" den...
Avatar billede nubi19 Nybegynder
19. august 2005 - 13:22 #3
Jeg er ked af at sige dig imod, men følgende kode virker perfekt:

        SHELLEXECUTEINFO* lpExecInfo = new SHELLEXECUTEINFO();
        lpExecInfo->cbSize = sizeof(SHELLEXECUTEINFO);
        lpExecInfo->lpVerb = "open";
        lpExecInfo->fMask = SEE_MASK_NOCLOSEPROCESS;
        lpExecInfo->lpFile = "C:\\windows\\system32\\rundll32.exe";
        lpExecInfo->lpParameters = "shell32.dll,Control_RunDLL appwiz.cpl,,0";
        lpExecInfo->lpDirectory = "C:\\windows\\system32";
        lpExecInfo->nShow = SW_SHOW;
        ShellExecuteEx(lpExecInfo);
        WaitForSingleObject(lpExecInfo->hProcess, INFINITE);
        delete lpExecInfo;
        MessageBox(NULL, "Hej", "info", MB_OK);

Hej beskeden kommer først når jeg har lukket tilføj/fjern programmer.
Avatar billede ladyhawke Novice
19. august 2005 - 13:36 #4
det er helt ok, havde bare ikke success med det prøver om det dur her
Avatar billede nubi19 Nybegynder
19. august 2005 - 13:43 #5
For at dit program kan køre videre (hvis du har brug for det), eller i det mindste lukkes, bør du oprette en tråd til at køre den kode jeg har skrevet. Ellers vil programmet få en "svarer ikke" fra windows, da den jo "sover" indtil tilføj/fjern programmer lukkes. Men du må gerne lige skrive om du får det til at virke :)
Avatar billede ladyhawke Novice
19. august 2005 - 14:51 #6
arbejder videre i weekenden, men det med tråden er muligvis årsagen til at jeg droppede det tidligere, fordi det blev inkonsistent/svært at styre...
Avatar billede nubi19 Nybegynder
20. august 2005 - 09:26 #7
Jeg kan ikke helt følge dig i at det skulle blive inkonsistent, men du kan jo lige skrive her på mandag, hvordan det er gået. Det med tråden skulle nu ikke volde de store problemer synes jeg, men igen det afhænger selvfølgelig meget af dit program.
Avatar billede ladyhawke Novice
22. august 2005 - 11:23 #8
programmet er lidt tricky fordi det er noget som skal kunne installere nogle applikationer/afinstallere andre.... og der er ret store restriktioner på hvad/hvornår brugeren må interagere med

Projektet er midlertidigt på hold, men kigger på det så snart jeg kan
Avatar billede ladyhawke Novice
19. september 2005 - 19:46 #9
Nubi19>> læg et svar - du har i hvert fald bidraget med en løsning!
Avatar billede nubi19 Nybegynder
20. september 2005 - 07:31 #10
Nej tak, behold du bare pointene, jeg har rigeligt :)
Avatar billede ladyhawke Novice
17. oktober 2005 - 08:24 #11
ok da
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