wywolanie okna na wierzch

0

witam

robie sobie taki maly programik ktory ma z jedego programu pobierac sobie dane i na ich podstawie przestawiac kursor myszki i wywolać wcisniecie lewym klawiszem na wybranym fragmencie strony www
i wszystko potrafie zrobic jednak ze moze zdazyc sie tak ze przelacze okno na inne i wtedy ni wcisnie mi na tej stronie co powinno :)
czy jest jakas funkcja wywolania okna na wierzch ?? zanim, wcisnie przycisk :)
pzdr Andrzej

0

Zaimportuj metodę:

 [DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

a potem:

System.Diagnostics.Process proc = System.Diagnostics.Process.GetProcessById(111);
SetForegroundWindow(proc.MainWindowHandle);

Oczywiście musisz znać PID albo w inny sposób wyszukać proces.

0

dzieki wilekie
+

a jest mozliwosc uzyskania procesu okreslonej zakladki

bo PID sprawdzilem w menadzerze zadan ale tam jest podany tylko dla przegladarki

pzdrAndrzej

0
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern bool SetForegroundWindow(IntPtr hWnd);
        public class WinApi
        {
            [DllImport("user32.dll")]
            public static extern int FindWindow(string ClassName, string WindowName);
            [DllImport("user32.dll")]
            public static extern uint GetWindowThreadProcessId(int hWnd, out int PID);
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string name = "iGoogle - Mozilla Firefox";
            int handle =  WinApi.FindWindow(null, name);
            int PID = 0;
            WinApi.GetWindowThreadProcessId(handle, out PID);
            System.Diagnostics.Process proc = System.Diagnostics.Process.GetProcessById(PID);
            SetForegroundWindow(proc.MainWindowHandle);
        }
    }
}

takie cos mi dziala ale tylko wtedy jak jest wlaczone na zakladce goole jak przelacze na inna to juz nie
zna ktos na to sposob ??

pzdr Andrzej

0

Pewno dlatego, że wyszukuje po tytule okna.
Procesami możesz bawić się przy użyciu klasy Process (tak dla zmyły, jak to zawsze w M$), proces po nazwie możesz uchwycić używając Process.GetProcessByName("nazwa procesu"). Process ma także właściwość Handle, której zapewne możesz użyć przy wywołaniu metody SetForegroundWindow().

0

witam

cosik mi ta funkcja .......ByName(....) nie dziala :)
albo ja cos zle robie :)
szuaklem po dokumenyacji i tylko znalazlo ze jest po Id ??

prosze o wyrozumialosc z C# mam doczynienia dopiero od 2 tygodni
pzdr Andrzej

0

Ale co nie działa? Co to znaczy "nie działa"?

Process[] ff = Process.GetProcessesByName("firefox");
if (ff.Length > 0)
    Console.WriteLine(ff[0].Id);
0
somekind napisał(a)

Ale co nie działa? Co to znaczy "nie działa"?

Process[] ff = Process.GetProcessesByName("firefox");
if (ff.Length > 0)
    Console.WriteLine(ff[0].Id);

tzn ze Process.GetProcessesByName podkresla mi na czerwona jako bledna funkcje.
Error 1 'System.Diagnostics.Process' does not contain a definition for 'GetProcessByName'

EDIT sorka zle skopiowalem :) ale blad jest dalej

pzdr Andrzej

0

nie wiem, nie chce mi się nawet edytora odpalać, ale błąd jest chyba wyraźny. GetProcessName

a someking pisze o: GetProcessByName. Różnica dla mnie całkiem wyraźna.

0

Nie rozumiem - wkleiłem kod, który się kompiluje. Może my nie o C# mówimy?

0
somekind napisał(a)

Nie rozumiem - wkleiłem kod, który się kompiluje. Może my nie o C# mówimy?

moze pytanie bedzie smieszne :) ale czy jest roznica czy to jest pod Console i czy Windows Form ?? moze dlatego mam blad ??

pzdr Andrzej

0

No pod WinForms raczej nie ma możliwości wyświetlania na konsoli. Ale znalezienie procesu działa tak czy siak.

0
somekind napisał(a)

No pod WinForms raczej nie ma możliwości wyświetlania na konsoli. Ale znalezienie procesu działa tak czy siak.

az wstyd sie przyznac ale dziala :) a blad tkwil w mojej pisowni
napisalem :Process zamiast Processes

dzieki wielkie
pzdr Andrzej

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