Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/22: Рейтинг темы: голосов - 22, средняя оценка - 5.00
13 / 12 / 3
Регистрация: 19.09.2009
Сообщений: 179
1

Обработка SendMessage

14.01.2010, 09:45. Показов 4242. Ответов 4
Метки нет (Все метки)

Всем Привет...Подскажите как можно реализовать обработку сообщений SendMessage поступающих в форму...? (Форма на API)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2010, 09:45
Ответы с готовыми решениями:

SendMessage();
Нужно с эмулировать нажатие 2 кнопок на клавиатуре. Как этом можно реализовать? Подскажите...

sendmessage
есть такой пример функции sendmessage(h,wm_settext,0,lparam(lpctstr('имя'))); как есго...

SendMessage
Товарищи, помогите разобраться с SendMessage в потоках. Вот что пытаюсь скомпилить procedure...

SendMessage
Доброе время суток!!! Вопрос: знает ли кто-нидь как сгенерировать сообщение в систему, которые...

4
233 / 95 / 15
Регистрация: 31.12.2009
Сообщений: 224
14.01.2010, 12:32 2
Если форма на API, т.е. создана через CreateWindowEx или её обёртки, то в программе должен присутствовать так называемый основной цикл выборки сообщений, а реакцию на эту выборку должна обрабатывать оконная функция. Подробнее объяснить в 2-х словах не получится. Может быть поможет код? Если да, пишите, выложу что-нибудь из своего архива.
0
13 / 12 / 3
Регистрация: 19.09.2009
Сообщений: 179
14.01.2010, 13:26  [ТС] 3
Чёрный Медведь, если можно, было бы не плохо...)
0
233 / 95 / 15
Регистрация: 31.12.2009
Сообщений: 224
18.01.2010, 09:12 4
Вот Вам болванка, пользуйтесь

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
program Thrust;
uses
  Windows,
  Messages;
 
const
  WndClassName = 'ThrustWindow';
  Title = 'Thrust';
var
  // глобальные переменные
  WC: TWndClass;
  hWindow: HWND;
  WindowHeight,
  WindowWidth: Integer;
  DC: HDC;
  Msg: TMsg;
  hFont: DWORD;
  MutexHandle: DWORD;
 
 
//------------------------ Оконная процедура -----------------------------------
function MainWndProc(hWin: HWND; MsgId: UINT; wParam: wParam;
   lParam: lParam): LRESULT; stdcall;
var
  MenuItem: BYTE;
begin
  case MsgId of
    WM_CREATE:
    begin
    end;
 
    WM_DESTROY:
    begin
      PostQuitMessage(0);
      Result := 0;
    end;
 
    WM_KEYDOWN:
    begin
      case wParam of
        VK_ESCAPE: PostQuitMessage(0);
        VK_SPACE: MessageBox(hWindow, 'Нажата клавиша SPACE', 'Тест', 0);
      end;
      Result := 0;
    end;
 
  else
    Result := DefWindowProc(hWin, MsgId, wParam, lParam);
  end;
end;
//------------------------------------------------------------------------------
 
// Проверка на запущенную копию программы
function AlreadyStarted: Boolean;
begin
  if OpenMutex(MUTEX_ALL_ACCESS, false, 'PourerMutex') <> 0 then Result := true
  else
  begin
    Result := false;
    MutexHandle := CreateMutex(nil, false, 'PourerMutex');
  end;
end;
 
begin
  if AlreadyStarted then
  begin
    MessageBox(0, 'Программа уже запущена!', PChar(Title), MB_ICONERROR);
    ExitProcess(0);  // Если мы уже запущены, то выходим
  end;
 
  WC.lpszClassName := PChar(WndClassName);
  WC.lpfnWndProc   := @MainWndProc;
  WC.Style         := CS_HREDRAW or CS_VREDRAW;
  WC.hInstance     := hInstance;
  WC.hIcon         := 0;
  WC.hCursor       := LoadCursor(0, IDC_ARROW);
  WC.hbrBackground := CreateSolidBrush($000000);
//  WC.hbrBackground := CreateSolidBrush($00ffffff);
  WC.lpszMenuName  := nil;
  WC.cbClsExtra    := 0;
  WC.cbWndExtra    := 0;
 
  // регистрируем класс окна
  if RegisterClass(WC) = 0 then
  begin
    MessageBox(0, 'Ошибка регистрации класса окна.' + #13 + #10 +
    'Программа будет закрыта.', PChar(Title), MB_ICONERROR);
    ExitProcess(0);
  end;
 
  // получаем ширину и высоту экрана
  WindowWidth := GetSystemMetrics(SM_CXSCREEN);
  WindowHeight := GetSystemMetrics(SM_CYSCREEN);
 
  // создаём окно
  hWindow := CreateWindow(
    WndClassName,
    Title,
    WS_CLIPCHILDREN or WS_CLIPSIBLINGS or WS_POPUP,
//    WS_CLIPCHILDREN or WS_CLIPSIBLINGS,
    0,
    0,
    WindowWidth,
    WindowHeight,
    0,
    0,
    hInstance,
    nil);
 
  // если не удалось, то выходим
  if hWindow = 0 then
  begin
    MessageBox(0, 'Ошибка создания главного окна.' + #13 + #10 +
     'Программа будет закрыта.', PChar(Title), MB_ICONERROR);
    ExitProcess(0);
  end;
 
  // создаём шрифт
  hFont := CreateFont(20, 0, 0, 0, FW_SEMIBOLD, 0, 0, 0, DEFAULT_CHARSET,
    OUT_STRING_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH,
//    'FixedSys');
    'Courier');
 
  // если не удалось, то выходим
  if hFont = 0 then
  begin
    MessageBox(0, 'Ошибка создания шрифта.' + #13 + #10 +
     'Программа будет закрыта.', PChar(Title), MB_ICONERROR);
    ExitProcess(0);
  end;
 
  // показываем окно
  ShowWindow(hWindow, SW_SHOW);
 
  // стандартный опрос очереди сообщений Windows
  while GetMessage(Msg, 0, 0, 0) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
 
  // деинициализируем OpenGL
  ReleaseMutex(MutexHandle);
  ExitProcess(Msg.wParam);
end.
Надеюсь пригодится
2
13077 / 5862 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
18.01.2010, 13:32 5
Если требуется обрабатывать определённые сообщения, посылаемые окну - для этого в Delphi есть специальный механизм:
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
...
type
 
  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
    ...
    //Объявляем процедуру, которая будет вызываться для обработки сообщений WM_TIMER.
    procedure WMTimer(var aMsg : TWMTimer); message WM_TIMER;
  public
    { Public declarations }
    ...
  end;
...
implementation
...
procedure TForm1.WMTimer(var aMsg: TWMTimer);
begin
  ...
  Memo1.Lines.Add(TimeToStr(Time) + ': Очередное сообщение от таймера обработано.')
end;
...
end.
Полностью код можно посмотреть здесь. Аналогично создаются обработчики для любых других сообщений.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2010, 13:32

Sendmessage
Здравствуйте, не могли бы вы обьяснить мне как пользоваться Sendmessage, какие модули нужно...

SendMessage не работает
Есть такой код: procedure TForm1.Button1Click(Sender: TObject); var hProcess:Hwnd;...

Sendmessage мышь
sendMessage(Wnd, WM_LBUTTONDOWN, x,y); sendMessage(Wnd, WM_LBUTTONUp, x,y); не проходят, хендл...

Delphi и SendMessage
пишу флудер для отправки сообщений в игру. procedure TForm1.Button1Click(Sender: TObject); var ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru