Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
6-1095763330
KIR
2004-09-21 14:42
2004.11.28
Приписать к потоку данных его размер


1-1100622946
JIuraradg
2004-11-16 19:35
2004.11.28
Как оставить циклическую процедуру?


8-1093585257
Submarine
2004-08-27 09:40
2004.11.28
Просмотреть средствами Delphi многостраничный tif


1-1100169710
MAVOR
2004-11-11 13:41
2004.11.28
заменить


4-1098012867
volser
2004-10-17 15:34
2004.11.28
Генерация GUID





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский