Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
kuzmenko5
0 / 0 / 0
Регистрация: 16.09.2010
Сообщений: 33
1

как сделать программно чтобы программа была постоянно на заднем плане

16.09.2010, 01:46. Просмотров 1118. Ответов 4
Метки нет (Все метки)

Суть вопроса
как сделать программно чтобы программа была постоянно на заднем плане?
Пишу экранную клавиатуру, как делать имитацию нажатия кнопок я разобрался, но загвоздка в том что при нажатии на кнопку программа выходит на передний план! и нажатая кнопка посылается в мою клавиатуру, а не в в то окно что нужно)
Если ляпнул какую-то глупость извиняюсь и прошу помочь))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2010, 01:46
Ответы с готовыми решениями:

Как сделать так, чтобы программа не компилилась, хотя синтаксически была бы правильной?
Друзья! Дело в следующем, вот у меня есть функции X и Y. И вот мне не хотелось...

Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна
Написал простенький кликер на с++, который в игре нажимает кнопочки от 1 до 9,...

Как сделать чтобы функция была видна из .cpp файла?
У меня есть 3 файла: main.cpp, 1.h, 1.cpp. Все делаю по книге, но получается...

как сделать так чтобы была возможность записывать и фамилию и имя,а то у меня только до пробела читает?
здраствуйте!скажите пож-та как сделать так чтобы была возможность записывать и...

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат?
Доброго времени суток! Есть код класса и хотелось бы устранить в нем следующие...

4
Andrew_Lvov
Эксперт С++
260 / 190 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
16.09.2010, 03:02 2
Почитай про WM_ACTIVATEAPP
Тебе нужно, по большому счёту, выяснить, какая программа была активна перед клавиатурой и выслать программе мессагу - предполагаю через PostThreadMessage().
Всё ИМХО - так, как бы пробовал делать я.
1
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
16.09.2010, 14:30 3
Extended Window Styles
Флажок ему WS_EX_NOACTIVATE - и всё.
1
kuzmenko5
0 / 0 / 0
Регистрация: 16.09.2010
Сообщений: 33
18.09.2010, 02:28  [ТС] 4
а можно поподробней как это сделать в билдере, а не MV (пишу в с++ ред студио 2010)
клаву использую стандартную TTouchKeyboard
но загвоздка все в том же, код кнопки оно передает в активное окно которым является сама программа

а вот как сделать что бы передавало куда нужно так и не понял((( может примерчиком поможите)
0
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
18.09.2010, 15:30 5
В чём проблема - как флажок ставить или что?
C++
1
2
SetWindowLong(Form1->Handle, GWL_EXSTYLE,
    GetWindowLong(Form1->Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
После этого окно не должно становиться активным от нажатия кнопок в нём (но остальными способами сделать его активным можно).
Пример есть на Delphi/WinAPI - кнопка Enter сверху на экране:
Delphi
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
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_TYPE OFF}
 
uses
    Windows, Messages;
 
const
    WndClassName = 'MouseEnter';
 
var
    WndClass: WNDCLASSEX;
    hMainWnd: HWND;
    Mess: MSG;
    MaxX, Height: Integer;
 
function WindowProc(hWnd: HWND; Msg, WParam, LParam: LongInt): LongInt; stdcall;
begin
    Result := 0;
    case Msg of
        WM_DESTROY:
            PostQuitMessage(0);
        WM_COMMAND:
        begin
            keybd_event(VK_RETURN, 0, 0, 0);
            keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
        end;
        else
            Result := DefWindowProc(hWnd, Msg, WParam, LParam);
        end;
end;
 
begin
    with WndClass do
    begin
        cbSize := SizeOf(WndClass);
        Style := 0;
        lpfnWndProc := @WindowProc;
        hInstance := SysInit.hInstance;
        hIcon := LoadIcon(0, IDI_EXCLAMATION);
        hCursor := LoadCursor(0, IDC_ARROW);
        hbrBackground := GetStockObject(WHITE_BRUSH);
        lpszMenuName := nil;
        lpszClassName := WndClassName;
    end;
    RegisterClassEx(WndClass);
    MaxX := GetSystemMetrics(SM_CXFULLSCREEN);
    Height := GetSystemMetrics(SM_CYCAPTION);
    hMainWnd := CreateWindowEx(
        WS_EX_TOOLWINDOW or WS_EX_TOPMOST or WS_EX_NOACTIVATE or WS_EX_LAYERED,
        WndClassName, 'MouseEnter', WS_VISIBLE or WS_POPUP,
        MaxX * 85 div 100, 0, 50, Height, 0, 0, hInstance, nil);
    CreateWindowEx(0, 'Button', 'Enter', WS_VISIBLE or WS_CHILD,
        -1, -1, 52, Height + 2, hMainWnd, 0, hInstance, nil);
    SetLayeredWindowAttributes(hMainWnd, 0, 128, LWA_ALPHA);
    while GetMessage(Mess, 0, 0, 0) do
        DispatchMessage(Mess);
end.
1
18.09.2010, 15:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2010, 15:30

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

Как сделать что бы программа всегда была "поверх" всех окон
какую команду в скрипте нужно ввести, что бы программа была по верх всех окон? ...

рабочая программа. но нужно ее переписать так, чтобы она была наиболее общей.
Задана матрица смежности размерности N*M. С помощью процедуры и матрицы меньшей...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru