На главную Наши проекты:
Журнал   ·   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
  
> Как опеределить Handle чужого приложения?
    Привет всем!
    Извините, если данная тема уже поднималась на форуме.

    Вопрос такой: Я знаю Handle формы, как теперь мне определить Handle приложения?
      Цитата
      Функция GetParent

      Описание:
      function GetParent(Wnd: HWnd): HWnd;

      Считывает описатель pодительского окна данного окна.

      Паpаметpы:
      Wnd: Идентификатоp окна.

      Возвpащаемое значение:
      Идентификатоp pодительского окна; 0 - если pодительское окно отсутствует.

      оно? :unsure:
      Сообщение отредактировано: Аэтерос Дельфийский -
        Давайте я по другому объясню...
        Некая программа свернута в трей...
        И мне нужно при нажатии на кнопку в моей программе развернуть эту программу... Проблема в этом, что в той программе несколько окон и я не могу точно определить какое окно в данный момент открыта...
          GetProcessHandleFromHwnd -- принимает хендел окна. НО это появилось только в Vista.
            GetWindowThreadProcessId
            пример использования:
            ExpandedWrap disabled
              uses PSAPI;
              ...
              function GetProcNameByHWND(AHWND: THandle): string;
              var
                lProcID, lProcH, lLen: Cardinal;
              begin
                Result := '';
                if (AHWND = 0) or
                   not IsWindow( AHWND ) then Exit;
                 GetWindowThreadProcessId( AHWND, lProcID );
                 lProcH := OpenProcess( PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, lProcID );
                 if lProcH = 0 then Exit;
                 SetLength( Result, MAX_PATH );
                 lLen := GetModuleBaseName( lProcH, 0, @Result[1], MAX_PATH-1 );
                 SetLength( Result, lLen );
                 CloseHandle( lProcH );
              end;
               
              procedure TForm1.tmrTimer(Sender: TObject);
              begin
                Caption := GetProcNameByHWND(   WindowFromPoint( Mouse.CursorPos ) );
              end;
            Сообщение отредактировано: MetalFan -
              Цитата LeoTon @
              GetProcessHandleFromHwnd -- принимает хендел окна. НО это появилось только в Vista.
              Причём специально, чтобы проги не шли под WinXP.
                Цитата ors_archangel @
                Причём специально, чтобы проги не шли под WinXP.

                GetWindowThreadProcessId даст PID процесса, по которому через NtQueryInformationProcess можно получить Handle процесса.
                Это и делает пресловутый GetProcessHandleFromHwnd чтоб проги не шли под WinXP :)
                  Цитата Kuk@ @
                  при нажатии на кнопку в моей программе развернуть эту программу... Проблема в этом, что в той программе несколько окон и я не могу точно определить какое окно в данный момент открыта

                  GetWindowThreadProcessId - получаем ThreadID
                  EnumThreadWindows - перечисляем окна полученного ThreadID, где и решаем, какое окно развернуть.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0295 ]   [ 16 queries used ]   [ Generated: 3.05.24, 19:35 GMT ]