Привет всем!!! как программно свернуть чужую программу (название окна нет ) такой код не подходит Showwindow(findwindow(nil,'ОКНО'),sw_hide); может как то по имени процесса? есле можно дайте код , Спасибо заранее!!!
А зачем ты окно прячешь?? Тебе же надо свернуть. - SW_MINIMIZE Если окно не удается найти окно то получи список всех окон. которые есть в системе через EnumWindows а затем через GetWindowThreadProcessId определи к какому приложению относятся найденный окна. Таким образом сможешь найти все окна которые есть у нужного приложения. P.S. на окна UAC в Vista и W7 такое работать не будет потому что к ним вообще запрещен любой доступ (и посылка нажатия клавиши, и команды мыши и команды управления окном и эмуляция ввода) на них вообще ничего не действует. Или ошибку даёт или отказано в доступе
slesh я понимаю что такой функцией не возможно свернуть окно (findwindow), может ка то при помощи cooltray ,
Student , при помощи FindWindow ты можешь найти нужное тебе окно за именем класса. А выше ты что то ошибочное или не особо внятное сказал (в частности про cooltray).
Student , а можно уточнить, что за программа? я бы сделал так, при условии, что нам известно имя процесса: Code: [color=magenta][i]#include[/i][/color] [color=gray]<Process.au3>[/color] [color=brown]$sProcessName[/color] [color=red]=[/color] [color=gray]"notepad.exe"[/color] [color=green][i]; в этой переменной имя вашего процесса[/i][/color] [color=brown]$all_windows[/color] [color=red]=[/color] [color=darkblue][i]WinList[/i][/color][color=red]()[/color][color=green][i]; собираем в массив все окна[/i][/color] [color=blue]For[/color] [color=brown]$i[/color] [color=red]=[/color] [color=darkmagenta][i]1[/i][/color] [color=blue]to[/color] [color=brown]$all_windows[/color][color=red][[/color][color=darkmagenta][i]0[/i][/color][color=red]][[/color][color=darkmagenta][i]0[/i][/color][color=red]][/color][color=green][i]; перебираем все окна в цикле и проверяем только видимые[/i][/color] [color=blue]If[/color] IsVisible[color=red]([/color][color=brown]$all_windows[/color][color=red][[/color][color=brown]$i[/color][color=red]][[/color][color=darkmagenta][i]1[/i][/color][color=red]])[/color] [color=blue]Then[/color] [color=brown]$winPid[/color] [color=red]=[/color] [color=darkblue][i]WinGetProcess[/i][/color] [color=red]([/color][color=brown]$all_windows[/color][color=red][[/color][color=brown]$i[/color][color=red]][[/color][color=darkmagenta][i]1[/i][/color][color=red]])[/color][color=green][i]; определяем PID окна[/i][/color] [color=brown]$sCurProcessName[/color] [color=red]=[/color] [color=gray][i]_ProcessGetName[/i][/color] [color=red]([/color][color=brown]$winPid[/color][color=red])[/color] [color=green][i]; определяем имя процеса[/i][/color] [color=blue]If[/color] [color=brown]$sCurProcessName[/color] [color=red]=[/color] [color=brown]$sProcessName[/color] [color=blue]Then[/color] [color=green][i]; если имя процесса равно нашему, то[/i][/color] [color=darkblue][i]WinSetState[/i][/color] [color=red]([/color][color=brown]$all_windows[/color][color=red][[/color][color=brown]$i[/color][color=red]][[/color][color=darkmagenta][i]1[/i][/color][color=red]],[/color] [color=gray]""[/color][color=red],[/color] [color=magenta]@SW_MINIMIZE[/color][color=red])[/color] [color=green][i]; минимизируем это окно, зная его хэндл[/i][/color] [color=blue]Exit[/color] [color=green][i]; завершение работы скрипта[/i][/color] [color=blue]EndIf EndIf Next Func[/color] IsVisible[color=red]([/color][color=brown]$handle[/color][color=red])[/color][color=green][i]; самодельная функция проверки видимо ли окно[/i][/color] [color=blue]If[/color] [color=darkblue][i]BitAnd[/i][/color][color=red]([/color] [color=darkblue][i]WinGetState[/i][/color][color=red]([/color][color=brown]$handle[/color][color=red]),[/color] [color=darkmagenta][i]2[/i][/color] [color=red])[/color] [color=blue]Then Return[/color] [color=darkmagenta][i]1[/i][/color] [color=blue]Else Return[/color] [color=darkmagenta][i]0[/i][/color] [color=blue]EndIf EndFunc[/color] В этой ситуации скрипт вообще не смотрит на заголовки окон, а работает с хэндлами. Проверил на блокноте - Работает. Вариант при известном классе окна: Code: [color=brown]$hMyWindow[/color] [color=red]=[/color] [color=darkblue][i]WinGetHandle[/i][/color] [color=red]([/color][color=gray]"[CLASS:Notepad]"[/color][color=red])[/color] [color=green][i]; зная класс окна определяем его хэндл[/i][/color] [color=blue]If[/color] [color=brown]$hMyWindow[/color] [color=red]<>[/color] [color=gray]""[/color] [color=blue]Then[/color] [color=darkblue][i]WinSetState[/i][/color] [color=red]([/color][color=brown]$hMyWindow[/color][color=red],[/color] [color=gray]""[/color][color=red],[/color] [color=magenta]@SW_MINIMIZE[/color][color=red])[/color][color=green][i]; если хендл не пустой, то минимизируем[/i][/color] Естественно вместо Notepad вписать свой класс язык: AutoIt