Jump to content
Sign in to follow this  
NiceBoy1234

Put .exe window to foreground if

Recommended Posts

I want to check if the cmd.exe + window of it is running, if it is running I want to put the window to the foreground, but somehow this does not work:
 

Local $sCommandlinePath = "C:\Windows\system32\cmd.exe"

        RunCm()

        Func RunCm()

            If FileExists($sCommandlinePath) Then
                If ProcessExists("cmd.exe") Then
                    If WinExists("[CLASS:ConsoleWindowClass]") And WinActive("[CLASS:ConsoleWindowClass]") Then
                        Local $hCmdWindow = WinGetHandle("[CLASS:ConsoleWindowClass]")
                        WinSetOnTop($hCmdWindow, "", $WINDOWS_ONTOP)
                    EndIf
                Else
                    Local $iCmMax = Run($sCommandlinePath, "", @SW_SHOWMAXIMIZED)
                EndIf
            EndIf

        EndFunc

I started the command line and put another window above it then I started my script and it did not put the command line window to the foreground.

Edited by NiceBoy1234

Share this post


Link to post
Share on other sites

I do not understand what you are trying to explaining.

You're only calling WinSetOnTop if the window Exists AND the window is already active.

HotKeySet("{F1}", "RunCm")
HotKeySet("{Esc}", "Close")

Local $sCommandlinePath = "C:\Windows\system32\cmd.exe"

While (True)
    Sleep(100)
WEnd

Func RunCm()
    If FileExists($sCommandlinePath) Then
        If ProcessExists("cmd.exe") Then
            If WinExists("[CLASS:ConsoleWindowClass]") and WinActive("[CLASS:ConsoleWindowClass]") Then
                MsgBox("", "", "WinSetOnTop " & (WinSetOnTop("[CLASS:ConsoleWindowClass]", "", 1) = True ? "Succeeded!" : "Failed"))
            Else
                MsgBox("", "", "Cmd.exe does not exist OR Cmd.exe is not already active" & @CRLF & "WinExists: " & WinExists("[CLASS:ConsoleWindowClass]") & @CRLF & "WinActive:" & WinActive("[CLASS:ConsoleWindowClass]"))
            EndIf
        Else
            Local $iCmMax = Run($sCommandlinePath, "", @SW_SHOWMAXIMIZED)
        EndIf
    EndIf

EndFunc   ;==>RunCm

Func Close()
    Exit 0
EndFunc

Sometimes some debugging code helps. I put the return for WinSetOnTop in a message box, if it's True (1) Then it succeeded, otherwise it failed. Also put in an else statement for the If WinExists...WinActive Then to put in a debugging message letting you know why it failed.

Edited by InunoTaishou

Share this post


Link to post
Share on other sites

Ok I changed it to this now:

HotKeySet("{F1}", "RunCm")
HotKeySet("{Esc}", "Close")

Local $sCommandlinePath = "C:\Windows\system32\cmd.exe"

While (True)
    Sleep(100)
WEnd

Func RunCm()
    If FileExists($sCommandlinePath) Then
        If ProcessExists("cmd.exe") Then
            If WinExists("[CLASS:ConsoleWindowClass]") Then
               WinSetOnTop("[CLASS:ConsoleWindowClass]", "", 1)
               MsgBox("", "", "WinSetOnTop " & (WinSetOnTop("[CLASS:ConsoleWindowClass]", "", 1) = True ? "Succeeded!" : "Failed"))
            Else
               MsgBox("", "", "Cmd.exe does not exist OR Cmd.exe is not already active" & @CRLF & "WinExists: " & WinExists("[CLASS:ConsoleWindowClass]") & @CRLF & "WinActive:" & WinActive("[CLASS:ConsoleWindowClass]"))
            EndIf
        Else
            Local $iCmMax = Run($sCommandlinePath, "", @SW_SHOWMAXIMIZED)
        EndIf
    EndIf

EndFunc   ;==>RunCm

Func Close()
    Exit 0
EndFunc

And works.

Edited by NiceBoy1234

Share this post


Link to post
Share on other sites

I apologize, I misunderstood. Looking back at your first post you said you wanted it in the foreground. Maybe you didn't mean WinSetonTop? WinSetOnTop just sets the Window to have the TOPMOST status, so it's always on top.

If you want it to have the topmost status then it worked for me if I had cmd active when I pressed the hotkey. If you just want to bring it to the foreground try

DllCall("user32.dll", "int", "SetForegroundWindow", "hwnd", WinGetHandle("[CLASS:ConsoleWindowClass]"))

Or you could use this to bring it to the foreground and it will activate the window

WinActivate("[CLASS:ConsoleWindowClass]")
Edited by InunoTaishou

Share this post


Link to post
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
Sign in to follow this  

  • Similar Content

    • By nacerbaaziz
      hello sirs, please i created a tool witch get the focused control in a window and play a audio file linked with this controls
      e.g buttons, checkBoxes, radios, comboboxes, and others
      i know that their is a function that give us the control focus but it return the classNN
      i want to get the class name to use it with a switch and
      because their are more than class e.g button tbutton timagebutton tnewButton...
      please can any one help me to get the class name not the classnn
      thanks in advance
    • By cabrunco
      Hi all, I am writing some scripts to control some lab equipment, and sometimes I observe that the script "misses" one of the steps, leading to cascading errors. For example, at one part of the code I wrote this:
      WinClose("Port_Configuration")
      Sleep(1000)
      WinClose("Hype")
      Sleep(1000)
      Run("C:\Users\cabrunco\Desktop\Hype!Terminal.exe")
      Most of the times this works, but I found that in some occasions the windows fail to close. Then, the code becomes a mess, because a second instance of the program will launch, and both windows now have the same title. I think I can solve this problem with this code:
      While WinExists("Hype")
          WinClose("Port_Configuration")
          Sleep(1000)
          WinClose("Hype")
          Sleep(1000)
      WEnd
      Run("C:\Users\matheus\Desktop\Hype!Terminal.exe")
      I would like to know if anybody has any other suggestions for this kind of redundant code. Thanks,
      Matheus
       
       
       
    • By ThePoro
      Hi everyone.
      I want to ask about this : 
      I want it runs from 1 to 100 and It opens 10 firefox profiles then access youtube. After I close a firefox window, the loop runs and wait for another window close until loop ends
      I have a loop like this.
      Func launch() Local $from = Int(GUICtrlRead($input1)) Local $to = Int(GUICtrlRead($input2)) If $to <> "" Then While $from <= $to Local $profile = $to _RunDos("start firefox.exe -p " & $profile & " -no-remote youtube.com") $to=$to+1 WEnd Else Local $profile = $to _RunDos("start firefox.exe -p " & $profile & " -no-remote youtube.com") EndIf EndFunc Is there any solution?
      Thank you!
    • By Rhidlor
      I was wondering if there was a library or something which provides the capability to Send() to inactive windows, and I know what you're thinking, I could just use ControlSend(); the reason I can't use that in this situation is because I need to hold down keys for specific prolonged periods of time. Also activating the window, Send()ing then de-activating the window isn't really an option here, I need the target window to always be in the background. I've looked around the forums for an adequate amount of time and didn't find anything useful, perhaps because the threads were all 10 years old, nevertheless, if anyone has any suggestions they would be greatly appreciated.
      Thanks!
    • By bbProg
      Hi,
       
      how can I wait activate for windows with information as in the photos attached?
      Class is not being recognized by the script.
       
      thanks in advanced.



×
×
  • Create New...