[VB] Combobox bringtofront

04/26/2014 14:44 Mostey#16
Quote:
Originally Posted by silvermf1991 View Post
da diese nen komplett andere "Codesprache" benötigen aber egal ich denke ich weiß was damit in etwa gemeint ist (:
Nicht unbedingt, du kannst beispielsweise mit C++ auch auf Linux programmieren. Allerdings halt ohne WinAPI, da brauchst du sicherlich auf Linux Ebene eine Schnittstelle, um auf das System zugreifen zu können.


Quote:
Originally Posted by silvermf1991 View Post
und ich hab nun das Programm für C# umgeschrieben, nur das ich nun nichtmehr den Prozess auslesen kann,
foreach Process p in Process.GetProcesses() ?


Quote:
Originally Posted by silvermf1991 View Post
Ich habe oben nun eingefügt: "using Tool_by_Devidra;", so sollte er doch für alle Formen ( wenn ich dies oben einfüge ) alle Klassen und co. benutzen die ich im Projekt erstelle?
Was?
04/26/2014 15:22 silvermf1991#17
Quote:
Originally Posted by Mostey View Post
Nicht unbedingt, du kannst beispielsweise mit C++ auch auf Linux programmieren. Allerdings halt ohne WinAPI, da brauchst du sicherlich auf Linux Ebene eine Schnittstelle, um auf das System zugreifen zu können.
Und da wären wir nun was ich vorhin meinte, müsste man doch nun komplett anders "Coden" um das Ergebniss für andere Betriebssysteme zu schaffen ;) ich denke nicht das die Schnittstellen 1:1 gleich sind, nur anstatt das überall "Windows" oder "Linux" steht, sonst wären viele ja nicht am verzweifeln wieso einiges für Linux so lange dauert

Quote:
Originally Posted by Mostey View Post
foreach Process p in Process.GetProcesses() ?
Hm.. Entweder ich hab da nen Fehler eingebaut oder keine Ahnung, werd gleich nochmal schauen

Quote:
Originally Posted by Mostey View Post
Was?
[Only registered and activated users can see links. Click Here To Register...]

Oben an den Code eingefügt, vor "namespace v19_F_Tool_by_Devidra"

[Only registered and activated users can see links. Click Here To Register...]

Rechts der schöne Projektmappenbrowser

Wenn ich nun Klassen und Co. erstelle, mit den ganzen Funktionen sagen wir, das komplette WindowHandle definiere ich dort, und rufe das WindowHandle in meiner Form1 auf, dürfte der doch so aus der "KlasseWindowHandle" die deklaration ( hoffe ich hab das richtig genannt :D ) nehmen?

Hab in paar "Test" Sourcen, um mal deren Codestyle zu sehen nur mitgekriegt, das viele ihren Projektnamen so dareinschreiben, wenn ich dies löschen würde, würde der die Klassen nichtmehr "laden"

Edit: Ah, ich habs warum der bei mir das garnichtmehr lädt.. hab davor es so gemacht

comboBox1.click/ed

selbst wenn ich nun das so abänder, passiert nichts wenn ich draufklicke, die Liste bleibt leer, davor wurde die Liste mit den Prozessen befüllt, vorher aber gelöscht, damit die sich nicht "verdoppeln"
04/26/2014 19:31 Mostey#18
Quote:
Originally Posted by silvermf1991 View Post
Und da wären wir nun was ich vorhin meinte, müsste man doch nun komplett anders "Coden" um das Ergebniss für andere Betriebssysteme zu schaffen ;) ich denke nicht das die Schnittstellen 1:1 gleich sind, nur anstatt das überall "Windows" oder "Linux" steht, sonst wären viele ja nicht am verzweifeln wieso einiges für Linux so lange dauert
Natürlich musst du nicht alles neu programmieren. die Schnittstelle ändert sich und du ersetzt OS spezifische Funktionen wie FindWindow() einfach mit der Linux Variante.

Quote:
Originally Posted by silvermf1991 View Post
[Only registered and activated users can see links. Click Here To Register...]

Oben an den Code eingefügt, vor "namespace v19_F_Tool_by_Devidra"

[Only registered and activated users can see links. Click Here To Register...]

Rechts der schöne Projektmappenbrowser

Wenn ich nun Klassen und Co. erstelle, mit den ganzen Funktionen sagen wir, das komplette WindowHandle definiere ich dort, und rufe das WindowHandle in meiner Form1 auf, dürfte der doch so aus der "KlasseWindowHandle" die deklaration ( hoffe ich hab das richtig genannt :D ) nehmen?

Hab in paar "Test" Sourcen, um mal deren Codestyle zu sehen nur mitgekriegt, das viele ihren Projektnamen so dareinschreiben, wenn ich dies löschen würde, würde der die Klassen nichtmehr "laden"

Edit: Ah, ich habs warum der bei mir das garnichtmehr lädt.. hab davor es so gemacht

comboBox1.click/ed

selbst wenn ich nun das so abänder, passiert nichts wenn ich draufklicke, die Liste bleibt leer, davor wurde die Liste mit den Prozessen befüllt, vorher aber gelöscht, damit die sich nicht "verdoppeln"
Ich habe immer noch nichts verstanden.
04/26/2014 20:12 silvermf1991#19
Quote:
Originally Posted by Mostey View Post
Ich habe immer noch nichts verstanden.
Ok ist wohl egal, ich denke glaub einfach zuviel :D


Ok aber zurück zu meinen Problem, ich hab nun alles auf C# Basis gemacht, einzige Problem ist folgender:

Vorher hab ich die Ausgabe, wie nun auch, in einer comboBox hinterlegt, vorher "klickte" man auf die comboBox und machte folgende Funktion

Code:
    Private Sub ComboBox1_Click(sender As Object, e As EventArgs) Handles ComboBox1.Click
        ComboBox1.Items.Clear()
        Dim pList() As System.Diagnostics.Process =
        System.Diagnostics.Process.GetProcessesByName("prozess")
        For Each proc As System.Diagnostics.Process In pList
            ComboBox1.Items.Add(proc.ProcessName & proc.Id)
        Next
    End Sub
Beim "aufklappen" bzw. draufklicken, wird die comboBox geleert, dann fügte der die / den Prozess hinzu

Fazit: Klappte 1A

Nun, in C#, existiert aber kein "comboBox1_Click" mehr ( jedenfalls klappt es nicht ), sondern Standartgemäß ist es nun

Code:
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            proc = Process.GetProcessesByName("prozess");
            comboBox1.Items.Clear();
            foreach (Process p in proc)
            {
                comboBox1.Items.Add(p.Id);
            }
        }
Also, wenn ich schon ein "vorhandes" wechsel, löscht der, also ist das ausgewählte weg da ers dann löscht

Wenn ich aber "comboBox1_Click", also SelectedIndexChanged "austausche", klappt es immernoch nicht, ich denke also, in C# existiert die comboBox1_Click funktion nicht oder wurde geändert

Ich hoffe du verstehst nun :handsdown:

PS: Wenn ich nen Button mache, der es reloaded, funktioniert, aber ich würde gerne ohne den Button arbeiten
04/26/2014 20:31 Mostey#20
[Only registered and activated users can see links. Click Here To Register...] ?
04/26/2014 21:13 silvermf1991#21
Jain! Fast, ich weiß nicht woran es liegt, entweder hab ich einen Fehler oder es ist normal so?

Ich klicke drauf, es kommt wie im Code die MessageBox.. Das ist perfekt, doch wenn ich nun auf ein Item in der comboBox klicke, kommt die MessageBox nochmal?

Entweder hab ich da einen Fehler, oder der Code will mich verarschen :D

Code:
namespace Tool_by_Devidra
{
    public partial class Form1 : Form
    {
        private Process[] proc;
        internal System.Windows.Forms.ComboBox ComboBox1_DropDown;

        public Form1()
        {
            InitializeComponent();
        }

//Programmstart
        private void Form1_Load(object sender, EventArgs e)
        {
            // Hook up the event handler.
            this.comboBox1.DropDown +=
                new System.EventHandler(comboBox1_DropDown);
        }

private void comboBox1_DropDown(object sender, System.EventArgs e)
        {
            ComboBox1_DropDown.Items.Clear();
            proc = Process.GetProcessesByName("prozess");
            foreach (Process p in proc)
            {
                ComboBox1_DropDown.Items.Add(p.Id);
            }
        }
Sollte eigentlich so stimmen, klappen tuts ja.. Nur wieso gibt der mir beim auswählen eines Items nochmal die MessageBox? Wenn ich die MessageBox entferne, kommt sie garnichtmehr, also muss die da wohl bleiben


Edit: Hab den Fehler, bin ich blöd, hab den Hook nicht GroßKleinschreibung beachtet ;)

Ok, hab nun auch bisschen mit den SetForegroundWindow(handle) gemacht, nur bekomme ich eine Fehlermeldung

Code:
        [DllImport("User32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
        private IntPtr handle;
        private Process process_front;

private void button1_Click(object sender, EventArgs e)
        {
            handle = ComboBox1_DropDown.SelectedItem;
            SetForegroundWindow(handle);
        }
Fehlermeldung ist:

Quote:
Fehler 2 Der Typ 'object' kann nicht implizit in 'System.IntPtr' konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.) c:\users\devidra\documents\visual studio 2013\Projects\Tool by Devidra\Tool by Devidra\Form1.cs 310 22 v19 F-Tool by Devidra
Quote:
ComboBox1_DropDown.SelectedItem
Das unterstrichene ist der Fehler, hoffe mal der Ansatz stimmt so :(

Edit: Hab nun was getestet, habe dies hier geändert

Code:
handle = process_front.MainWindowHandle;
Code:
process_front = Process.Start("cmd");
und dies hier eingefügt, dies funktioniert auf jedenfall..

Ich vermute, das ich noch irgendwie die richtige ProzessID einfügen muss, da ich ja schon den richtigen Prozess + ID finden kann ( sind ja in der comboBox gelistet )

Also wie kann ich die Prozess ID von "comboBox1_DropDown.SelectedItem" dort einfügen?
04/27/2014 00:44 Mostey#22
DropDown.SelectedItem ist ein Objekt, kein IntPtr und somit auch kein Handle. Speicher halt den Prozessnamen in der Text Eigenschaft des Items und ruf diese dann über SelectedItem.Text auf.
04/27/2014 01:49 silvermf1991#23
Quote:
Originally Posted by Mostey View Post
DropDown.SelectedItem ist ein Objekt, kein IntPtr und somit auch kein Handle. Speicher halt den Prozessnamen in der Text Eigenschaft des Items und ruf diese dann über SelectedItem.Text auf.
Hört sich einfach an, aber ich bin wahrscheinlich wieder auf dem Holzweg :(

Code:
private void ComboBox1_DropDown_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }
Hier sollte schonmal die richtige Stelle sein, um es zu speichern

Nun eigentlich sollte es so aussehen, aber irgendwie auch nicht

Quote:
private void ComboBox1_DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
process_set = ComboBox1_DropDown.SelectedItem;
ComboBox1_DropDown.Text = process_set;
}
Glaube ist schon zu spät für mich :p
04/30/2014 19:28 Mostey#24
Code:
process_set = ComboBox1_DropDown.SelectedItem;
Deklaration von process_set? Außerdem speicherst du hier ein Objekt ab, keinen Text.

Code:
ComboBox1_DropDown.Text = process_set;
string auf Objekt? Das sagt der Compiler dir sicherlich auch.

Du solltest dich auf jeden Fall erstmal den Grundlagen widmen, so wird das nichts wenn ich dir die grundlegendsten Sachen erklären muss, wobei wir einige Post vorher noch bei der WinAPI waren die dann definitiv etwas zu hoch ist.