Автор Тема: _GUICtrlListView_GetItemText на разных компах  (Прочитано 723 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33
  • Репутация: 0
    • Награды
День добрый. Есть простейший скрипт:
Код: AutoIt [Выделить]
#Include <GuiListView.au3>

WinMinimizeAll();
$hList = ControlGetHandle('', '', '[CLASS:SysListView32;INSTANCE:1]')
ConsoleWrite("after get handle " & $hList & @CRLF)
for $i = 0 to _GUICtrlListView_GetItemCount($hList)
   $name = _GUICtrlListView_GetItemText($hList, $i)
   ConsoleWrite($name & @CRLF)
Next

для получени названий ярлыков на рабочем столе винды. На одном компе работает, на другом нет. Почему так может быть? Виндовс на обоих компах одинаковый  -10 х86..

Русское сообщество AutoIt

_GUICtrlListView_GetItemText на разных компах
« Отправлен: Февраль 14, 2018, 15:49:05 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3754
  • Репутация: 991
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #1, Отправлен: Февраль 14, 2018, 16:21:21 »
badhabit  [?]
Цитировать
Почему так может быть?
Пустой заголовок окна означает текущее активное окно. Вы уверены, что после сворачивания активным будет рабочий стол? ;)
Просто добавьте "заголовок" и можно даже не сворачивать
Код: AutoIt [Выделить]
$hList = ControlGetHandle('[CLASS:Progman]', '', '[CLASS:SysListView32;INSTANCE:1]')


Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #2, Отправлен: Февраль 16, 2018, 12:17:12 »
Все равно не работает...
Код: AutoIt [Выделить]
#Include <GuiListView.au3>
$hList = ControlGetHandle('[CLASS:Progman]', '', '[CLASS:SysListView32;INSTANCE:1]')
for $i = 0 to _GUICtrlListView_GetItemCount($hList)
   $name=_GUICtrlListView_GetItemText($hList, $i)
   ConsoleWrite($i & " " & $name & @CRLF)
Next
 

выдает:
0
1
2
3
4

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 343
  • Репутация: 81
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #3, Отправлен: Февраль 16, 2018, 13:04:59 »
badhabit, попробуйте так
Код: AutoIt [Выделить]
_Example()

Func _Example()
    Local $hWnd = WinGetHandle("[CLASS:Progman]")
    Local $hListView = ControlGetHandle($hWnd, Null, "[CLASS:SysListView32;INSTANCE:1]")
    For $i = 0 To ControlListView($hWnd, Null, $hListView, "GetItemCount") - 1
        ConsoleWrite($i & " " & ControlListView($hWnd, Null, $hListView, "GetText", $i) & @LF)
    Next
EndFunc   ;==>_Example


Русское сообщество AutoIt

Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #3 Отправлен: Февраль 16, 2018, 13:04:59 »

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #4, Отправлен: Февраль 16, 2018, 14:13:38 »
Не помогло. Выдает:
Цитировать
0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
В принципе у меня задача другая, мне нужно запустить конкретное приложение двойным кликом по его иконке (именно кликом Run\ShellExecute не подходят т.к. булет виден родительский процесс)... Может это можно сдлеать проще?

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3754
  • Репутация: 991
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #5, Отправлен: Февраль 16, 2018, 14:22:54 »
badhabit  [?]
Цитировать
Не помогло
А что у вас показывает Au3Info на вкладке Summary после перетаскивания мишени на рабочий стол?

Цитировать
именно кликом Run\ShellExecute не подходят
Двойной клик по ярлыку - это и есть ShellExecute. Возможно, в ярлыке просто указаны дополнительные параметры запуска :think:

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #6, Отправлен: Февраль 16, 2018, 15:28:47 »
А что у вас показывает Au3Info на вкладке Summary после перетаскивания мишени на рабочий стол?
Цитировать
>>>> Window <<<<
Title:   Program Manager
Class:   Progman
Position:   0, 0
Size:   1920, 1080
Style:   0x96000000
ExStyle:   0x00000080
Handle:   0x00000000000100FC

>>>> Control <<<<
Class:   SysListView32
Instance:   1
ClassnameNN:   SysListView321
Name:   
Advanced (Class):   [CLASS:SysListView32; INSTANCE:1]
ID:   1
Text:   FolderView
Position:   0, 0
Size:   1920, 1080
ControlClick Coords:   111, 358
Style:   0x56003A40
ExStyle:   0x00000000
Handle:   0x0000000000010100

>>>> Mouse <<<<
Position:   111, 358
Cursor ID:   0
Color:   0x002144

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
FolderView


>>>> Hidden Text <<<<


Двойной клик по ярлыку - это и есть ShellExecute. Возможно, в ярлыке просто указаны дополнительные параметры запуска :think:
Не совсем. Если например смотреть на список процессов через Process Explorer, то будет видно, что программа запущена скриптом, а мне этого не надо...


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3754
  • Репутация: 991
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #7, Отправлен: Февраль 16, 2018, 16:20:12 »
badhabit  [?]
Цитировать
будет видно, что программа запущена скриптом
Завершите скрипт и процесс останется без родителя. Но если вам нужно продолжать скрипт, то так
Код: AutoIt [Выделить]
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Run(''notepad.exe'')"')


По поводу Au3Info - странно, что не работает. Посмотрите, где проблема: не находит рабочий стол или список.

Русское сообщество AutoIt

Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #7 Отправлен: Февраль 16, 2018, 16:20:12 »

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #8, Отправлен: Февраль 17, 2018, 18:06:09 »
По поводу Au3Info - странно, что не работает. Посмотрите, где проблема: не находит рабочий стол или список.
Вот саммари:
Цитировать
>>>> Window <<<<
Title:   Program Manager
Class:   Progman
Position:   0, 0
Size:   1440, 900
Style:   0x96000000
ExStyle:   0x00000080
Handle:   0x00000000000201C6

>>>> Control <<<<
Class:   SysListView32
Instance:   1
ClassnameNN:   SysListView321
Name:   
Advanced (Class):   [CLASS:SysListView32; INSTANCE:1]
ID:   1
Text:   FolderView
Position:   0, 0
Size:   1440, 900
ControlClick Coords:   1269, 371
Style:   0x56003A40
ExStyle:   0x00000000
Handle:   0x0000000000020154

>>>> Mouse <<<<
Position:   1269, 371
Cursor ID:   0
Color:   0x881798

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
FolderView


>>>> Hidden Text <<<<
вот скрипт:
Код: AutoIt [Выделить]
#Include <GuiListView.au3>

_Example()
;_Example2()

Func _Example()
    Local $hWnd = WinGetHandle("[CLASS:Progman]")
    ConsoleWrite("Progman hwnd: " & $hWnd & @CRLF)
    Local $hListView = ControlGetHandle($hWnd, Null, "[CLASS:SysListView32;INSTANCE:1]")
    ConsoleWrite("ListView handle: " & $hListView & @CRLF)
    For $i = 0 To ControlListView($hWnd, Null, $hListView, "GetItemCount") - 1
        ConsoleWrite($i & " " & ControlListView($hWnd, Null, $hListView, "GetText", $i) & @LF)
    Next
EndFunc   ;==>_Example
 

вот результат:
Цитировать
Progman hwnd: 0x000201C6
ListView handle: 0x00020154
0
1 0
2 0
3 0
Почему не работает? Загадка...
Могу дать доступ на VPS по rdp где эта проблема...
ЗЫ. с запуском приложения через Run(@AutoItExe & ' /AutoIt3ExecuteLine "Run(''notepad.exe'')"') тоже странности.
Просто из скрипта запускает, если скомпилировать скрипт в в ехе файл - наработает, не запускается блокнот, а скрипт в фоне висит...
Код: AutoIt [Выделить]
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Run(''notepad.exe'')"')
while True
  Sleep(1000)
WEnd
 

И еще вопрос, так как пока не получилось проверить... А от какого пользователя запуститься нотепад? из под того же что и скрипт или например текущего (залогининого), к примеру если ехе скрипта запустили через runas и для другого пользователя (надеюсь что-нибудь понятно))))
Т.е. задача у меня такая, чтобы после запуска блокнота было не видно ни родительского процесса (скрипта) и он был запущен типа текущем пользователем (хотя по факту его запустил скрипт (ехе), запущенный из-под другого пользователя)... Вот я и думал, что клик по ярлыку на десктопе единственный вариант...
« Последнее редактирование: Февраль 17, 2018, 18:16:00 от badhabit »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3754
  • Репутация: 991
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #9, Отправлен: Февраль 18, 2018, 10:59:59 »
badhabit  [?]
Цитировать
если скомпилировать скрипт в в ехе файл - наработает, не запускается блокнот
Нужно добавить в начало скрипта
Код: AutoIt [Выделить]
#pragma compile(AutoItExecuteAllowed, true)


Цитировать
А от какого пользователя запуститься нотепад? из под того же что и скрипт или например текущего (залогининого)
из под того же что и скрипт

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #10, Отправлен: Февраль 18, 2018, 11:12:50 »
из под того же что и скрипт
Я так и подозревал)) А чтобы из под текущего "залогининого" получается только кликом по ярлыку?

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3754
  • Репутация: 991
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #11, Отправлен: Февраль 18, 2018, 11:23:29 »
badhabit  [?]
Цитировать
чтобы из под текущего "залогининого"
Замените Run на RunAs с данными текущего пользователя.

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #12, Отправлен: Февраль 18, 2018, 11:58:29 »
badhabit  [?]
Цитировать
чтобы из под текущего "залогининого"
Замените Run на RunAs с данными текущего пользователя.
Ок, спасибо за ответы!
А с иконками на десктопе не ясно что делать?

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3754
  • Репутация: 991
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #13, Отправлен: Февраль 18, 2018, 12:19:00 »
badhabit  [?]
Цитировать
с иконками на десктопе не ясно что делать
Вы уверены, что система, на которой не работает, именно х86, а не х64? Если х64, то скрипт нужно запускать через AutoIt3_x64.
Ну и попробуйте ещё с правами администратора запустить
Код: AutoIt [Выделить]

Оффлайн badhabit [?]

  • Новичок
  • *
  • Сообщений: 33

  • Автор темы
  • Репутация: 0
    • Награды
Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #14, Отправлен: Февраль 18, 2018, 12:26:19 »
badhabit  [?]
Цитировать
с иконками на десктопе не ясно что делать
Вы уверены, что система, на которой не работает, именно х86, а не х64? Если х64, то скрипт нужно запускать через AutoIt3_x64.
Ну и попробуйте ещё с правами администратора запустить
Код: AutoIt [Выделить]
А про это я не знал) да, система x64. Ок, тогда попробую и напишу результат

Русское сообщество AutoIt

Re: _GUICtrlListView_GetItemText на разных компах
« Ответ #14 Отправлен: Февраль 18, 2018, 12:26:19 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
11 Ответов
10328 Просмотров
Последний ответ Январь 16, 2017, 11:04:47
от Garrett
11 Ответов
6745 Просмотров
Последний ответ Июль 27, 2012, 13:08:55
от AZJIO
5 Ответов
2839 Просмотров
Последний ответ Ноябрь 22, 2012, 06:14:16
от AZJIO
5 Ответов
2933 Просмотров
Последний ответ Апрель 04, 2013, 18:58:36
от InnI
1 Ответов
2001 Просмотров
Последний ответ Ноябрь 26, 2013, 18:28:49
от AZJIO
9 Ответов
2167 Просмотров
Последний ответ Февраль 19, 2015, 13:59:31
от C2H5OH
4 Ответов
1655 Просмотров
Последний ответ Июль 30, 2015, 21:13:32
от Ksaan
0 Ответов
1070 Просмотров
Последний ответ Сентябрь 03, 2015, 18:22:22
от uritalex
0 Ответов
663 Просмотров
Последний ответ Сентябрь 03, 2015, 18:44:52
от madmasles
11 Ответов
2890 Просмотров
Последний ответ Декабрь 06, 2016, 21:16:00
от Anna