Ustawienie Foreground dla obcego procesu

Odpowiedz Nowy wątek
2015-12-30 13:51

Rejestracja: 4 lata temu

Ostatnio: 4 lata temu

0

Witam,

Piszę aplikacje i natknąłem się na pewien problem. Nie potrafię wymusić procesu aby wszedł na foreground i ZOSTAŁ tam, niezależnie od tego, co robię.

Przykład:
Mam odpalonego FireFox'a. Proces, który chciałbym mieć cały czas na foreground jest windowsowy kalkulator. Udało mi się ustawić program tak, że po jego uruchomieniu ustawia ( SetForegroundWindow() ) kalkulator na pierwszy plan, ale wystarczy, że kliknę z powrotem na FireFox'a, to kalkulator ,,chowa się" pod FireFox'a.

Efekt o który mi chodzi, wygląda podobnie do tego, jaki stosuje Skype z kamerką. Kamerkę zawsze można mieć na szczycie i nic nie jest w stanie jej zakryć.

Pozdrawiam

Pozostało 580 znaków

2015-12-30 14:10
Moderator

Rejestracja: 12 lat temu

Ostatnio: 6 godzin temu

Lokalizacja: Wrocław

Czyli chcesz mieć okno jakiegoś programu always on top?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-12-30 14:11

Rejestracja: 4 lata temu

Ostatnio: 4 lata temu

0

Tak, chcialbym miec mozliwosc ustawienia ,,always on top" wybranego procesu.

Pozostało 580 znaków

2015-12-30 14:29

Rejestracja: 4 lata temu

Ostatnio: 4 lata temu

0

Dzięki wpisowi ,,always on top" udało mi się poskładać rozwiązanie ze znalezionych fragmentów:

public class ProcessManager
{
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, uint windowStyle);

        [DllImport("user32.dll")]
        private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

       public ProcessManager()
        {
            string processName = "calc";
            SearchProcessAndModifyState(processName);
        }

        void SearchProcessAndModifyState(string targetProcessName)
        {
            Process specifiedProcess = null;
            Process[] processes = Process.GetProcesses();
            for (int i = 0; i < processes.Length; i++)
            {
                Process process = processes[i];
                if (process.ProcessName == targetProcessName)
                {
                    specifiedProcess = process;
                    break;
                }
            }
            if (specifiedProcess != null)
            {
                ProcessManager.ShowWindow(specifiedProcess.MainWindowHandle, 1u);
                ProcessManager.SetWindowPos(specifiedProcess.MainWindowHandle, new IntPtr(-1), 0, 0, 0, 0, 3u);
            }
        }
    }

Dzięki za wskazówkę ;3 Nie miałem pojęcia jak szukać czegoś na ten temat (foreground endless loop był jednym z ciekawszych wpisów na google;D).

edytowany 2x, ostatnio: qbol, 2015-12-30 14:38

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0