Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429

Ожидание устройства (чтобы программа ждала в фоновом режиме)

05.03.2012, 16:55. Показов 1684. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет! У меня вопрос, как можно сделать так что бы программа висела в памяти и ждала подключения устроства в фоновом режиме не загружая процессора.
Просто идея в тому что бы при добавлении нового устровства программа записыла об этом ифнормацию и при его удалении, как можно реализовать ожидания этого устроства?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2012, 16:55
Ответы с готовыми решениями:

Можно ли, чтобы программа сама, в фоновом режиме, работала в браузере?
Есть задумки по-поводу одной программы. Она должна сама работать в браузере без моей помощи. Может какая-то библиотечка нужна? Если это...

Чтобы при показе MsgBox программа ждала клика пользователя
Добрый день! Отображаю MsgBox, при этом нужно, чтобы программа приостановила свою работу до тех пор, пока пользователь не кликнет на...

Как сделать, чтобы программа ждала появление определенной страницы в webbrowser?
Алгоритм такой. Программа переходит по ссылке. В webbrowser открывается 1я страница (переход по карте с отсчетом времени в онлайн игре)....

6
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.03.2012, 17:01
Системный хук
0
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429
05.03.2012, 17:37  [ТС]
Вот ссылка конечно крутая
Но вопрос остается открытым, как вот именно мне надо юзать это хук.
Ну допустим я понял как установить хук и как поставить его в очередь, но например я не понимаю какой из WM_* мне нужно использовать, ведь в том списке нет ни одного указывающего на работу с внешними устроствами.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.03.2012, 18:21
Цитата Сообщение от mibin Посмотреть сообщение
в том списке нет ни одного указывающего на работу с внешними устроствами.
да, автор явно сплоховал, не предвидев вашу нужду, видимо, этот вопрос вам придется решать самостоятельно.
0
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429
05.03.2012, 18:40  [ТС]
Попробовал действовать по примеру:
Создал HOOK.dll
C++
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
61
62
63
64
#include <vcl.h>
#include <iostream.h>
 
#pragma hdrstop
#pragma argsused
 
HHOOK HookHandle;
HINSTANCE hInst;
 
LRESULT CALLBACK DevProc(int code, WPARAM wParam, LPARAM lParam);
 
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
    hInst = hinst;
    return 1;
}
 
extern "C" int HookSet()
{
    bool bSet = true;
    if (bSet) {
        if (hInst) {
            HookHandle = SetWindowsHookEx(WH_KEYBOARD, &DevProc, hInst, 0);
            if (HookHandle == NULL) return 2;
        } else return 3;
    } else UnhookWindowsHookEx(HookHandle);
    return 1;
}
 
LRESULT CALLBACK DevProc(int code, WPARAM wParam, LPARAM lParam)
{
    HWND hNote = FindWindow(NULL,"Безымянный - Блокнот");
    if(hNote == NULL)MessageBox(NULL,"Окошко та не открыто)","Ошибка",NULL);
    if(hNote) {
        switch(wParam) {
            case VK_F2:
                if(GetAsyncKeyState(VK_SHIFT))
                wprintf(L"Был поставлен хук");
                //MessageBox(hNote,"Был поставлен хук:)","Авторы",NULL);
                break;
 
            case VK_DOWN:
                if(GetAsyncKeyState(VK_SHIFT))
                    CloseWindow(hNote);
                    break;
 
            case VK_RIGHT:
                if(GetAsyncKeyState(VK_SHIFT))
                DestroyWindow(hNote);
                break;
 
            case VK_UP:
                if(GetAsyncKeyState(VK_SHIFT))
                ShowWindow(hNote,SW_MAXIMIZE);
                break;
 
            case VK_LEFT:
                if(GetAsyncKeyState(VK_SHIFT))
                OpenIcon(hNote);
                break;
            }
        }
    return CallNextHookEx(NULL, code, wParam, lParam);
}
И вот код вызова хука:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef bool (__stdcall *HOOKFCT)();
HINSTANCE DllHandle;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");
 
    DllHandle = LoadLibrary("HookDLL.dll");
    HOOKFCT hookfct = reinterpret_cast<HOOKFCT>
        (GetProcAddress(DllHandle, "_HookSet"));
    if (hookfct) wprintf(L"Hook установлен\n");
    else wprintf(L"Hook не установлен\n");
 
    wprintf(L"\nДля завершения нажмите любую клавишу...");
    getch();
    return 0;
}
но мне все время возвращает что хук не установлен, объясните пожалуйста почему так получается?

Добавлено через 9 минут
Цитата Сообщение от LK Посмотреть сообщение
да, автор явно сплоховал, не предвидев вашу нужду, видимо, этот вопрос вам придется решать самостоятельно.
Эм...прямо-таки обнадежил
И все-таки это стеб или как?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.03.2012, 18:42
mibin, это просто шутка, а более-менее продуктивная мысль в том, что этот вопрос вам придется решать самостоятельно, ну и форум, возможно, подсобит.
0
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429
06.03.2012, 18:21  [ТС]
и так!
Я смог создать хуки:
Код hook.dll
C++
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
#include <windows.h>
#include <vcl.h>
#include <Dbt.h>
 
#pragma hdrstop
#pragma argsused
 
extern "C" __declspec(dllexport) bool InstallHook(HINSTANCE hInst);
LRESULT CALLBACK DevProc(int code, WPARAM wParam, LPARAM lParam);
 
HHOOK hHook;
 
extern "C" int _libmain(HINSTANCE hinst, unsigned long reason)
{
    return 1;
}
 
extern "C" __declspec(dllexport) bool InstallHook(HINSTANCE hInst)
{
    hHook = SetWindowsHookEx(WH_CALLWNDPROC, &DevProc, hInst, 0);
    if (hHook) ShowMessage(L"Õóê óñòàíîâëåí!");
    else  ShowMessage(L"Õóê íå óñòàíîâëåí!");
}
 
LRESULT CALLBACK DevProc(int code, WPARAM wParam, LPARAM lParam)
{
    switch(wParam) {
        case DBT_CUSTOMEVENT: ShowMessage(L"YES!");
    }
    return CallNextHookEx(NULL, code, wParam, lParam);
}
Вот код вызывающей части:
C++
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HINSTANCE hDllInst;
 
typedef void __cdecl (*dll_func)(HINSTANCE hInst);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    hDllInst = LoadLibrary(L"hook.dll");
    if (hDllInst == NULL) Memo1->Lines->Add("Библиотека не загружена");
    dll_func pInstHook;
    pInstHook = (dll_func)GetProcAddress(hDllInst, "_InstallHook");
    if (!pInstHook) Memo1->Lines->Add("Не могу найти функицю");
    pInstHook(hDllInst);
}
//---------------------------------------------------------------------------
Вот блин помогие понять что мне нужно сделать что бы хук отлавливал сообщение винды о появлении нового устройства?

Добавлено через 3 часа 16 минут
И так люди дорогие, я откопал что при вставки нового устройства (флешки) мне 26 раз раз приходит сообщение от wParam = DBT_DEVNODES_CHANGES и больше никакого! блин это везде так или только у меня? че за прикол? а при удалении устройства приходит 12 сообщений этих же

Добавлено через 2 минуты
Да, кстати, выше приведенный пример Хука почему-то прибивает экплорер и несколько вешает машину, посмотри те пожалуйста может я в чем-то лоханулся?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2012, 18:21
Помогаю со студенческими работами здесь

Программа в фоновом режиме
банальный пример - вирус который висит в процесах и творит какие-то дела. как делаются такие проги? не вирусы)), а не консольные ...

Программа в фоновом режиме
Программисты, прошу помощи!! Дали вот такое задание: Создайте приложение, которое в фоновом режиме создает в указанной пользователем...

Консольная программа в фоновом режиме
Народ, как реализовать такую задумку. Нужно сделать так, что при нажатии на кнопку, запускалась программа в фоновом режиме и выполнял то,...

Программа запускается в фоновом режиме
Написал на днях, чисто для себя, программу. Запускалась на ура, но после того как я перенес ее в папку system32 (даже не спрашивайте зачем)...

Чтение клавиш. Сделать так, чтобы программа продолжала работать и не ждала ввода gerh()
Я написал программку. она ещё не готова. но вот вопрос. Как сделать так, чтоб она продолжала работать и не ждала ввода gerh() в двнном...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru