На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Как получить хандл активного окна?
    Как получить хандл активного окна в Винде?
    GetActiveWindow - возвращает только хандлы окон своего приложения, а как любое окгно перехватить на котором находиться фокус ввода.
      GetForeGroundWindow - верхнее окно
      GetActiveWindow - активное окно
      GetFocus - активный контрол.

      Для использования двух последних надо приатачить свой процесс к своему, чтобы исследуемое окно стало "своим" (AttachThreadInput)
        Цитата Song @ 15.01.04, 19:47
        GetForeGroundWindow - верхнее окно
        GetActiveWindow - активное окно
        GetFocus - активный контрол.

        Для использования двух последних надо приатачить свой процесс к своему, чтобы исследуемое окно стало "своим" (AttachThreadInput)

        GetForeGroundWindow наверно непойдет т.к. Если я ввожу текст в окно, о над ним окно с пораметром всегда повех то возврата небудет.
        AttachThreadInput а к какому процессу приоттачивать, если мне нужны все окна Винды?
          Почему все? Имеющее фокус приложение только одно!
            Цитата Song @ 15.01.04, 21:16
            Почему все? Имеющее фокус приложение только одно!

            Ну так как это одно окно перехватить?
              GetForeGroundWindow - вернёт handle этого окна (окна-родителя).
              Далее AttachThreadInput и GetFocus
                Спасибо надо попробовать.
                  >Song - GetForeGroundWindow вернет верхнее окно и необязательно с фокусом ввода (например с HWND_TOPMOST)
                  а ведь для AttachThreadInput вобще-то хэндлы не нужны, а спец. идентификаторы
                  Цитата
                  BOOL AttachThreadInput(
                  DWORD idAttach, // thread to attach
                  DWORD idAttachTo, // thread to attach to
                  BOOL fAttach // attach or detach
                  );

                  вобщем - что-то тут не так... <_<

                  Добавлено в :
                  а ну как аттач сделать понятно:
                  ExpandedWrap disabled
                    AttachThreadInput(GetWindowThreadProcessId(GetForegroundWindow,nil),GetCurrentThreadId,true);

                  но все же GetForegroundWindow - это, имхо, не то...
                    ZEE, вот тебе отрывок из моей программы:

                    ExpandedWrap disabled
                      { Процедура выполняет вставку текста в контрол}
                      Procedure TAbsentForm.CommentInsert;
                      Var Reason:String;
                          Temp:HWND;
                      Begin
                      { Дополнение 18.01.2003 }
                       Flag:=True;
                      { 18.01.2003 }
                        { Т.к. GetFocus работает для окон только текущего процесса }
                        { добавляем текущий процесс к нашему }
                       AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessId(GetForeGroundWindow,nil),True);
                        { Запрос комментария }
                      { Дополнение 18.01.2003 }
                        { Активизируем наше приоложение }
                       SetForeGroundWindow(Application.Handle);
                      { 18.01.2003 }
                       Reason:=InputBox('Ввод коментария','Введите причину удаления сообщения или оставьте пустую строку:','');
                        { Если комментарий был введён добавляем его в строку }
                       IF Reason<>'' then Reason:='[color=Red][size=1][b]Примечание: [/b][i]'+Reason+'[/i][/size][/color]';
                        { Теперь вставляем текст }
                       SendMessage(GetFocus,WM_SETTEXT,0,LongInt(PChar('[color=Red][Удалено модератором][/color]'#13#10+Reason)));
                        { Разъеденяем процессы }
                       AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessId(GetForeGroundWindow,nil),False);
                      { Дополнение 18.01.2003 }
                       Flag:=False;
                      { 18.01.2003 }
                      End;
                      ааа, все понял - я просто сразу не заметил в хелпе такую строчку
                      The GetForegroundWindow function returns the handle of the foreground window (the window with which the user is currently working)...
                      значит ответ на сабж будет всего лишь: GetForegroundWindow() - и все (даже без аттачей)
                        ZEE, GetForeGroundWindow вернёт окно-родителя!!! А ему нужен чайлдовый контрол.
                          Цитата
                          Song, 17.01.04, 10:13
                          А ему нужен чайлдовый контрол

                          я этого в вопросе не заметил что-то :huh:
                            Цитата
                            Stavros, 15.01.04, 17:24
                            возвращает только хандлы окон своего приложения, а как любое окгно перехватить на котором находиться фокус ввода.

                            Сложно представить форму с фокусом ввода в практическом смысле :)
                              да... об этом я не подумал... мне показалось надо просто найти окно у кот. где-то там на нем (все равно где) можно что-то ввести - в вопросе же не спрашивали "как че то сделать с тем окном", а всеголишь найти его...
                              ну все - зато надеюсь для Stavros'а тут инфы будет достаточно...
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0345 ]   [ 16 queries used ]   [ Generated: 8.05.24, 14:01 GMT ]