Avatar billede bildsoe Nybegynder
04. juli 2011 - 14:01 Der er 8 kommentarer og
1 løsning

Hvordan identificerer jeg en process utvetydigt?

Jeg er ved at lave noget simpel automation af et 3d modelleringsprogram der hedder Rhino3D. Jeg har brug for at kunne starte programmet, få adgang til dets script-interface og for at min applikation får besked, hvis programmet lukkes.

Jeg bruger følgende kode til at starte programmet, og give mig en reference til programmets script-interface:

Rhino4.Application oRhino = (Rhino4.Application)Activator.CreateInstance(Type.GetTypeFromProgID("Rhino4.Application"));

           

            if (oRhino != null)
            {

                RhinoScript4.IRhinoScript oRhinoScript;

                System.Threading.Thread.Sleep(500);

                oRhinoScript = (RhinoScript4.IRhinoScript)oRhino.GetScriptObject();

                oRhinoScript.DocumentModified(false);

                string str = "_-Open " + fileName;

                oRhinoScript.Command(str, 1);

                oRhino.Visible = 1;

                _oRhinoScript = oRhinoScript;
                connectionOpen = true;
            }

Problemet er at jeg intet handle eller andet får ud af dette, så hvis jeg vil have fat i programmet jeg har startet og sikre mig, at jeg får besked, hvis det bliver lukket, så bliver jeg nødt til at bruge Process class'en.

Process[] pr = Process.GetProcessesByName("Rhino4");

            for (int i = 0; i < pr.Length; i++)
            {
                pr[i].EnableRaisingEvents = true;
                pr[i].Exited += new EventHandler(caseInfoMenu_Exited);
                connectionOpen = false;

            }

Problemet er at brugeren nemt kan have flere udgaver af Rhino4 åben. Og at filer med samme navn godt kan være åben flere gange, så jeg skal bruge et unikt id jeg kan identificere det program jeg åbnede. Nogen idéer?

Mvh
Thomas
Avatar billede arne_v Ekspert
04. juli 2011 - 16:22 #1
Du har brug for process id.

Har oRhino eller oRhinoScript en metode eller property som kan hente process id eller window handle eller tilsvarende?
Avatar billede bildsoe Nybegynder
05. juli 2011 - 09:26 #2
Nej, desværre har ORhino og oRhinoScript ikke nogen metoder eller properties der kan det.

Min nuværende løsning er som følger, men det er jo kun smart så længe der ikke er to vinduer med samme filnavn.

Process[] pr = Process.GetProcessesByName("Rhino4");

                for (int i = 0; i < pr.Length; i++)
                {
                    if (pr[i].MainWindowTitle.IndexOf(fileName.Substring(fileName.LastIndexOf('\\') + 1, (fileName.LastIndexOf('.') - fileName.LastIndexOf('\\')) - 1)) > -1)
                    {

                        pr[i].EnableRaisingEvents = true;
                        pr[i].Exited += new EventHandler(caseInfoMenu_Exited);

                    }

                }
Avatar billede bildsoe Nybegynder
06. juli 2011 - 18:28 #3
Jeg har fundet ud af at jeg har mulighed for at finde programmets handle. Så det kan jeg bruge. Alternativt havde jeg overvejet at kopiere filen jeg åbner give den et random navn som jeg er sikker på ingen andre vinduer har. Og så på den måde identificere processen på samme måde som i det viste eksempel, men ud fra et unikt navn. Og så overskrive min oprindelige fil når jeg er færdig. Det føles bare en anelse uelegant.
Avatar billede bildsoe Nybegynder
15. juli 2011 - 11:12 #4
forslag endda ;)
Avatar billede bildsoe Nybegynder
15. juli 2011 - 11:12 #5
Hov ville skrive om der var nogen der havde forslag, ellers vil jeg gerne lukke spm.
Avatar billede arne_v Ekspert
15. juli 2011 - 14:40 #6
Jeg troede at du hvade loest problemet.

Hvad har du og hvad skal du bruge?
Avatar billede bildsoe Nybegynder
19. juli 2011 - 07:56 #7
Hej Arne.

Det har jeg også, men ved ikke helt om løsningen er sikker nok?

Men smid et svar så får du point.
Avatar billede arne_v Ekspert
19. juli 2011 - 15:51 #8
Jeg har ikke noget alternativ.

Saa din loesningen er den bedste ud af 1 kendt loesning.

:-)
Avatar billede arne_v Ekspert
19. juli 2011 - 15:52 #9
svar
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