Форум: "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