; https://autohotkey.com/boards/viewtopic.php?f=6&t=24202
; Note: Does not work with Windows XP due to lack of 'wlan' sub-context (nor 'export')
; Should work with Windows Vista onwards but only test with Windows 10

#SingleInstance force ; Force only one instance at a time#SingleInstance force

; Prompt to 'Run as Admin', i.e. show UAC dialog
If Not A_IsAdmin
{
   Run *RunAs "%A_ScriptFullPath%"  ; Requires v1.0.92.01+
   ExitApp
}

; ***** Housekeeping *****
SetWorkingDir, %A_ScriptDir%
FilesDir=%A_ScriptDir%\WifiXMLS

IfNotExist,%FilesDir%
  FileCreateDir,%FilesDir%
  
FileDelete, %FilesDir%\*.xml        ; Make sure there are no existing XML files
IfExist Results.txt                 ; Make sure there is no existing Results.txt file
    FileDelete, Results.txt    

FileAppend, Stored WiFi passwords are as follows:`n`n, Results.txt ; Create first line of new Results.txt file

; ***** Export profiles *****
RunWait, %comspec% /c "netsh wlan export profile folder=%FilesDir% key=clear",, hide  ; Exports all WiFi profiles

; ***** Loop through/parse generated files *****

FileList =  ; Initialize to be blank
Loop, %FilesDir%\*.xml ; Loop through the XML files
    FileList = %FileList%%A_LoopFileName%`n ; Generate a filelist
Sort, FileList, ; Sort the filelist alphabetically

Loop, %FilesDir%\*.xml              ; Loop through each file
{
  string:=""                        ; Store contents of file in variable
  xmlfile:=A_LoopFileFullPath       ; With each file, with its path
  FileRead, string, %xmlfile%       ; ... read each file into memory
  Loop, parse, string, `n, `r       ; Parse each line using LineFeed (`n) and Carriage Return (`r)
   {
   lines:= A_LoopField  `           ; Store lines in variable
   if lines contains <name>         ; Check lines for 1st criteria
      {
      L%a_index%:=RegExReplace( lines, "<.*?>" )
      ssid:= % L%a_index%           ; Store search result in variable
      }
       
   if lines contains <authentication>   ; Check lines for 2nd criteria
      {
      L%a_index%:=RegExReplace( lines, "<.*?>" )
      auth:= % L%a_index%           ; Store search result in variable
      }

   if lines contains <encryption>   ; Check lines for 3rd criteria
       {
       L%a_index%:=RegExReplace( lines, "<.*?>" )
       crypt:= % L%a_index%         ; Store search result in variable
       }

   if lines contains <keyMaterial>  ; Check lines for 4th criteria
      {
      L%a_index%:=RegExReplace( lines, "<.*?>" )
      password:= % L%a_index%       ; Store search result in variable
      
      ssid=%ssid%                   ; Keep just the data between <name> and </name>
      auth=%auth%                   ; Keep just the data between <authentication> and </authentication>
      crypt=%crypt%                 ; Keep just the data between <encryption> and </encryption>
      password=%password%           ; Keep just the data between <keyMaterial> and </keyMaterial>
       
      resultbasic .= "XML profile:"A_Tab . xmlfile . "`nSSID:"A_Tab A_Tab . ssid "`nPassword:"A_Tab . password . "`n---------------------------------------------`n"
      resultverbose .= "XML profile:"A_Tab . xmlfile . "`nSSID:"A_Tab A_Tab . ssid "`nPassword:"A_Tab . password . "`nAuthentication:"A_Tab . auth . "`nEncryption:"A_Tab . crypt . "`n---------------------------------------------`n"
      ; Break                         ; Used for testing
      }
   }
}

; ***** Display a message box, with custom button names, offering a choice of info *****
SetTimer, ChangeButtonNames, 50 
MsgBox, 36, WiFi Profile Info, What info would you like?`n`nBasic, i.e. show just passwords`nVerbose, i.e. show passwords and security`n`nChoose a button...

IfMsgBox, YES 
   {
   FileAppend, %resultbasic%, results.txt   ; Write the basic results to the text file
   FileAppend, `nNote: Only wireless access points with passwords are listed above.`n, Results.txt ; Create last line of new Results.txt file
   Run, results.txt                    ; Open the file in whatever app is registered to display text files
   ExitApp         ; Exit the script
   }
else 
   {
   FileAppend, %resultverbose%, results.txt   ; Write the verbose results to the text file
   FileAppend, `nNote: Only wireless access points with passwords are listed above.`n, Results.txt ; Create last line of new Results.txt file
   Run, results.txt                    ; Open the file in whatever app is registered to display text files
   ExitApp         ; Exit the script
   }
return 

ChangeButtonNames: 
IfWinNotExist, WiFi Profile Info
    return  ; Keep waiting.
SetTimer, ChangeButtonNames, off 
WinActivate 
ControlSetText, Button1, &Basic 
ControlSetText, Button2, &Verbose 
return

Esc::ExitApp    ; Used to cancel the MsgBox, if needed

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。