Avatar billede akilleuz Nybegynder
02. februar 2008 - 18:33 Der er 14 kommentarer og
1 løsning

if else, kan ikke gennem skue hvad der sker

Hej

Jeg prøver på at lave et lille program der skal tjekke om en kører. Hvis processen kører skal den den åbne mit c:\ --> minimere og åbne processen igen maximized.

Dette skal den kun gøre 1 gang.

Hvis processen bliver lukket skal det være muligt at køre ovenstående engang til.

JEg har det problem at den bliver ved med at kører åbne c:\

Er der nogen der kan se hvad der går galt?



static void Main(string[] args)
        {
            bool count = true;

            while (true)
            {
                Process[] pArry = Process.GetProcesses();

                foreach (Process p in pArry)
                {
                    string s = p.ProcessName;
                    s = s.ToLower();

                    Console.WriteLine(s);

                    if (s.CompareTo("notepad") == 0)
                    {
                        if (count == true)
                        {
                            System.Threading.Thread.Sleep(2000);
                         
                            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"C:\");
                            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
                            System.Diagnostics.Process.Start(psi);

                            Console.WriteLine("if1");

                            System.Threading.Thread.Sleep(3000);
                           
                            System.Diagnostics.ProcessStartInfo vlc = new System.Diagnostics.ProcessStartInfo(@"C:\WINDOWS\system32\notepad.exe");
                            vlc.WindowStyle = ProcessWindowStyle.Maximized;                           

                            Console.WriteLine("if3");

                            count = false;

                        }
                    }
                    else
                    {
                        count = true;
                    }
                }
             
            }

        }
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:27 #1
Jeg går ud fra du tror at din count-variabel sikrer det kun sker een gang?? Men hvorfor sætter du den til true nede i bunden - så kan den jo netop gøre det flere gange.
Avatar billede akilleuz Nybegynder
02. februar 2008 - 21:33 #2
Jeg sætter count = false i bunden, således at den ikke kan komme ind i rutinen igen med mindre at processen "notepad" IKKE køre

Og hvis processen ikke køre så sætter den count = true som skulle medføre at hvis notepad startes går den ind i den rutine der åbner C:\ osv.

Er der en anden måde jeg kan gøre det på?
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:37 #3
Men du sætter den til true for hver eneste process, der ikke er notepad - det kan jeg greje logikken i.
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:38 #4
Øhm, ret lige "det kan jeg greje logikken i." til "det kan jeg ikke greje logikken i." - min "ikke"-tast er igen gået i stykker. ;)
Avatar billede akilleuz Nybegynder
03. februar 2008 - 13:03 #5
ahh selvfølgelig, kan egentlig godt se nu hvor du siger det at den sætter den true for hver process der IKKE er notepad.

Kan jeg på en eller anden måde gøre det anderledes? Kan nemlig ikke lige gennemskue hvordan jeg kan flytte "else" ud af rutinen?
Avatar billede nielle Nybegynder
03. februar 2008 - 13:06 #6
Du kan vel bare helt stryge:

                    else
                    {
                        count = true;
                    }
Avatar billede cwboy Nybegynder
03. februar 2008 - 18:26 #7
Hvis det er meningen, at du skal starte Notepad, mangler der vist en linje kode her:

                          System.Diagnostics.ProcessStartInfo vlc = new System.Diagnostics.ProcessStartInfo(@"C:\WINDOWS\system32\notepad.exe");
                            vlc.WindowStyle = ProcessWindowStyle.Maximized;       
                            System.Diagnostics.Process.Start(vlc);


(den nederste linje)
Avatar billede akilleuz Nybegynder
03. februar 2008 - 23:24 #8
Nielle, hvis jeg fjerner:

else
{
count = true;
}

Så vil jeg vel ikke have mulighed for at køre rutinen igen, hvis notepad bliver lukket ned, og startet igen.

cwboy:
tak, men er opmærksom på det, ville bare ikke have notepad åbnede hele tiden hvis der var fejl i koden :-)

Det jeg gerne vil opnå er at åbne c:\ 1 gang når notepad registreres som en process. hvis notepad lukkes, og startes op igen, så skal den åbne c:\ igen.

Håber det giver lidt meneing, har nemlig lidt svært ved at forklare det.
Avatar billede erikjacobsen Ekspert
04. februar 2008 - 08:47 #9
Du skal bare sætte count=true mellem din while true og din foreach.
Avatar billede akilleuz Nybegynder
04. februar 2008 - 08:59 #10
Nej det kan jeg vel ikke, for så vil den stadig åbne C:\ "hele tiden" for når den har kørt alle processorne igennem så sætter den count = true.

Jeg vil kun have at den skal åbne c:\ engang hvis notepad kører. hvis jeg lukker notepad og starter det igen, skal programmet åbne c:\ engang til.
Avatar billede erikjacobsen Ekspert
04. februar 2008 - 09:20 #11
Så kan du roligt tælle mig med blandt dem, der ikke ved, hvad det er du vil ;)
Avatar billede akilleuz Nybegynder
04. februar 2008 - 09:55 #12
hvis notepad ikke køre skal programmet intet gøre.

Hvis notepad startes så skal programmet åbne c:\ og minimere det. Dette skal kun gøres engang mens notepad er åben.

Hvis notepad lukkes skal programmet intet gøre. Men hvis notepad startes op igen, skal den køre c:\ engang mere.

Hvergang notepad startes, skal programmmet registrer det og åbne c:\ ENGANG.

Håber det giver lidt mening :)
Avatar billede nielle Nybegynder
04. februar 2008 - 18:27 #13
Sådan?

using System;
using System.Diagnostics;
using System.Threading;

namespace e817715
{
    class Program
    {
        static void Main(string[] args)
        {
            bool cIsRunning = false;

            while (true)
            {
                bool notepadIsRunning = false;

                Process[] pArry = Process.GetProcesses();
                foreach (Process p in pArry)
                {
                    string s = p.ProcessName.ToLower();

                    if (s.CompareTo("notepad") == 0)
                    {
                        notepadIsRunning = true;
                        break;
                    }
                }

                if (notepadIsRunning)
                {
                    Console.WriteLine("Notepad kører ...");

                    if (!cIsRunning)
                    {
                        ProcessStartInfo psi = new ProcessStartInfo(@"C:\");
                        psi.WindowStyle = ProcessWindowStyle.Minimized;
                        Process.Start(psi);

                        cIsRunning = true;
                    }
                }
                else
                {
                    Console.WriteLine("Notepad kører ikke ...");

                    cIsRunning = false;
                }

                Thread.Sleep(1000);
            }
        }
    }
}
Avatar billede akilleuz Nybegynder
05. februar 2008 - 09:58 #14
selvfølgelig skal man bruge en break, så kommer den vel ud af foreach rutinen?

Kan du ikke lægge et svar, det var lige det jeg manglede nu kan jeg endelig gøre mit program færdigt :)
Avatar billede nielle Nybegynder
05. februar 2008 - 10:33 #15
Nej, breaken er ikke nødvendig. Den speeder bare eksekveringen op en smule.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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