Jump to content

Check of proces is running on the current user


Recommended Posts

Can some help met with my script. I mad a script dat checks of process powerpnt.exe is started. if not it will started it, else it will continue to check if it is started. Also made a function it will made it active after 30 seconds (that works fine).

It made a exactable from it

It will run fine on a local computer, but now I tried on a terminal server with different users. Problem is that powerpnt.exe will not start because other users has this process already open.

Tomorrow at my work I will upload the script

 

Link to comment
Share on other sites

#include <MsgBoxConstants.au3>
#include <AutoItConstants.au3>
#include <Misc.au3>
Handle_MultipleInstance()

Func Handle_MultipleInstance()
    If _Singleton(StringReplace(@ScriptFullPath, '\', '/'), 1) = 0 Then
        Local $iMsgBoxParams = $MB_ICONWARNING + $MB_YESNO + $MB_DEFBUTTON2
        Local $sMsgBoxMsg = "script seems to be already running, do you still want to create a new instance?"
        Local $iUserChoice = MsgBox($iMsgBoxParams, "script is already running!", $sMsgBoxMsg)
        If $iUserChoice = $IDYES Then Return
        Exit
    EndIf
EndFunc


#cs
Dit script zorgt ervoor dat een venster dat de exacte titel heeft altijd op de voorgrond zal blijven.
Zodra de focus verloren gaat, zal het script z.s.m. de focus herstellen.

versie 20220407
#ce
;Deze regel zorgt ervoor dat het script nauwkeurig matcht met de opgegeven venstertitel, mode 3 = "exact"

Opt("WinTitleMatchMode", 3)

;Deze regel zorgt dat de tijd tussen acties die betrekking hebben op vensters niet langer mag zijn dan 200ms - hoe lager hoe sneller het script werkt, maar dat vreet cpu.
Opt("WinWaitDelay", 200)

Opt("TrayIconHide", 1)


;hiermee laat je tekst / info zien in de systemtray, kan handig zijn om te laten zien wat er eigenlijk gestart is...
ToolTip("Powerpoint 20220411", 0,0)
Sleep(2000)
ToolTip("")


;Hier geef ik aan met welke hotkey het script direct gestopt kan worden, in geval van "nood" als je niet uit de Powerpoint komt.
;in dit geval is control alt f10 om het script te stoppen!
HotKeySet("^!{F10}", "killScript")

;deze regel roept de functie checkWindow aan, hetgene wat verderop ervoor zorgt dat er contine gecheckt wordt op een venster met de naam "PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx"
checkWindow()

;deze functie heb ik gemaakt zodat je het script ten alle tijden kunt stoppen, en wordt aangeroepen via een sneltoets. Dat zie je een paar regels terug...
func killScript()
   Exit
EndFunc

;dit is waar het allemaal om draait. Deze functie blijft oneindig lussen en controleert steeds op een venster met titel PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx.
;als dat venster gevonden is, dan zorgt de functie WinActive ervoor dat dát venster meteen op de voorgrond komt.
;Ook wordt er gecheckt of de Powerpoint draait d.m.v. een check op POWERPNT.EXE en indien nodig wordt deze gestart via een sneltoets.
Func checkWindow()
   While 1 ;blijft lussen omdat dit altijd 1 is.
      If ProcessExists("POWERPNT.EXE") Then
         ; De Powerpint lijkt te draaien, want POWERPNT.EXE is actief, prima dan wachten we 1000ms
         Sleep(1000)
      Else
         ; in alle gevallen dat POWERPNT.EXE NIET draait, dan moet de powerpoint gecrasht zijn / niet actief zijn. dus dan starten we die door te drukken op CTRL+SHIFT+F9
         ; Dit is de sneltoets die gedefiniëerd is in de shortcut Powerpoint. (dus de .lnk file).
         ; Bij de eigenschappen van de snelkoppeling kun je deze sneltoets definiëren.
         Send("^+{F9}")
         Sleep(8000); wacht even 8 seconden om te zien of dit process gaat ontstaan voor we doorgaan.
      EndIf
   if WinExists("[TITLE:PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx; CLASS:screenClass]", "") Then WinActivate("[TITLE:PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx; CLASS:screenClass]", ""); Als het venster van de Powerpoint bestaat en als het de juiste titel heeft, activeer deze dan.   
   Sleep(30000); wacht 30 seconden, omdat het script anders wel héél snel blijft lussen en dat is niet goed voor cpu verbruik.
   WEnd; einde lus, start opnieuw vanaf hier.
EndFunc; einde functiebeschrijving.

 

Edited by Melba23
Added code tags
Link to comment
Share on other sites

  • Moderators

TonyWhof,

Welcome to the AutoIt forums. When you post code in future please use Code tags - see here how to do it.  Then you get a scrolling box and syntax colouring as you can see above now I have added the tags. Thanks in advance for your cooperation.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

@TonyWhof

Two comments on your script.  You should always gather your main code together instead of scattering it in between functions.  It makes your code really hard to follow and prone to logic errors.  Having comments in another language, does not help us either since this is an English forum.

As for your request, it makes sense that multiple instances of the same process exist since your are executing your code on a terminal server.  I do not believe you will be able to use AutoIt process* functions in your case.  There is most certainly some API provided by the server to obtain informations on the server activities.  You must look for that first.

Also providing more details on the server (name, version, etc) may help.  Someone here may have experience with your environment.

Link to comment
Share on other sites

  • Developers

@TonyWhof,

I've added some logic to check the process owner so maybe that works in a Terminal server?
Also check the comment I made in the code about starting Powerpoint. :) 

#include <MsgBoxConstants.au3>
#include <AutoItConstants.au3>
#include <Misc.au3>
#include <WinAPIProc.au3>
Handle_MultipleInstance()
#cs
Dit script zorgt ervoor dat een venster dat de exacte titel heeft altijd op de voorgrond zal blijven.
Zodra de focus verloren gaat, zal het script z.s.m. de focus herstellen.

versie 20220407
#ce
;Deze regel zorgt ervoor dat het script nauwkeurig matcht met de opgegeven venstertitel, mode 3 = "exact"
Opt("WinTitleMatchMode", 3)

;Deze regel zorgt dat de tijd tussen acties die betrekking hebben op vensters niet langer mag zijn dan 200ms - hoe lager hoe sneller het script werkt, maar dat vreet cpu.
Opt("WinWaitDelay", 200)
Opt("TrayIconHide", 1)

;hiermee laat je tekst / info zien in de systemtray, kan handig zijn om te laten zien wat er eigenlijk gestart is...
ToolTip("Powerpoint 20220411", 0, 0)
Sleep(2000)
ToolTip("")

;Hier geef ik aan met welke hotkey het script direct gestopt kan worden, in geval van "nood" als je niet uit de Powerpoint komt.
;in dit geval is control alt f10 om het script te stoppen!
HotKeySet("^!{F10}", "killScript")

;deze regel roept de functie checkWindow aan, hetgene wat verderop ervoor zorgt dat er contine gecheckt wordt op een venster met de naam "PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx"
checkWindow()

;dit is waar het allemaal om draait. Deze functie blijft oneindig lussen en controleert steeds op een venster met titel PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx.
;als dat venster gevonden is, dan zorgt de functie WinActive ervoor dat dát venster meteen op de voorgrond komt.
;Ook wordt er gecheckt of de Powerpoint draait d.m.v. een check op POWERPNT.EXE en indien nodig wordt deze gestart via een sneltoets.
Func checkWindow()
    While 1 ;blijft lussen omdat dit altijd 1 is.
        $pprunning = False
        ; Get list of all powerpoint processes
        $aPPPids = ProcessList("POWERPNT.EXE")
        For $i = 1 To $aPPPids[0][0]
            ; loop through the found list and get their process owner
            $pidOwner = _WinAPI_GetProcessUser($aPPPids[$i][1])
            ConsoleWrite(' $pid=' & $aPPPids[$i][1])
            ConsoleWrite(' $pidOwner=' & $pidOwner[0])
            ConsoleWrite(' @UserName=' & @UserName & @CRLF)
            If $pidOwner[0] = @UserName Then
                $pprunning = True
                ExitLoop   ; No need to check the others
            EndIf
        Next
        ;
        If $pprunning Then
            ConsoleWrite("+ Powerpoint already running" & @CRLF)
            ; De Powerpint lijkt te draaien, want POWERPNT.EXE is actief, prima dan wachten we 1000ms
            Sleep(1000)
        Else
            ; in alle gevallen dat POWERPNT.EXE NIET draait, dan moet de powerpoint gecrasht zijn / niet actief zijn. dus dan starten we die door te drukken op CTRL+SHIFT+F9
            ; Dit is de sneltoets die gedefiniëerd is in de shortcut Powerpoint. (dus de .lnk file).
            ; Bij de eigenschappen van de snelkoppeling kun je deze sneltoets definiëren.
            ;Send("^+{F9}")

            ; Dit moet ook werken zonder de shortcut... maar heeft nog wel even het juiste input bestand nodig. ;)
            ConsoleWrite("-> Start Powerpoint" & @CRLF)
            ShellExecute("powerpnt", "")
            Sleep(5000) ; wacht even 8 seconden om te zien of dit process gaat ontstaan voor we doorgaan.
        EndIf
        If WinExists("[TITLE:PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx; CLASS:screenClass]", "") Then WinActivate("[TITLE:PowerPoint-diavoorstelling  -  Presentatie televisie fabriek.ppsx; CLASS:screenClass]", "") ; Als het venster van de Powerpoint bestaat en als het de juiste titel heeft, activeer deze dan.
        Sleep(5000) ; wacht 30 seconden, omdat het script anders wel héél snel blijft lussen en dat is niet goed voor cpu verbruik.
    WEnd ; einde lus, start opnieuw vanaf hier.
EndFunc   ;==>checkWindow


Func Handle_MultipleInstance()
    If _Singleton(StringReplace(@ScriptFullPath, '\', '/'), 1) = 0 Then
        Local $iMsgBoxParams = $MB_ICONWARNING + $MB_YESNO + $MB_DEFBUTTON2
        Local $sMsgBoxMsg = "script seems to be already running, do you still want to create a new instance?"
        Local $iUserChoice = MsgBox($iMsgBoxParams, "script is already running!", $sMsgBoxMsg)
        If $iUserChoice = $IDYES Then Return
        Exit
    EndIf
EndFunc   ;==>Handle_MultipleInstance

;deze functie heb ik gemaakt zodat je het script ten alle tijden kunt stoppen, en wordt aangeroepen via een sneltoets. Dat zie je een paar regels terug...
Func killScript()
    Exit
EndFunc   ;==>killScript

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...