[Цитировать]

    AZJIO
  • 17953
  • Стаж: 3 месяца 22 дня
  • Сообщений: 87
  • Репутация:35

    [+] [-]
ChkDskGui (PureBasic) Исходник + EXE Скачать,Скачать v2 (x86, x64), ещёИсходник на pastebin'еНе сделано:
1. нет компоновки окон
2. нет настройки через ini-файл (цвет, шрифт, игнор дисков)
3. нет сортировки списка дисков, что определяет и порядок проверки


Последний раз редактировалось: AZJIO (2018-05-18 17:58), всего редактировалось 15 раз(а)

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
AZJIO, не помешали бы иконки дисков в ComboBox
(код видел, но пока не нашел...)
Запуск консольной утилиты, производить с помощью процедуры, которую поместить в отдельный поток. (так окно не будет зависать...)

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 3 месяца 22 дня
  • Сообщений: 87
  • Репутация:35

    [+] [-]
53522не помешали бы иконки дисков в ComboBox
1. Ну пока на повестке номера дисков
2. Думаю над семафором, то есть цикл окна в LockMutex(Mutex) UnlockMutex(Mutex) вставить, чтобы элементы не отвечали на события и семафором на ожидание конца процедуры (пример в CreateSemaphore). Пока это усложняет простоту проги практически не добавляя весомых удобств.

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
AZJIO,
2 Вот любят люди жизнь себе усложнять...
Вместо кода в событии на кнопки, пишем процедуру.
В событии на кнопке, проверяем запущен ли в данный момент поток и если нет, запускаем его...
И ничего блокировать не нужно в окне. Таскай и жмахай, сколько влезит...
Небольшая сложность в передаче параметров в процедуру, но это решаемо или глобальными переменными или структурой.
В справке есть примеры.
Иконки сделать не сложно, я видел пример, есть на 4.0 но его переделывать нужно...

Дополнительная информация

; English forum: http://www.curvesoftware.co.uk/purebasic/topic.asp?TOPIC_ID=5313
; Author: Denis
; *** Example for using Icons in a combobox ***
Structure DriveInfos
   DriveLetter.s
   DriveType.l
   DriveTypeString.s
   NameOfVolume.s
EndStructure
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;                  Some windows constants
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
#ICC_USEREX_CLASSES  = $200
#WS_CHILD            = $40000000
#WS_VISIBLE          = $10000000
#CBS_DROPDOWN        = 2
#CBS_AUTOHSCROLL     = $40
#WS_VSCROLL          = $200000
#SHGFI_SYSICONINDEX  = $4000
#SHGFI_SMALLICON     = 1
#CLR_NONE            = $FFFFFFFF
#CBEM_SETIMAGELIST   = $00000402
#CBEM_INSERTITEM     = $00000401
#CBEIF_TEXT          = $00000001
#CBEIF_IMAGE         = $00000002
#CBEIF_SELECTEDIMAGE = $00000004
#CB_SETCURSEL        = $14E
#DRIVE_REMOVABLE     = 2
#DRIVE_FIXED         = 3
#DRIVE_REMOTE        = 4
#DRIVE_CDROM         = 5
#DRIVE_RAMDISK       = 6
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;                  COMBOBOX Style
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
#EDITCOMBOBOX = #WS_CHILD| #WS_VISIBLE |#CBS_DROPDOWN | #CBS_AUTOHSCROLL | #WS_VSCROLL
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;                  some Global vars
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Global MainWindowID.l, Hinstance.l,HwndComboBox.l
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;;/*/*/*/*/*/*/*/            Procedures           /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
Procedure.l CreateComboBoxGadget()
  ; return 0 if Combobox failed  Otherwise return Handle of combobox
  Hinstance = GetModuleHandle_(0)
; ComboBoxEx control must be initialized by calling the InitCommonControlsEx before calling CreateWindowEx API
; dwICC member of INITCOMMONCONTROLSEX structure must have #ICC_USEREX_CLASSES value
; CreateWindowEx class name must be ComboBoxEx32
  Var.INITCOMMONCONTROLSEX
  Var\dwSize = SizeOf(INITCOMMONCONTROLSEX)
  Var\dwICC  = #ICC_USEREX_CLASSES
  If InitCommonControlsEx_(@Var)
; CreateWindowEx parameters to create Combobox with Icons :
; CreateWindowEx_(#WS_EX_WINDOWEDGE,  --> extended combobox window style
;                 "ComboBoxEx32",     --> class name
;                 0,                  --> window name; put 0 when no name
;                 #EDITCOMBOBOX,      --> combobox window style
;                 40,                 --> horizontal position combobox
;                 10,                 --> vertical position of combobox
;                 300,                --> combobox width
;                 150,                --> combobox drop-down list height, not combobox height
;                 MainWindowID,       --> handle to parent or owner window, here main window
;                 0,                  --> handle to menu, or child-window identifier, put 0 when not exist
;                 Hinstance,          --> handle to application instance, --> Hinstance = GetmoduleHandle_(0)
;                 0)                  --> pointer to window-creation data, 0 here (see MS doc)
     HwndComboBox  = CreateWindowEx_(2, "ComboBoxEx32", 0, #EDITCOMBOBOX, 40, 10, 300,150, MainWindowID , 0, Hinstance, 0)
; get image list
     Path.s=Space(255)
     GetCurrentDirectory_(255,@Path)  ; Path = Current Directory string
     hImageList.l = SHGetFileInfo_(Path, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX |#SHGFI_SMALLICON)
     ImageList_SetBkColor_(hImageListS,#CLR_NONE)
; assign image list to Combobox
    SendMessage_(HwndComboBox, #CBEM_SETIMAGELIST, 0, hImageList)
  Else
     HwndComboBox = 0
  EndIf
  ProcedureReturn HwndComboBox
EndProcedure
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
Procedure GetAllDrives()
; create linked list to store drive name
Global NewList Drive.DriveInfos()
   ; Get all drives letter
   AllDrivesNames.s = Space(255)  ; AllDrivesNames receive string from GetLogicalDriveStrings API
   *AllDrivesNames.l = @AllDrivesNames
   DrivesExist.l = GetLogicalDriveStrings_(255,*AllDrivesNames)
   NbOfDrives.b = 0
   If DrivesExist
      NbOfDrives = DrivesExist/4
      lpFileSystemNameBuffer.s = Space(255)
      For i.b = 1 To NbOfDrives
         AddElement(Drive())
         ;;-------- Drive letter
         ;; Drive()\Name have 3 chars : first the drive letter
         ;; second ":"
         ;; third  "\"
         Drive()\DriveLetter = UCase(PeekS(*AllDrivesNames,3))
         *AllDrivesNames + 4
         ;;-------- Volume name
         Drive()\NameOfVolume = ""
         GetVolumeInformation_(Drive()\DriveLetter,Drive()\NameOfVolume,255,0,0,0,lpFileSystemNameBuffer,255)
         If Len(Drive()\NameOfVolume)
             Drive()\NameOfVolume = UCase(Left(Drive()\NameOfVolume ,1)) + LCase(Mid(Drive()\NameOfVolume ,2,Len(Drive()\NameOfVolume)-1))
         Else
             Drive()\NameOfVolume = ""
         EndIf
; determine type of drive
         Drive()\DriveType = GetDriveType_(@Drive()\DriveLetter)
         Select Drive()\DriveType
            Case 0  ; drive not determined
                 Drive()\DriveTypeString = "Indetermined Type"
            Case 1  ; 1 The root directory does not exist
                 Drive()\DriveTypeString = "Root directory does not exist"
            Case #DRIVE_REMOVABLE  ;The drive can be removed from the drive.
                 Drive()\DriveTypeString = "Floppy disk"
            Case #DRIVE_FIXED      ; The disk cannot be removed from the drive.
                 Drive()\DriveTypeString = "Not removed disk"
            Case #DRIVE_REMOTE     ; The drive is a remote (network) drive.
                 Drive()\DriveTypeString = "Remote (network) drive"
            Case #DRIVE_CDROM      ; The drive is a CD-ROM drive.
                 Drive()\DriveTypeString = "CD-ROM"
            Case #DRIVE_RAMDISK    ; The drive is a RAM disk.
                 Drive()\DriveTypeString = "RAM disk"
            Default
                 Drive()\DriveTypeString = "Indetermined Type"
         EndSelect
      Next i
    EndIf
EndProcedure
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;;                                 Main Prog
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
;;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
MainWindowID = OpenWindow(0,0,0,400,150," List of your computer Drives",#PB_Window_ScreenCentered |#PB_Window_SystemMenu)
If MainWindowID And CreateGadgetList(WindowID(0)) And CreateComboBoxGadget()
         GetAllDrives()
         ResetList(Drive())
         Combo.COMBOBOXEXITEM
         Combo\mask = #CBEIF_TEXT | #CBEIF_IMAGE| #CBEIF_SELECTEDIMAGE
         InfosFile.SHFILEINFO
         ResetList(Drive())
         driveToDisplay.s= Space(255)
         While NextElement(Drive())
;  fill combobox with items, get image index of current drive, insert current item to the list
;  and  display second item
;  create strings to fill combobox with
            If Len(Drive()\NameOfVolume)
               driveToDisplay= Drive()\NameOfVolume  + " (" + Drive()\DriveTypeString + " "+ Left(Drive()\DriveLetter,2) + ")"
            Else
               driveToDisplay = Drive()\DriveTypeString + " (" + Left(Drive()\DriveLetter,2) + ")"
            EndIf
;  get image index of current drive
            SHGetFileInfo_(Drive()\DriveLetter, 0, @InfosFile, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX |#SHGFI_SMALLICON )
            Combo\iItem          = -1                  ; -1 --> insert current item at the end of list
            Combo\pszText        = @driveToDisplay
            Combo\cchTextMax     = Len(driveToDisplay)
            Combo\iImage         = InfosFile\iIcon     ; image index of current image
            Combo\iSelectedImage = InfosFile\iIcon     ; image index of selected (displayed) item
            Combo\iIndent        = 1
;  insert current item to the list
            SendMessage_(HwndComboBox , #CBEM_INSERTITEM, 0, @Combo)
         Wend
;  display second item in combobox
         secondItemIndex = 1  ; index of first item is 0
         SendMessage_(HwndComboBox , #CB_SETCURSEL, secondItemIndex , 0)
Else
   MessageRequester("Error", "Can't create ComboBox",16)
   End
EndIf
; events loop
  Repeat
     Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Quit = 1
     EndSelect
  Until Quit
End

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
AZJIO, Лучше уж так:
If Not IsThread(Thread)
  Thread = CreateThread(@RunProg(), 1)
EndIf
Только я не пойму, зачем ждать процесс выполнения после запуска...
RunProgram("cmd.exe", "/c (Title Check Disk & @Echo off & Color 1e & cls & " + GetComString() + " & set /p Ok=^>^>)", "", #PB_Program_Open | #PB_Program_Wait
#PB_Program_Open - открыл файл, его и закрыть после надо... Только зачем открывать то... Запуска не достаточно?
#PB_Program_Wait - и к чему ожидание? если не возврат, не ещё либо какие то данные, после работы консольной утили не считываются...

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
Вот код отображения иконок дисков:

Дополнительная информация

If OpenWindow(0, 0, 0, 300, 300, "Аssociated icon",  #PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
file$ = "c:"
i=1
hIco=ExtractAssociatedIcon_(GetModuleHandle_(0), @file$, @i)
ImageGadget(0, 0, 0, 64, 64,hIco)
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
;
EndIf

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 3 года 4 месяца
  • Сообщений: 2235
  • Репутация:127

    [+] [-]
AZJIO, Привет.
53523 Ну пока на повестке номера дисков
Мой вариант:
Procedure.s DriveGetNumber(DriveLetter$)
  Protected DriveInfo.STORAGE_DEVICE_NUMBER, Ret$="",  hDevice = CreateFile_("\\.\" + DriveLetter$, 0, 0, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #NUL)
  If hDevice
    If DeviceIoControl_(hDevice,#IOCTL_STORAGE_GET_DEVICE_NUMBER, 0, 0, DriveInfo, SizeOf(STORAGE_DEVICE_NUMBER), #NUL,  #NUL)
      Ret$=Str(DriveInfo\DeviceNumber) + ":" + Str(DriveInfo\PartitionNumber)
    EndIf
    CloseHandle_(hDevice)
  EndIf
  ProcedureReturn Ret$
EndProcedure
Debug DriveGetNumber("c:")
И еще ошибочка
Output$ + ReadProgramString(Prog) + Chr(13)
Не надо добавлять Chr(13) , читается не строка, а поток, в нем уже есть эти символы, и для совместимости с OemA2Ansi(Str$) читать надо поток надо в Raw виде, без преобразований.
Output$ + ReadProgramString(Prog,#PB_Unicode)


Последний раз редактировалось: nikzzzz (2018-05-09 17:06), всего редактировалось 1 раз

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
nikzzzz, Петр предложил почти такой же вариант:
Structure IOCTL_STORAGE_GET_DEVICE_NUMBER
  DeviceType.l
  DeviceNumber.l
  PartitionNumber.i
EndStructure
Procedure GetDiskNimberForDrive(sDriveLetter.s, *Info.IOCTL_STORAGE_GET_DEVICE_NUMBER) ; Буква диска
  Res = 0
  hDevice = CreateFile_("\\.\" + sDriveLetter, 0, 0, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0)
  If hDevice
    Res = DeviceIoControl_(hDevice, $2D1080, 0, 0, *Info, SizeOf(IOCTL_STORAGE_GET_DEVICE_NUMBER), @x,  0)
    CloseHandle_(hDevice)
  EndIf
  ProcedureReturn Res
EndProcedure
x.IOCTL_STORAGE_GET_DEVICE_NUMBER
Debug GetDiskNimberForDrive("C:", @x)
Debug x\DeviceType
Debug x\DeviceNumber
Debug x\PartitionNumber
Но твой, компактнее...
А вот с иконками дисков в ComboBox, у меня что то не выходит...

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 3 года 4 месяца
  • Сообщений: 2235
  • Репутация:127

    [+] [-]
Joker-2013,
53559Петр предложил почти такой же вариант:
Там есть маленькая ошибочка, и определяется структура, которая уже есть, поправленный вариант.
Procedure GetDiskNimberForDrive(sDriveLetter.s, *Info.STORAGE_DEVICE_NUMBER) ; Буква диска
  Protected Res = 0,  hDevice = CreateFile_("\\.\" + sDriveLetter, 0, 0, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0)
  If hDevice
    Res = DeviceIoControl_(hDevice, $2D1080, 0, 0, *Info, SizeOf(STORAGE_DEVICE_NUMBER), 0,  0)
    CloseHandle_(hDevice)
  EndIf
  ProcedureReturn Res
EndProcedure
x.STORAGE_DEVICE_NUMBER
Debug GetDiskNimberForDrive("C:", @x)
Debug x\DeviceType
Debug x\DeviceNumber
Debug x\PartitionNumber
Да, я свой вариант поправил, там тоже маленькая ошибочка была.

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
nikzzzz, ay ay ay
Тоже скоро нужна будет данная функа.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 3 месяца 22 дня
  • Сообщений: 87
  • Репутация:35

    [+] [-]
Joker-2013
Главное чтобы какой наворот не помешал работе проге в урезанных условиях, всё же утилита системная.
твой пример ковырнул
If OpenWindow(0, 0, 0, 400, 250, "Пример с иконками дисков",  #PB_Window_MinimizeGadget)
  file$ = "C:"
  file2$ = "D:"
  i=1
  hIco=ExtractAssociatedIcon_(GetModuleHandle_(0), @file$, @i)
  hIco2=ExtractAssociatedIcon_(GetModuleHandle_(0), @file2$, @i)
  ComboBoxGadget(0, 20, 16, 200, 25, #PB_ComboBox_Image) ; Создаёт раскрывающийся список
  AddGadgetItem(0, -1, "Диск " + file$, hIco)
  AddGadgetItem(0, -1, "Диск " + file2$, hIco2)
  SetGadgetState(0, 0) ; Выбирает первый элемент списка
  Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Есть мысль: иногда надо проверить 2 диска (а может более), проверка примерно 15 и 30 минут. Тогда можно добавить кнопку "Добавить в очередь", то есть выбрав диск добавляем в очередь, потом другой. Жмём "Старт", если очереди нет используем комбо, если есть используем очередь. Запускаем строку в которой 2 и более команд с chkdsk, перед данными вставляем инфостроку из комбо, чтобы потом просматривая лог было видно для какого диска это выполнялась, там только метка вроде по умолчанию.
Ещё... выходных почти нет, можно каждый из нас модернизировать и обновлять с датой обновления, а пришедшие скачивают критикуют или добавляют, в итоге быстрее всё сдвинется с места, ну конечно если есть желание. Я на день ночь ухожу и выпадаю почти на 2-е суток.

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
AZJIO,
#PB_ComboBox_Image : Включает поддержку изображений в элементах (не поддерживается для редактируемого ComboBox в OSX)
Вот тут, при тестах, я и облажался...
Проверил, иконки не отобразились и понавыдумывал что эскизы не того размера, посему и не работает...

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
53601можно каждый из нас модернизировать и обновлять с датой обновления, а пришедшие скачивают критикуют или добавляют, в итоге быстрее всё сдвинется с места, ну конечно если есть желание
Так никто кроме нас не пишет в теме...
Я всегда был лишь тестором и идейным вдохновителем, программист из меня никакой...
Сейчас и свои проекты забросил, дел по дому много...

оффтоп

Полазил я в Админке, было интересно, почему у нас две с лишнем тысячи пользователей на сайте, а пишут от силы 40...
И почему не удаляются, в автоматическом режиме, как завещал Puhpol...
Оказалось, что у нас на сайте много молчунов, которые периодически появляются, качают что либо и раздают.

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 2 года 11 месяцев
  • Сообщений: 2823
  • Репутация:111

    [+] [-]
  • Откуда: Админ от сюда
Иконки добавил, с ними повеселей...

Дополнительная информация

i=1
    Handle = GetModuleHandle_(0)
    ForEach Drive.s()
      Text.s= Drive.s()
      Letter.s =LSet(Text,1)+":"
      hIco=ExtractAssociatedIcon_(Handle, @Letter, @i)
      AddGadgetItem(0, -1, Drive.s(), hIco)
    Next

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 3 года 4 месяца
  • Сообщений: 2235
  • Репутация:127

    [+] [-]
AZJIO,
По поводу очереди, все можно сделать динамически, открыв консоль и добавляя в нее команды.
Пример
hCmd=RunProgram("cmd.exe", "", "", #PB_Program_Open|#PB_Program_Write)
WriteProgramStringN(hCmd,"@color 1e",#PB_Ascii)
WriteProgramStringN(hCmd,"cls & tracert usbtor.ru",#PB_Ascii)
While ProgramRunning(hCmd)
    Delay(100)
Wend
Или использовать свой вывод
Procedure.s OemA2Ansi(Str$)
  user32_dll=OpenLibrary(#PB_Any, "user32.dll")
  CallFunction(user32_dll,"OemToCharA",@Str$,@Str$)
  CloseLibrary(user32_dll)
  ProcedureReturn PeekS(@Str$,-1,#PB_Ascii)
EndProcedure
hCmd = RunProgram("cmd.exe", "", "", #PB_Program_Open|#PB_Program_Write|#PB_Program_Read|#PB_Program_Hide)
If IsProgram(hCmd)
  WriteProgramStringN(hCmd, "tracert usbtor.ru")
  WriteProgramStringN(hCmd, "exit")
  While ProgramRunning(hCmd)
    If AvailableProgramOutput(hCmd)
      Answer$=OemA2Ansi(ReadProgramString(hCmd,#PB_Unicode))
      If Answer$
        Debug Answer$
      EndIf
    EndIf
    Delay(100)
  Wend
EndIf

Страница 1 из 8


Показать сообщения:    

Текущее время: 20-Июн 20:09

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы