TonyWhof Posted April 11, 2022 Share Posted April 11, 2022 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 More sharing options...
TonyWhof Posted April 12, 2022 Author Share Posted April 12, 2022 (edited) expandcollapse popup#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 April 12, 2022 by Melba23 Added code tags Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 12, 2022 Moderators Share Posted April 12, 2022 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 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Nine Posted April 12, 2022 Share Posted April 12, 2022 @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. “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Screen Scraping Multi-Threading Made Easy Link to comment Share on other sites More sharing options...
Developers Jos Posted April 12, 2022 Developers Share Posted April 12, 2022 @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. expandcollapse popup#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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now