Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 10:26   #11
Ragnarek45
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 14
По умолчанию

Код:
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var app: HWND;
     c: longint;
begin
  if code = HC_ACTION then
  begin
  if TMsg(Pointer(lParam)^).message = WM_COMMAND then
    begin
    app := GetForegroundWindow();

    c := GetWindowLong(app, GWL_ID);
    if c = ID_OK then
       MessageBox(0, 'OK', 'MESS', 0);

    end;

  end;
  Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
end;
c := GetWindowLong(app, GWL_ID); возвращает числовое значение и вообще это дескриптор...а он как я полагаю меняется регулярно...как там может быть if c = ID_OK then? Как узнать по caption какая кнопка нажата? Или по дескриптору?

Реализовал вот так:
Код:
 begin
  if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
    begin
    app := GetForegroundWindow();
    d:=FindWindowEx(app,0,'TButton','Снять');
    if d <> 0 then
    begin
   ....
У меня там два поля TEdit как их различить? и как узнать их значения?
-------------------------------------------------------------------------
Неправильно нефига =( получается что я могу в любом месте кликнуть мышкой и код начнет выполняться. Потому что условия поиска кнопки выполняются =(

Последний раз редактировалось Ragnarek45; 07.12.2010 в 13:17.
Ragnarek45 вне форума Ответить с цитированием
Старый 07.12.2010, 14:53   #12
Ragnarek45
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 14
По умолчанию

Код:
if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
    begin
    app:=GetForegroundWindow();
    d:=FindWindowEx(app,0,nil,'Внести');
    getcursorpos(cursor);
    hand:=WindowFromPoint(d,cursor);
    if hand=d then
И почему выполняется условие даже если активно другое окно и курсор не на этой кнопке?
--------------------------------------------------------------------------------------------
Решено так:
Код:
if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
    begin
    app:=GetForegroundWindow();
    d:=FindWindowEx(app,0,nil,'Внести');
    getcursorpos(cursor);
    hand:=WindowFromPoint(cursor);
    if d=0 then d:=777;
    if hand=0 then hand:=666;

    if d=hand then
 begin
      d1:=getwindow(app,GW_CHILD);
      sendmessage(d1, WM_SETTEXT, 0, longword(pchar('ываываыва')));
      d2:=getwindow(app,GW_HWNDNEXT);
      sendmessage(d2, WM_SETTEXT, 0, longword(pchar('фывафыафыа')));
      d3:=getwindow(app,GW_HWNDFirst);
      sendmessage(d3, WM_SETTEXT, 0, longword(pchar('aaaaaaaaa')));
Почему то не могу найти первое поле Tedit, на второе посылается по GW_CHILD, а первое вообще пустует..хм

Последний раз редактировалось Ragnarek45; 07.12.2010 в 15:42.
Ragnarek45 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как у Inputbox узнать, что была нажата кнопка Сancel? Artem Компоненты Delphi 2 02.04.2011 23:31
Как узнать нажата ли кнопка(Button) в чужом приложении? progan Win Api 7 13.01.2011 09:08
как узнать, нажата ли кнопка мыши? Juffin Общие вопросы Delphi 1 20.05.2010 20:16
Как узнать была ли нажата кнопка? SanSanblch Win Api 3 20.12.2009 01:15