Jump to content
Sign in to follow this  
JonF

Send to Windows Explorer address bar for webDAV

Recommended Posts

I'm trying to get my users access to our main information store without having to connect to the VPN (which uses port 10443 and is blocked in some places). I have WebDAV set up on the server and connecting works if I type or paste:

remote.{domain}.com@SSL@443DavWWWRootDriveZ

into the Explorer address bar. It prompts for login information even if running from a domain-joined computer logged in with appropriate credentials. However, if I try to create a shortcut (in any of several ways) Explorer does not make the connection, does not display login information, and displays some local directory (usually My Documents).  It appears that the only way to make this connection is to enter the path in Explorer's address bar.  I tried the following:

$Path = "\\remote.{domain}.com@SSL@443\DavWWWRoot\DriveZ"
 
Func _GetHwndFromPID($PID)
    $hWnd = 0
    $stPID = DllStructCreate("int")
    Do
        $winlist2 = WinList()
        For $i = 1 To $winlist2[0][0]
            If $winlist2[$i][0] <> "" Then
                DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID))
                If DllStructGetData($stPID, 1) = $PID Then
                    $hWnd = $winlist2[$i][1]
                    ExitLoop
                EndIf
            EndIf
        Next
        Sleep(100)
    Until $hWnd <> 0
    Return $hWnd
EndFunc ;==>_GetHwndFromPID
 
$ExplorerPID = Run("explorer.exe")
$Handle = _GetHwndFromPID($ExplorerPID)
ControlSend($Handle,"",41477,$Path)
 
but it acts just like the shortcuts.
 
Any ideas?

Share this post


Link to post
Share on other sites

First thing I'd try is _IENavigate.

To iterate on that, the object to the shell window, then use the obj.navigate method.

Edit:

Question... Would:

$gnPID = ShellExecute("\\remote.{domain}.com@SSL@443\DavWWWRoot\DriveZ")

Not work?

Edited by SmOke_N

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites

To iterate on that, the object to the shell window, then use the obj.navigate method.

Edit:

Question... Would:

$gnPID = ShellExecute("\\remote.{domain}.com@SSL@443\DavWWWRoot\DriveZ")

Not work?

 

Nope, it wouldn't work.  post-38071-0-21198800-1417793279_thumb.p

It never asked for credentials.  The only way I've gotten it to ask for credentials is to enter the path directly into the address bar.

I'm not excited about using IE.  Most of my users are PhDs in biological science of one sort or another, but several of them have issues with unfamiliar concepts such as file browsing in IE.

Share this post


Link to post
Share on other sites

You could try mapping a network drive:

net use Z: "remote.{domain}.com@SSL$443DavWWWRootDriveZ" /user xxxx Pa$$word

Then you could delete the mapped drive:

net use z: /delete

or maybe add

#RequireAdmin at the top of your script

Edited by computergroove

Get Scite to add a popup when you use a 3rd party UDF -> http://www.autoitscript.com/autoit3/scite/docs/SciTE4AutoIt3/user-calltip-manager.html

Share this post


Link to post
Share on other sites

Sorry, I think you missed the point with me about the .navigate, I didn't know JohonOne assumed it was IE.

This is (working/pseudo) code of what I was talking about:

Global $gsPath = "C:\Windows\System32"
; the way this is setup, you're likely to be trapped in the loop (add error checking) than to be errored out
Global $goExplorer = _createNewExplorerWindow()
$goExplorer.Navigate($gsPath)

Func _createNewExplorerWindow()

    Local $oShell = ObjCreate("Shell.Application")
    Local $oWin1 = $oShell.windows(), $oWin2
    Local $nCount = $oWin1.count()

    $oShell.Explore("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
    Do
        Sleep(50)
        $oWin2 = $oShell.windows()
    Until $nCount <> $oWin2.count()

    Return $oWin2($oWin2.count() - 1)
EndFunc
Edited by SmOke_N

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites

@JohnOne:  Yeah, I meant Windows explorer.  I intended to be more precise but wasn't.  Sorry.

@SmOke_N: Works fine for local paths, gives a new error message for my case: post-38071-0-68334100-1418138127_thumb.p.

@computergroove:  Aha!  That works (after adding the colon after /user and changing the / before DavWWWRoot to @).  Fascinating.  I used to have a script that mapped a free drive to WebDAV with net use, and it stopped working after some server update.  That's why I was going through this whole exercise.  But I dug up the @SSL$443@DavWWWRoot syntax well after I gave up on that idea and never thought of going back to it with the new syntax.

Problem solved!

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 XinYoung
      Hello all!   I'm stuck at a seemingly simple part of my script. Using IE, I'm filling out a web form that involves clicking a "Browse" button and selecting a file. Once the file explorer dialog opens, however, I am unable to control it.
      I have a string, which is the name of the file I want, and I'm trying to insert it into the 'File name:' text box in the dialog (which already has focus), but it doesn't get inserted. I've tried ClipPut and Send. 

      What's even more concerning is, when I close the dialog, the string is then pasted into the very next window that has focus, which is often SciTE. It's like that Browse's file open dialog halts all processes. Once it's closed, the script continues.
      ;~ Open a IE window and navigate to the login page. Global $oIE = _IECreate($urlBBLogin) _IELoadWait($oIE) ;~ Recognize the form on this page (login input boxes). Local $oForm = _IEFormGetObjByName($oIE, "login") Local $oTextLogin = _IEFormElementGetObjByName($oForm, "user_id") Local $oTextPass = _IEFormElementGetObjByName($oForm, "password") ;~ Enter the Automation user credentials into the form. _IEFormElementSetValue($oTextLogin, $bbUsername) _IEFormElementSetValue($oTextPass, $bbPassword) ;~ Click the Login button. _IEFormSubmit($oForm) _IELoadWait($oIE) ;~ Navigate to the feedfile upload page. _IENavigate($oIE, $urlUpload) _IELoadWait($oIE) ;~ Click the Browse button Local $Browse = _IEGetObjById($oIE, "feedFile_chooseLocalFile") _IEAction($Browse, "Click") Local $Browse = WinWait("Choose File to Upload") ;~ Open the file we created. WinActivate($Browse) Send($finalFile) Has anyone else experienced this problem? Any ideas to get around it? Am I approaching this the wrong way?
      Any support is greatly appreciated.
      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 ternal
      Hi,
      The FAQ proposed as a solution to keys getting stuck  to do this command
      ControlSend("", "", "", "text", 0) However this sends "text" to the last active control if I am not mistaken.I have tried this with
      controlsend("", "", "", "{altup}{shiftup}{ctrlup}", 0) This is already a lot better but still fails 1/10
      I cannot allow the script to send "text" to the last active control, and its a bit silly to let it send to somewhere where its harmless no?
      Are there any other methods of unstucking keys?
    • By Fortitude
      Hello!
      I have made a program, that opens a folder, and then store the path ("C:\programFiles\etc") in a variable.
      Then i need to open the command panel as administrator, and write  in the stored path, and some other text.

      Can i somehow instantly copypaste the text i needed, instead of writing in the command panel with the Send commands?
       
      #RequireAdmin #include <MsgBoxConstants.au3> Global Const $sMessage = "Select a folder" ; Display an open dialog to select a file. Global $sFileSelectFolder = FileSelectFolder($sMessage, "") If @error Then MsgBox($MB_SYSTEMMODAL, "", "Nem választottál ki mappát!") Exit EndIf Global $Tiff_path = $sFileSelectFolder & "\TiffChecker_2_32" FileCopy( "C:\TiffChecker_2_32.exe" , $sFileSelectFolder) $CMD = $Tiff_path & " " & $sFileSelectFolder & " /s/d" Run("C:\WINDOWS\system32\cmd.exe") WinWaitActive("C:\WINDOWS\system32\cmd.exe") Send($CMD) Sleep(1000) Send("{ENTER}") sleep(1000) MsgBox(0,"Press OK", "Press OK to continue") FileCopy("C:\Tiffchecker.txt", $sFileSelectFolder) Also, how do i close the command panel, when the program is finished? (usually its under 1 second, so after the send i just put a Sleep function there)
    • By Docfxit
      I would like to know if there is a way to make the send cmd send characters when using
      Graphical AutoIt Debugger By Stumpii,
      If Not WinActive("Setup - UltraVNC","Setup is preparing to install") Then WinActivate("Setup - UltraVNC","Setup is preparing to install") WinWaitActive("Setup - UltraVNC","Setup is preparing to install") Send("{ALTDOWN}f{ALTUP}") ;Finish The debugger when using step mode will execute the Send cmd line but the window doesn't receive the input.
      Thanks,
      Docfxit
×
×
  • Create New...