NitNG4le Posted July 31, 2014 Posted July 31, 2014 Hey guys, It has been a long time since posting on the forum. (The Help manual is great!) I have spent a good bit of time looking over the help manual, as well as searching the forum, and I have been unable to find a function that I can use in my latest program. I am creating a simple program for the new guys at work, to help simplify some of the remote operations we perform. History has shown that the learning curve can be pretty steep; but if I can help make it more simple for them, it would be great. The program uses the DriveMap function to connect with a specific station (IP), then using a specified file path (kept in a SQLite database) performs a ShellExecute to view/modify the configuration file. One thing I have learned with programming is that you have to try and think of every possible scenario the "User" may encounter. One such case is when they try to connect to a station, without having first connected to the network. It would be nice if the program could detect whether or not the computer is connected to a specified network. Is there a function that could detect a connected network by comparing the network ID with the name pulled from a database? Thanks in advance for any help guys! If $uHappy = True And $uKnow_it = True Then For $i = 1 To 2 Step 1 Clap() Next EndIf
AdmiralAlkex Posted July 31, 2014 Posted July 31, 2014 Like a wireless SSID or what kind of ID are you speaking of? .Some of my scripts: ShiftER, Codec-Control, Resolution switcher for HTC ShiftSome of my UDFs: SDL UDF, SetDefaultDllDirectories, Converting GDI+ Bitmap/Image to SDL Surface
NitNG4le Posted July 31, 2014 Author Posted July 31, 2014 We have the ability to hardwire the connection, or connect wireless. So, yes, the SSID. If $uHappy = True And $uKnow_it = True Then For $i = 1 To 2 Step 1 Clap() Next EndIf
ZacUSNYR Posted July 31, 2014 Posted July 31, 2014 My end users run an app I wrote that will self update. I don't want them checking across the WAN so I have location checking. Each location has a different IP subnet, (192.168.*, 192.169.*, etc). So I look at the second octet in the IP. What's your IP structure like between each location? Are Gateways the same or different? Is the machine's OU in a specific location OU? You could query AD for this as well. There are a lot different ways to do it. I did it IP based with a query of WMI to get all active network cards. The array in the function is what determines the server based on client IP. If no servers are found I return the first server to "cache" since my application can run without that connection. expandcollapse popup$sServer = _PC_GetServerName() If _PC_IsOnline($sServer) Then ConsoleWrite($sServer & " is ON-LINE" & @CRLF) Else ConsoleWrite($sServer & " is OFF-LINE" & @CRLF) EndIf Func _PC_IsOnline($sRPC) Local $iPing, $iError $iPing = Ping($sRPC, 250) If @error Then $iError = @error If $iPing > 0 Then Return 1 Else Return SetError($iError,0,0) EndIf EndFunc Func _PC_GetServerName($sRPC = @ComputerName) Local $objWMIService, $colAdapters, $n, $asIP Local $asServers[4][2] $asServers[0][0] = "SERVER01" $asServers[0][1] = "168" $asServers[1][0] = "SERVER02" $asServers[1][1] = "169" $asServers[2][0] = "SERVER03" $asServers[2][1] = "170" $asServers[3][0] = "SERVER04" $asServers[3][1] = "171" $objWMIService = ObjGet("winmgmts:\\" & $sRPC & "\root\CIMV2") $colAdapters = $objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") $n = 1 For $objAdapter in $colAdapters If Not ($objAdapter.IPAddress) = " " Then For $i = 0 To UBound($objAdapter.IPAddress) If StringLeft($objAdapter.IPAddress($i), 3) = "172" Then $asIP = StringSplit($objAdapter.IPAddress($i), ".", 3) For $m = 0 To UBound($asServers) - 1 If $asServers[$m][1] = $asIP[1] Then Return $asServers[$m][0] Next EndIf Next EndIf $n = $n + 1 Next Return $asServers[0][0] EndFunc
NitNG4le Posted July 31, 2014 Author Posted July 31, 2014 The way it is setup, all stations have identical IP's except for the last 3 digit set. (192.168.24.XXX). They're all connected to the same switch. The program does work the way it is. The DriveMap function sets @error if it can't connect, and i simply pop up a message box telling the user that they must be connected to the network. I just thought it would be nice to check for the connection before attempting to connect. If $uHappy = True And $uKnow_it = True Then For $i = 1 To 2 Step 1 Clap() Next EndIf
ZacUSNYR Posted July 31, 2014 Posted July 31, 2014 (edited) Oh so you know the server than. Just use the IsOnline function from the script above. If _PC_IsOnline("NAMEOFFILESERVER") Then MsgBox(0, "Connecting Drives", "Hit ok to connect to drives..") ;DriveMapAdd(............. Else MsgBox(0, "Error Reaching Network", "Connect to the network and try again..") EndIf Func _PC_IsOnline($sRPC) Local $iPing, $iError $iPing = Ping($sRPC, 250) If @error Then $iError = @error If $iPing > 0 Then Return 1 Else Return SetError($iError,0,0) EndIf EndFunc Edited July 31, 2014 by ZacUSNYR
NitNG4le Posted July 31, 2014 Author Posted July 31, 2014 (edited) PING! Dang it, why didn't I think of that. I could ping any station to check for the connection. I really appreciate that. Thanks so much for you're time. The @error that currently sets when the DriveMap function fails, causes a 10-15 second pause before it reports. Most of these guys freak out when it just sits there and does nothing for too long. I appreciate your posting the function above, but I have to try and figure this out on my own. I've never copied anyone's code before. Please don't be offended; like I said, I really appreciate your help! Edited July 31, 2014 by NitNG4le If $uHappy = True And $uKnow_it = True Then For $i = 1 To 2 Step 1 Clap() Next EndIf
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