Sign in to follow this  
Followers 0
archrival

Stop ListBox from sorting alphabetically

3 posts in this topic

Is there a way to prevent the listbox from being sorted alphabetically? I've got this rather sloppy code that is the start of something I am working on, right now it just displays the results from "net view" in a listbox and allows you to click on the PC name and it will tell you the OS the machine is running on. Problem is, "net view" doesn't return the list in alphabetical order, but listbox wants to sort it. So that means that the 300th computer in the listbox doesn't match up to the 300th computer in the array (sometimes). I noticed the $LB_SORT variable, I thought maybe that might have something to do with it, I've commented it out altogether, changed it to 0 or 1 and I've searched the forums with no luck. Here's the code that I'm embarassed to post, I took a few bits from CyberSlug:

#include <GuiConstants.au3>
#include <File.au3>
Global $LB_GETCURSEL = 0x0188;
FileDelete(@TempDir & "\templist.txt")
RunWait(@ComSpec & " /c net view > " & @TempDir & "\templist.txt", "", @SW_HIDE)
$file = @TempDir & "\templist.txt"
$lines = StringReplace(FileRead($file, FileGetSize($file)), @LF, @CR)
$lines = StringSplit($lines, @CR)
Global $compname[$lines[0]]
Global $os[$lines[0]]
Global $comp[$lines[0]]
Dim $WS_OVERLAPPEDWINDOW = 0xCF0000, $WS_VISIBLE = 0x10000000, $WS_CLIPSIBLINGS = 0x04000000

GUICreate(@LogonDomain, 200, 200, (@DesktopWidth - 380) / 2, (@DesktopHeight - 280) / 2, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
GUICtrlSetLimit(-1, 20000)
$combo = GUICtrlCreateList("", -1, -1)
$pc = 0

For $i = 1 To Int($lines[0])
   If StringLeft($lines[$i], 2) = "\\" Then
      $pc = $pc + 1
      $compname[$i] = StringLeft(StringTrimLeft($lines[$i], 2), StringInStr($lines[$i], "   ") - 3)
      $comp[$pc] = $compname[$i]
      GUICtrlSetData($combo, $compname[$i] & "|")
   EndIf
Next

GUISetState()
While 1
   $msg = GUIGetMsg()
   Select
      Case $msg = $GUI_EVENT_CLOSE
         ExitLoop
      Case Else
         If $msg = $combo Then
            $pcnumber = Int(_GuiLB_GetcurSel($combo) + 1)
            $os[$pcnumber] = RegRead("\\" & $comp[$pcnumber] & "\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion", "ProductName")
            MsgBox(0, $comp[$pcnumber], $os[$pcnumber])
         EndIf
   EndSelect
Wend
FileDelete(@TempDir & "\templist.txt")
Exit

Func _GuiLB_GetCurSel($ref)
 Return GuiSendMsg($ref, $LB_GETCURSEL, 0, 0)
EndFunc

Share this post


Link to post
Share on other sites



See this thread http://www.autoitscript.com/forum/index.ph...wtopic=3021&hl=

#include <GuiConstants.au3>
Global $LBS_NOTIFY = 0x1, $WS_VSCROLL = 0x200000, $WS_BORDER = 0x800000;
$listBoxStyle = BitOr($LBS_NOTIFY, $WS_VSCROLL, $WS_BORDER)

$GUI = GuiCreate("Example")
GuiCtrlCreateList("",10, 10, 200, 200, $listboxStyle)
GuiCtrlSetData(-1, "one|two|three|four|five|six|seven|eight")

GuiSetState()
While 1
   $msg = GuiGetMsg()
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

Exit

Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!

Share this post


Link to post
Share on other sites

Sweet, thank you VERY much! :idiot: You've been very helpful!

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  
Followers 0