Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Как сделать приложение активным ?!   Найти похожие ветки 

 
AKA   (2004-10-15 02:13) [0]

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

if CreateProcess(nil,PChar("test.exe"),nil,nil,False,0,nil,PChar("c:\"),SI,PI)


 
AKA   (2004-10-15 18:47) [1]

Блин пробовал разными способами:

PostMessage(Handle, WM_ACTIVATE, 0, 0);
SendMessage(Handle, WM_ACTIVATE, WA_CLICKACTIVE, 0);
BringWindowToTop(Handle);

вот еще одно сообщение WM_ACTIVATEAPP в ее параметр входит hThread может с помощью его как ?


 
AKA   (2004-10-15 18:50) [2]

Ну или как реализовать такой вариант ?
Программа по таймеру должна становиться активной т.е. чтобы окно программы было поверх всех окон и имела фокус ???


 
AKA   (2004-10-15 19:38) [3]

Вот нашел такой вариант

Application.Minimize;
Application.Restore;
Application.BringToFront;

работает - но не устраивает то что окно сначало сворачивается ???

Есть у кого еще какие-нибудь версии ???


 
GanibalLector ©   (2004-10-15 20:00) [4]

>Как сделать приложение активным ?
if GetActiveWindow<>некоторый HWND then SetActiveWindow(некоторый HWND);


 
GanibalLector ©   (2004-10-15 20:08) [5]

2 GanibalLector  [4]
Ошибся,пардон


 
GanibalLector ©   (2004-10-15 20:10) [6]

Во,так :

var QQ:HWND;
begin
QQ:=findwindow("SciCalc",nil);
if GetForegroundWindow<>QQ then SetForegroundWindow(QQ);
end;


 
AKA   (2004-10-16 01:09) [7]

Вот список функций и сообщений которые я применял ничего не помогло !!
В лучшем случае мигал заголовок окна и все !!!

si.wShowWindow:=sw_show;
PostMessage (Handle, WM_SYSCOMMAND, SC_restore, 0);
BringWindowToTop(Handle);
si.dwFlags := STARTF_RUNFULLSCREEN;
si.wShowWindow := 4;
ARC30.Enabled:=true;
FlashWindow(Handle,true);
Showwindow(Handle,sw_show);
SetWindowPos(Handle,HWND_BOTTOM,1,1,200,200,SWP_SHOWWINDOW );
PostMessage(Handle, WM_ACTIVATE, 0, 0);
ShowWindow(Handle, SW_RESTORE);
SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
SendMessage(Handle, WM_ACTIVATE, WA_CLICKACTIVE, 0);
BringWindowToTop(Handle);
SetForegroundWindow(.Handle);
SendMessage(Handle,WM_LButtonDown,1,1);
SendMessage(Handle,WM_LButtonUP,1,1);
SendMessage(Handle, WM_ACTIVATEAPP, 0, 0);
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE);

Работает только это:
Application.Minimize;
Application.Restore;
Application.BringToFront;

Ниужеле нет никакого способа !???


 
GanibalLector ©   (2004-10-16 02:03) [8]

Работает только это
Не верю.
Вы [6] пробовали ???


 
DDA ©   (2004-10-16 16:27) [9]

тебе поможет вот это,точно


//-------------------------------
function ForceForegroundWindow(hwnd: THandle): boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
begin
if IsIconic(hwnd) then
  ShowWindow(hwnd, SW_RESTORE);

if GetForegroundWindow = hwnd then
  Result := True
else
begin
  // Windows 98/2000 doesn"t want to foreground a window when some other
  // window has keyboard focus
  if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4))
    or
    ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
    ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
    (Win32MinorVersion > 0)))) then
  begin
    // Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
    // Converted to Delphi by Ray Lischner
    // Published in The Delphi Magazine 55, page 16
    Result := False;
    ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow,
      nil);
    ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
    if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
    begin
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hwnd);
      AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
      Result := (GetForegroundWindow = hwnd);
    end;

    if not Result then
    begin
      // Code by Daniel P. Stasinski
      SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
      SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE);
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hWnd);
      SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
    end;
  end
  else
  begin
    BringWindowToTop(hwnd); // IE 5.5 related hack
    SetForegroundWindow(hwnd);
  end;

  Result := (GetForegroundWindow = hwnd);
end;
end; { ForceForegroundWindow }
//-----------------------------------------
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 ForceForegroundWindow(Application.Handle);
end;



 
AKA   (2004-10-16 21:46) [10]

НАКОНЕЦ-ТО работает !!!
ОГРОМНОЕ СПАСИБО тебе DDA !!!

Суть программы следущая:
Запускаю свою программу она проверяет себя на наличие в памяти если нет то остается работать, если есть то передает сообщение первой программе которая должна всплыть и стать активной, а вторая копия завершает свою работу !!!

Еще раз ОГРОМНОЕ СПАСИБО !!!



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1100230216
rom
2004-11-12 06:30
2004.11.28
определение результата: string или integer.


1-1100189994
jonik
2004-11-11 19:19
2004.11.28
Удаление символа конца строки в текстовом файле


4-1097946522
Viper
2004-10-16 21:08
2004.11.28
Мышь


14-1099683570
Piter
2004-11-05 22:39
2004.11.28
Непонятна работа GetWindowText


1-1100085884
chuk
2004-11-10 14:24
2004.11.28
запись в файл, ошибка