Что нового

_GUICtrlListView_GetItemText на разных компах

badhabit

Новичок
Сообщения
36
Репутация
0
День добрый. Есть простейший скрипт:
Код:
#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..
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
badhabit [?]
Почему так может быть?
Пустой заголовок окна означает текущее активное окно. Вы уверены, что после сворачивания активным будет рабочий стол? ;)
Просто добавьте "заголовок" и можно даже не сворачивать
Код:
$hList = ControlGetHandle('[CLASS:Progman]', '', '[CLASS:SysListView32;INSTANCE:1]')
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
Все равно не работает...
Код:
#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

AutoIT Гуру
Сообщения
616
Репутация
205
badhabit, попробуйте так
Код:
_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
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
Не помогло. Выдает:
0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
В принципе у меня задача другая, мне нужно запустить конкретное приложение двойным кликом по его иконке (именно кликом Run\ShellExecute не подходят т.к. булет виден родительский процесс)... Может это можно сдлеать проще?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
badhabit [?]
А что у вас показывает Au3Info на вкладке Summary после перетаскивания мишени на рабочий стол?

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

badhabit

Новичок
Сообщения
36
Репутация
0
InnI сказал(а):
А что у вас показывает 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 <<<<

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

Вложения

  • processexplorer.JPG
    processexplorer.JPG
    51.9 КБ · Просмотры: 6

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
badhabit [?]
будет видно, что программа запущена скриптом
Завершите скрипт и процесс останется без родителя. Но если вам нужно продолжать скрипт, то так
Код:
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Run(''notepad.exe'')"')


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

badhabit

Новичок
Сообщения
36
Репутация
0
InnI сказал(а):
По поводу 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 <<<<
вот скрипт:
Код:
#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'')"') тоже странности.
Просто из скрипта запускает, если скомпилировать скрипт в в ехе файл - наработает, не запускается блокнот, а скрипт в фоне висит...
Код:
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Run(''notepad.exe'')"')
while True
  Sleep(1000)
WEnd

И еще вопрос, так как пока не получилось проверить... А от какого пользователя запуститься нотепад? из под того же что и скрипт или например текущего (залогининого), к примеру если ехе скрипта запустили через runas и для другого пользователя (надеюсь что-нибудь понятно))))
Т.е. задача у меня такая, чтобы после запуска блокнота было не видно ни родительского процесса (скрипта) и он был запущен типа текущем пользователем (хотя по факту его запустил скрипт (ехе), запущенный из-под другого пользователя)... Вот я и думал, что клик по ярлыку на десктопе единственный вариант...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
badhabit [?]
если скомпилировать скрипт в в ехе файл - наработает, не запускается блокнот
Нужно добавить в начало скрипта
Код:
#pragma compile(AutoItExecuteAllowed, true)


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

badhabit

Новичок
Сообщения
36
Репутация
0

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
badhabit [?]
с иконками на десктопе не ясно что делать
Вы уверены, что система, на которой не работает, именно х86, а не х64? Если х64, то скрипт нужно запускать через AutoIt3_x64.
Ну и попробуйте ещё с правами администратора запустить
Код:
#RequireAdmin
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
InnI сказал(а):
badhabit [?]
с иконками на десктопе не ясно что делать
Вы уверены, что система, на которой не работает, именно х86, а не х64? Если х64, то скрипт нужно запускать через AutoIt3_x64.
Ну и попробуйте ещё с правами администратора запустить
Код:
#RequireAdmin
А про это я не знал) да, система x64. Ок, тогда попробую и напишу результат
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
InnI сказал(а):
)) Да, сори. Но просто когда я вопрос задавал (и была моя некорректная версия скрипта) тестил дейстивтельно на двух виртуалках и обе были х86. А потом начал тестить на одной виртуалке - х86 и VPS - х64... Короче стормозил))
А можно как-нибудь сделать один универсальный ехе, чтобы он работал и на х86 и х64 и нажимал на иконку?
 
Верх