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

Фоновая работа программы

10.08.2020, 09:46. Показов 4703. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые пользователи форума. Хотел задать вопрос. Как сделать так, чтобы при нажатии комбинации клавишь, моя программа которая висит в фоне, делала определённое действие? Например – скрин. Пользователь сидит в какой-то программе и нажимает это сочитание клавишь, и на диске сохраняется скрин. Язык на котором пишу программу – PureBasic 4.51. Заранее спасибо!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2020, 09:46
Ответы с готовыми решениями:

Фоновая работа программы и возвращение к ней
Доброго времени суток. Подскажите, пожалуйста, можно ли каким-то образом запустить программу(у программы есть своя внутренняя...

Фоновая работа приложений в Метро
Случайно наткнулся на проблему, что приложение, в частности браузеры, запущенный через Метро не хотят работать в фоновом режиме. То есть,...

c++, winform, direct3d, фоновая работа
Добрый день уважаемые гуру. Пишу редактор уровней под direct3d. Оформление и интерфейс winform. Использую с++, компляция в файл с...

8
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,279
Записей в блоге: 7
10.08.2020, 10:19
Регистрация сочетания клавиш. http://www.firststeps.ru/mfc/winapi/keyb/r.php?41
Скриншот текущего окна.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
UseJPEGImageEncoder()
 
Procedure MakeScreenshotForegroundWindow()
    hWnd=GetForegroundWindow_()
    GetWindowRect_(hWnd, WindowSize.RECT)
    Width=WindowSizeRight - WindowSizeLeft
    Height=WindowSizeBottom - WindowSizeTop
    hImage = CreateImage(#PB_Any,Width,Height)
    hDC    = StartDrawing(ImageOutput(hImage))
    WndDC  = GetWindowDC_(hWnd)
    BitBlt_(hDC,0,0,Width,Height,WndDC,0,0,#SRCCOPY)
    StopDrawing()
    ReleaseDC_(hWnd,WndDC)
    ProcedureReturn hImage
  EndProcedure
  
  
SaveImage(MakeScreenshotForegroundWindow(), "C:image0.jpg",#PB_ImagePlugin_JPEG )
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 17
10.08.2020, 10:28  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Регистрация сочетания клавиш. http://www.firststeps.ru/mfc/winapi/keyb/r.php?41
А RegisterHotKey() будет работать если я окно закрою, но при этом программа будет работать в трее?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.08.2020, 10:43
Лучший ответ Сообщение было отмечено Артем Дадашьянц как решение

Решение

Цитата Сообщение от Артем Дадашьянц Посмотреть сообщение
Пользователь сидит в какой-то программе и нажимает это сочитание клавишь, и на диске сохраняется скрин.
Тут есть 2 метода, один из которых это использовать механизм установки глобального хука клавиатуры, задействовав SetWindowsHookEx. Код можно лекго найти поиском по этому названию.

И второй, который я покажу, из 10 строк уже готовой программы:

PureBasic
1
2
3
4
5
6
7
8
9
10
Repeat
  Delay(1)
  If GetAsyncKeyState_(#VK_CONTROL) & $8000 = 32768 And GetAsyncKeyState_(#VK_Q) & $8000 = 32768
     End ; выход из програмы ctrl+Q
  ElseIf GetAsyncKeyState_(#VK_CONTROL) & $8000 = 32768 And GetAsyncKeyState_(49) & $8000 = 32768
        keybd_event_(#VK_SNAPSHOT,0,0,0) ; скрин экрана ctrl + 1
        Delay(100): GetClipboardImage(1)
        SaveImage(1,"C:\Screenshot.bmp")
  EndIf
ForEver
Коды виртуальных клавиш можно посмотреть тут
У меня в коде Клавиша 1 это в HEX = 31, десятичное 49.
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 17
10.08.2020, 10:54  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
keybd_event_(#VK_SNAPSHOT,0,0,0) ; скрин экрана ctrl + 1
это вы имитируете нажатие PrintScreen?
у меня есть такая процеддура
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Procedure CaptureScreen(Left.l, Top.l, Width.l, Height.l,DiskOrClipb)
  dm.DEVMODE ;structure for CreateDC()
  srcDC.l
  trgDC.l
  BMPHandle.l
  srcDC = CreateDC_("DISPLAY", "", "", dm)
  trgDC = CreateCompatibleDC_(srcDC)
  BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
  SelectObject_( trgDC, BMPHandle)
  BitBlt_( trgDC, 0, 0, Width, Height, srcDC, Left, Top, #SRCCOPY)
  OpenClipboard_(#Null) 
  EmptyClipboard_()
  SetClipboardData_(2, BMPHandle)
  CloseClipboard_()
  DeleteDC_( trgDC)
  ReleaseDC_( BMPHandle, srcDC)
  ProcedureReturn
EndProcedure
Можно её как-то впихнуть в ваш код?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.08.2020, 11:05
Лучший ответ Сообщение было отмечено Артем Дадашьянц как решение

Решение

Цитата Сообщение от Артем Дадашьянц Посмотреть сообщение
Можно её как-то впихнуть в ваш код?
Вместо keybd_event_(#VK_SNAPSHOT,0,0,0) ; скрин экрана ctrl + 1
запишите вызов своей процедуры
CaptureScreen(Left.l, Top.l, Width.l, Height.l,DiskOrClipb)
Только смотрите, какие параметры у вас там передаются.
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 17
10.08.2020, 11:07  [ТС]
И последний вопрос - Как узнать разрешение экрана пользователя? Чтобы я мог выставить в мою процедуру ширину и высоту. И будет ли ваш код работать тогда когда я например работаю в ворде? И хочу его заскринить сочитанием клавишь?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.08.2020, 15:07
Лучший ответ Сообщение было отмечено Артем Дадашьянц как решение

Решение

Цитата Сообщение от Артем Дадашьянц Посмотреть сообщение
Как узнать разрешение экрана пользователя?
PureBasic
1
2
screenX  = GetSystemMetrics_(#SM_CXSCREEN)
screenY  = GetSystemMetrics_(#SM_CYSCREEN)
Цитата Сообщение от Артем Дадашьянц Посмотреть сообщение
будет ли ваш код работать тогда когда я например работаю в ворде?
Будет.

Артем Дадашьянц, если по каким то причинам не хотите эмуляцию PrintScreen, то возьмите код Procedure MakeScreenshotForegroundWindow() у locm, он как раз снимает скрин с активного окна, без лишнего. Как раз будет только окно Ворда.
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 17
10.08.2020, 18:00  [ТС]
Спасибо за все ответы. Про ворд то был всего лишь пример. Просто охота сделать самый просто скриншотер с сочитанием клавишь. Той процедуры что я написал мне хватит. Спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2020, 18:00
Помогаю со студенческими работами здесь

MediaPlayer, фоновая музыка замолкает при возвращении курсора в окно программы
Доброго времени суток! При покинувшем программу курсоре фоновая музыка программы работает нормально. Но когда курсор возвращается всё...

Постоянная фоновая работа скрипта пока страница открыта
суть в том, что у меня есть js скрипт, который должен работать всегда, пока пользователь видит страницу. Но страница отказывается...

Работа с файлом (корректный код, некорректная работа программы)
Для записи и чтения файла использую разные функции. По одиночке они работают нормально. Вставляю их прототипы в функцию main() и нижняя...

Автозапуск программы: прекращена работа программы
Ребята, написал не сложную программу для управления сервисом, и задал в автозапуске, но при старте пишет типичную ошибку виндовс7 что не...

Сообщение «Прекращена работа программы "Client to make VoIP calls"» во время работы программы VoipDiscount
Здравствуйте, прошу вас мне помочь. Во время программы VoipDiscount, Windows пишет "Прекращена работа программы Client to make Voip...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru