Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70

Открыто ли окно?

26.10.2024, 09:48. Показов 783. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как определить открыто ли окно? Например, Блокнот?
Я так понимаю, что надо использовать Result = IsWindow(#Window). Но что подставить в качестве #Window?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.10.2024, 09:48
Ответы с готовыми решениями:

Как проверить открыто ли окно?
Podskazite, kak proverit otkrito li okno ili net? Spasibo! Inessa

Проверить, открыто ли окно чужого приложения
Как проверить открыто ли окно? -активировать -иначе действие

Как проверить, открыто ли определенное окно (файл)
как прорверить открыто окно(файл) или нет... если да то... если нет то.... зарание благодарен

16
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
26.10.2024, 15:24
Лучший ответ Сообщение было отмечено winkot как решение

Решение

Нужно перечислить все окна других приложений и найти нужное окно по заголовку (должно быть слово Блокнот) или по имени процесса (notepad.exe).
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Procedure EnumProcedure(hWnd, *Parameter.Integer)
  Protected Title.s{1024}, Res = #True
 
  If GetWindowText_(hWnd, @Title, 1024) > 0
    If FindString(LCase(Title), "блокнот")
      Res = #False
      *Parameter\i = #True
    EndIf
  EndIf
  ProcedureReturn Res
EndProcedure 
 
IsNotepad = #False
EnumWindows_(@EnumProcedure(), @IsNotepad)
 
If IsNotepad
  Debug "Окно блокнота найдено"
Else
  Debug "Окно блокнота не найдено"
EndIf
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Structure ProcInfo
  Name.s
  PID.l
EndStructure
 
Global NewList ProcList.ProcInfo()
 
Procedure ProcessList() ; Список процессов.
  Protected pe32.PROCESSENTRY32
  Protected hthSnapshot
  
  pe32\dwSize = SizeOf(PROCESSENTRY32)
  ClearList(ProcList())
  
  hthSnapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If hthSnapshot
    Process32First_(hthSnapshot, @pe32) 
    While Process32Next_(hthSnapshot, @pe32) 
      If AddElement(ProcList())
        ProcList()\Name = LCase(PeekS(@pe32\szExeFile))
        ProcList()\PID  = pe32\th32ProcessID
      EndIf
    Wend 
    CloseHandle_(hthSnapshot)
  EndIf
  
EndProcedure
 
Procedure EnumProcedure(hWnd, *Parameter.Integer)
  Protected Title.s{1024}, Res = #True, PID, ProcName.s
  If GetWindowText_(hWnd, @Title, 1024) > 0
    If GetWindowThreadProcessId_(hWnd, @PID)
      
      ProcName=""
      ForEach ProcList() ; Поиск окна которому принадлежит процесс.
        If ProcList()\PID = PID
          ProcName = ProcList()\Name
          Break
        EndIf
      Next
      
      If ProcName="notepad.exe"
        Res = #False
        *Parameter\i = #True
      EndIf
    EndIf
  EndIf
  ProcedureReturn Res
EndProcedure 
 
ProcessList() ; Список процессов.
 
IsNotepad = #False
EnumWindows_(@EnumProcedure(), @IsNotepad)
 
If IsNotepad
  Debug "Окно блокнота найдено"
Else
  Debug "Окно блокнота не найдено"
EndIf
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
26.10.2024, 18:10  [ТС]
Спасибо! То, что надо. А есть ли возможность управлять найденным окном? Например, сделать его активным, послать ему нажатие Enter или другую клавиатурную команду?
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
26.10.2024, 20:29
Лучший ответ Сообщение было отмечено winkot как решение

Решение

Автоматизацию окон проще будет сделать через библиотеку PureAutoIt.
Запуск блокнота и активация его окна.
PureBasic
1
2
3
4
5
6
7
8
9
10
XIncludeFile "PureAutoIt.pbi"
UseModule PureAutoIt
 
; Run Notepad
Run("notepad.exe")
; Wait 10 seconds for the Notepad window to appear.
hWnd.s = Str(WinWait("[CLASS:Notepad]", "", 10))
 
; Activate the Notepad window using the handle returned by WinWait.
WinActivate(hWnd)
Ввод текста.
PureBasic
1
2
3
4
5
6
7
8
9
10
XIncludeFile "PureAutoIt.pbi"
UseModule PureAutoIt
 
; Run Notepad
Run("notepad.exe")
; Wait 10 seconds for the Notepad window to appear.
WinWait("[CLASS:Notepad]", "", 10)
 
; Simulate entering the following string and pressing the 'F5' key to input the date and time into edit control of Notepad.
Send("Текущие время и дата {F5}{Enter}")
Вложения
Тип файла: zip PureAutoIt.zip (168.8 Кб, 16 просмотров)
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
27.10.2024, 18:48  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
PureAutoIt.zip (168.8 Кб, 6 просмотров)
Подскажите, пожалуйста, как установить эту библиотеку в PureBasic.
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
27.10.2024, 20:25
Лучший ответ Сообщение было отмечено winkot как решение

Решение

Ее не нужно устанавливать.
Из архива копируете файлы PureAutoIt.pbi, PureAutoItW.obj и PureAutoItW64.obj в папку куда сохранили файл с кодом.
Вложения
Тип файла: 7z PureAutoIt.7z (181.4 Кб, 20 просмотров)
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
27.10.2024, 20:35  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Из архива копируете файлы PureAutoIt.pbi, PureAutoItW.obj и PureAutoItW64.obj в папку куда сохранили файл с кодом.
А XIncludeFile и UseModule PureAutoIt надо в коде прописывать?
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
27.10.2024, 20:51
Цитата Сообщение от winkot Посмотреть сообщение
А XIncludeFile и UseModule PureAutoIt надо в коде прописывать?
Да.
XIncludeFile подключает другой исходный файл к текущему.
UseModule позволяет использовать содержимое из указанного пространства имен без обязательного указания имени. Без последнего можно обойтись, но тогда придется указывать имя модуля.
PureBasic
1
2
3
4
5
6
7
8
XIncludeFile "PureAutoIt.pbi"
 
; Run Notepad
PureAutoIt::Run("notepad.exe")
; Wait 10 seconds for the Notepad window to appear.
hWnd.s = Str(PureAutoIt::WinWait("[CLASS:Notepad]", "", 10))
; Activate the Notepad window using the handle returned by WinWait.
PureAutoIt::WinActivate(hWnd)
А если открыть файл PureAutoIt.pbi и скопировать его содержимое, а после вставить в файл с кодом, то можно и без XIncludeFile обойтись.
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
27.10.2024, 21:13  [ТС]
AutoIt язык интерпретируемый. Что же получается когда мы используем его в PureBasic? Функции AutoIt вставляются в exe файл вместе с интерпретатором?
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
27.10.2024, 21:23
Цитата Сообщение от winkot Посмотреть сообщение
Что же получается когда мы используем его в PureBasic? Функции AutoIt вставляются в exe файл вместе с интерпретатором?
Нет. От AutoIt только название, т. к. функции максимально похожи (имена и назначение). В остальном никакой связи нет.
Просто откройте файл в любом текстовом редакторе и посмотрите его.
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
27.10.2024, 21:33  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
От AutoIt только название
Что то я совсем запутался. Т.е. это только имитация AutoIt? Это просто функции? написанные на PB по синтаксису похожем на AutoIt? Но почему же тогда exe файл с одной лишь функцией от AutoIt весит 1Мб, в то время как файл с такой же функцией на PB весит 200 кБ?
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
27.10.2024, 21:45
Цитата Сообщение от winkot Посмотреть сообщение
Это просто функции? написанные на PB по синтаксису похожем на AutoIt?
Да.
Цитата Сообщение от winkot Посмотреть сообщение
Но почему же тогда exe файл с одной лишь функцией от AutoIt весит 1Мб, в то время как файл с такой же функцией на PB весит 200 кБ?
AutoIt интерпретируемый и exe файл содержит интерпретатор и все функции, а не только те что используются. То есть в exe файл добавляется исходный код который выполняется при запуске.
PureBasic компилируемый и exe файл создается из исходного кода и в нем только используемые функции, а не все. Тем самым размер напрямую зависит от кода.
0
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
28.10.2024, 09:06  [ТС]
Наверное я не точно задал вопрос. Я имел виду несколько иное. Создаю простейшую функцию Beep. Если это сделать средствами PB, то получится такой скрипт:
Code
1
Beep_(500,1000)
В скомпилированном виде exe файл весит 143 кБ. Если такую же функцию реализовать с помощью PureAutoIt то получится скрипт:
Code
1
2
3
4
5
6
XIncludeFile "PureAutoIt.pbi"
UseModule PureAutoIt
 
; plays back a beep noise, at the frequency 500 for 1 second
 
Beep(500, 1000)
В скомпилированном виде он весит 546 Кб. Почему же такая разница? Если исходить из того, что PureAutoIt использует те же функции, что и сам PB и только изменяет их синтаксис, то такой разницы не должно быть. А она есть.
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
28.10.2024, 13:23
Цитата Сообщение от winkot Посмотреть сообщение
В скомпилированном виде exe файл весит 143 кБ.
Если компилировать версии 6.04 или более ранней, размер 2 КБ если это имеет значение.

Цитата Сообщение от winkot Посмотреть сообщение
В скомпилированном виде он весит 546 Кб.
В исполняемый файл попадают и другие функции из PureAutoIt.pbi.
Из-за них увеличивается размер.
Вложения
Тип файла: 7z Beep_API.7z (722 байт, 15 просмотров)
1
 Аватар для winkot
0 / 0 / 0
Регистрация: 26.10.2024
Сообщений: 70
28.10.2024, 15:40  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
В исполняемый файл попадают и другие функции из PureAutoIt.pbi.
Из-за них увеличивается размер.
Спасибо! Теперь ясно.
Цитата Сообщение от locm Посмотреть сообщение
Если компилировать версии 6.04 или более ранней, размер 2 КБ
Вот это вы меня удивили! Я пользуюсь PB 6.12 и, соответственно, его же компилятором. А можно скачать отдельно компилятор версии 6.04? И еще вопрос - что же такое и ради чего разработчики сделали в более поздних компиляторах, что размер исполняемого файла увеличился в 70 раз(!) ? И ради чего это сделали?
0
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
28.10.2024, 18:27
Цитата Сообщение от winkot Посмотреть сообщение
А можно скачать отдельно компилятор версии 6.04?
На официальном сайте в музее версий или на рутрекере.

Цитата Сообщение от winkot Посмотреть сообщение
что же такое и ради чего разработчики сделали в более поздних компиляторах, что размер исполняемого файла увеличился в 70 раз(!) ?
https://www.purebasic.fr/blog/?p=538
Если кратко, для добавления новых функций потребовалась более свежая версия Си рантайма. Раньше она подключалась динамически (MSVCRT.dll) что существенно уменьшало размер, а начиная с версии 6.10, подключается статически.
1
Эксперт по электронике
6190 / 2884 / 311
Регистрация: 28.10.2011
Сообщений: 11,107
Записей в блоге: 6
28.10.2024, 19:45
Адаптировал файл PureAutoIt.pbi под C backend.
Размер немного меньше стал. Файл с вызовом функции Beep имеет размер 33 КБ, а не 390 КБ.
Вложения
Тип файла: 7z PureAutoIt_C_backend.7z (156.8 Кб, 20 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2024, 19:45
Помогаю со студенческими работами здесь

Отключить окно, когда другое окно открыто
Добрый день. Вот есть у меня окно с кнопкой, по нажатию на кнопку открывается другое окно! I wish что бы открывающиеся окно всегда...

Открыто ли окно...
Всем привет! Надо проверить открыто ли окно (From1 например), буду рад узнать как это делается. Спасибо!

открыто ли дочернее окно...
Доброго времени суток, у меня такой вопрос: как проверить открыто ли MDI дочернее окно? p.s. смысл в том, чтобы при повторном нажатии...

Как определить открыто ли окно?
Как определить видит ли пользователь окно, то есть активно ли окно?

Проверить открыто ли окно формы
Есть две формы независимые друг от друга. Как проверить в одной форме открыта ли вторая?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Разработка плагина для Minecraft
Javaican 09.06.2025
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit. . .
Dapper - лучший среди микроORM под C#
UnmanagedCoder 09.06.2025
Знаете, в мире ORM-инструментов для . NET существует негласная иерархия. На вершине массивных фреймворков возвышается Entity Framework - неповоротливый, но всемогущий. А в категории легковесных. . .
Сравнение GCC 14 и Clang 18 компиляторов C для HPC
bytestream 08.06.2025
В высокопроизводительных вычислениях (HPC) выбор компилятора - это ход, способный радикально изменить производительность всей системы. Работая последние 15 лет с критическими HPC-системами, я видел. . .
Всё о конфигурации ASP.NET Core
stackOverflow 08.06.2025
Старый добрый web. config, похоже, отправился на пенсию вместе с классическим ASP. NET. За годы работы с различными проектами я убедился, что хорошо организованная конфигурация – это половина успеха. . .
dev-c++5.11 Продолжаю движение.
russiannick 08.06.2025
Казалось, день прошел впустую. Просмотрел кучу видео и только потом заметил заголовок - уроки си. Искусители сбивали новичка с пути с++. Так легко ошибиться когда вокруг столько яп содержащих в. . .
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам где: . dev обязательно присутствует . cpp/ . c один из них. . .
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »