Главная страница
    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.071 c
3-1098244796
ИМХО
2004-10-20 07:59
2004.11.28
Отчеты и Access


4-1097666532
Comp
2004-10-13 15:22
2004.11.28
TPrintDlg


14-1100179330
peypivo
2004-11-11 16:22
2004.11.28
Джава и ЖПРС


4-1098156661
Боян Георгиев
2004-10-19 07:31
2004.11.28
Как узнать если процес запущен


6-1095849884
Cherepovets
2004-09-22 14:44
2004.11.28
Организация копирование по сети





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский