2016-07-09 4 views
-1

Ich brauche mein Formular vor einer Anwendung. Die üblichen Methoden funktionieren jedoch nicht.Eine andere Anwendung erzwingen SendToBack

Methoden bereits versucht

//method #1 

PostMessage(HD, WM_USER, 0, 0); 
SetWindowPos(HD, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); 


//method #2 
dwThreadID := GetWindowThreadProcessId(HD, nil); 
dwCurrentThreadID := GetCurrentThreadId; 
AttachThreadInput(dwCurrentThreadID, dwThreadID, true); 
BringWindowToTop(Aff.handle); 
ShowWindow(Aff.handle, SW_SHOW); 

Anwendung in Frage enter image description here

Kommentare

Die betreffende Anwendung funktioniert nur im Vollbildmodus.

Ich möchte nicht vollständigen Code, nur einen Weg nach vorn.

Entschuldigung für mein schlechtes Englisch und danke für Ihre Zeit.

+0

Haben Sie Formstyle = fsStayOnTop? –

+0

Ja und funktionieren nicht nur mit dieser App – 3V3LYN

+1

Erhalten Sie einen guten Griff in HD? – GolezTrol

Antwort

0

Sie setzen Ihr Formular nach unten. Um es oberste:

SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); 

Ein weiterer Ansatz, wenn Sie wirklich zwingen wollen Sie externe Anwendung auf den Hintergrund müssen den Griff zu bekommen. Zum Beispiel, wenn eine solche Anwendung wird calc genannt:

hCalc := FindWindow('calc', nil); 
SendMessage(hCalc , WM_SYSCOMMAND, SC_MINIMIZE, 0); // you can also minimize the application 
SetWindowPos(hCalc , HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); 
+0

Danke für die Hilfe versuchen, aber nicht funktioniert. die anwendung ist vor allem um den aufgabenmanager zu öffnen er kann nicht im fokus bleiben ist immer wieder da. – 3V3LYN

+0

Sie haben also eine Anwendung, die auch dann oben bleibt, wenn der Task-Manager an die gleiche Position verschoben wird? –

+0

Haben Sie Ihre Anwendung in VMWare Player und erwarten Sie, dass sie sich auf einer anderen Anwendung befindet, die sich nicht in derselben virtuellen Umgebung befindet? Vielleicht könnte ein vollständiger Screenshot die Situation erklären. –

0

Sie können dies versuchen:

function ForceForegroundWindow(AHandle: THandle): Boolean; 
var 
    Input: TInput; 
begin 
    Result := True; 

    ZeroMemory(@Input, SizeOf(Input)); 
    SendInput(1, Input, SizeOf(Input)); 
    SetForegroundWindow(AHandle); 
end; 

Credits Sertac Akyuz aus (How to bring my application to the front?)

+0

Vielen Dank für den Versuch, Hilfe. aber nicht arbeiten '-' – 3V3LYN

+1

Bitte kredit .. –

+1

[Hier] (http://stackoverflow.com/a/12950454/243614). –