Laden...
M
Benutzerbeschreibung

Forenbeiträge von mcneal Ingesamt 56 Beiträge

09.07.2013 - 10:48 Uhr

Nachträglich wollte ich nur nochmal klarstellen, dass ich selber die Gründe nicht kenne, warum es so und nicht anders gemacht werden soll. Jedoch kann ich mit Bestimmtheit davon ausgehen, dass es trifftige Gründe gibt.

Deine Frage war natrülich absolut berechtigt. Leider konnte ich dir keine Antwort geben. Da sich die Angelgenheit nun in Wohlgefallen aufgelöst hat, brauch das Thema nicht weiter bearbeitet werden.

MfG

McNeal

05.07.2013 - 11:35 Uhr

Naja das wird schon seine Gründe haben. Die erstmal weder mich, geschweige denn euch tangieren sollten. Wenn keiner ne Idee hat dann ist es halt so...ich hab google nun schon sowas von durchgeritten...dann bleibts halt. Trotzdem danke.

05.07.2013 - 10:00 Uhr

Also am Focus scheint es nicht zu liegen.

Das Management Studio soll halt das Skript direkt geladen haben und ich möchte dann direkt auf Ausführen klicken könnnen ohne nochmal den Cursor extra ins Feld zu setzen.

Gibt es sowas wie Dateien im Bearbeitungsmodus starten oder so?

04.07.2013 - 18:03 Uhr

Hallo,

ich habe keine Ahnung ob es ein allgemeines Problem ist oder nur eins des SQL Management Studios aber.....

wenn ich das aus meinem Programm über nen Button bspw. starte und direkt einige Argumente wie den Namen der Datenbank, Logindaten etc übergebe, dann startet alles so wie es soll.

Übergebe ich nun zusätzlich noch ein .sql-skript das sofort geladen werden soll, so wird es zwar geöffnet aber anscheinend ohne Fokus oder so. Ich bin mir nicht sicher... Wer das Ssms kennt weiß ja vlt, dass oben links in einer DropDown Liste sich die verfügbaren Datenbanken eintragen und sich dort auch noch ein Button "Ausführen" befindet.

Starte ich nun also einfach so(ohne sq.-skript) den Manager, ist die Verbindung zu den Datenbanken hergestellt und ich könnte direkt auf Ausführen klicken.

Mit skript ist es nicht so. Die Verbindung ist nicht hergestellt und der Button ist ausgegraut. Erst wenn ich einmal in das geöffnete Skript klicke ist alles so wie es sein soll. Woher kommt dieses Verhalten? Kann ich das umgehen?

Lässt sich auch mega kacke beschreiben mein Problem 😛. Vielleicht versteht ja jemand was ich möchte und kann mir helfen.

LG
McNeal

19.06.2013 - 17:19 Uhr

Hallo,

ich hab schon gesehen, dass es einige ähnliche Anfragen im Forum gab aber davon hilft mir nichts so richtig weiter.

Vlt. geht das was ich möchte auch gar nicht anders aber fragen kostet ja nichts...

Also wie dir Überschirft schon hergibt, möchte ich eine Textdatei an bestimmten Stellen ändern bzw. bestimmte Wörter ändern. Da die Dateien recht groß werden könne denke ich, dass sich eine Lösung via StreamReader besser macht als z.B. File.ReadAllLines()

hab nun quasi 2 Probleme:

1.
wo muss das Zurückschreiben hin?
habe z.B.

string sContent;
        
            if (File.Exists(sFilename))
            {            
                StreamReader sr = new StreamReader(sFilename);
                while((sContent = sr.ReadLine()) != null)
                {
                        sContent = sContent.Replace("bla", "").Replace("blub","");//löscht bla und blub
                }
sr.Close();}
                

nun möchte ich den StreamWriter aufrufen und quasi die Änderung in die Datei zurückschreiben. Aber wenn ich hinterher einfach

StreamWriter sw = new StreamWriter(sFilename);
                sw.Write(sContent);
                sw.Close();

mache, kennt der ja sContent nicht...wenn ich das innerhalb der Schleife mache, meckert er ja , dass die Datei bereits verwendet wird.....also wie mach ich das richtig?

  1. (und hier glaub ich fast sowas gibts nicht)

Kann ich iwi nicht alle Zeilen einlesen? Ich weiß quasi nicht wo bla und blub stehen aber kann ich den Inhalt vorher durchgegehen, dann die Zeilen mit den Vorkommen auslesesen und dann ändern? Ich will halt nicht immer die komplette Datei einlesen. Sonst hab ich doch auch keinen echten Vorteil durch das ReadLine() oder? Dann kann ich auch gleich ReadToEnd() nehmen oder sehe ich das falsch?

07.06.2013 - 09:22 Uhr

Nur zur Vollständigkeit...

Es lag an der Pfadangabe bzw. Pfadübergabe. Nicht "/" sondern "" 😛

28.05.2013 - 18:30 Uhr

also wenn ich in der Eingabeaufforderung "per Hand" zum Ordner navigiere und dann sage:

svn move bla blub

und dass dann ausführe kann ich mir danach meine Ordner im explorer angucken und sehe, dass der Ordner quasi nur umbenannt und neu geadded wurde

nichts anderes versuche ich doch nun von meinem code aus, nur dass er es halt nicht macht und ich denke mal, dass ich einfach im Befehlsaufruf was falsch mache und nicht sehe was es ist

28.05.2013 - 17:14 Uhr

hmm leider immernoch nicht....

ich gehe doch richtig davon aus, dass wenn ich mir die Ordner angucke, dann kein Fragezeichen sondern ein rotes Ausrufezeichen stehen müsste, wie bei einer bearbeiteten Datei, die nicht umbenannt wurde oder?

vlt mache ich es zum flaschen Zeitpunkt?

hier nochmal etwas mehr Einblick


if (dir.FullName.Contains("test"))
                    {
                        string originalDirName = dir.FullName;
                        string dirName = dir.FullName.Replace("test"," ");
                        string newDirName = dirName;
                        dir.MoveTo(newDirName);  //Ordner umbenennen
                        Process.Start("svn.exe", @"move ""originalDirName"" ""newDirName""");
                    }

kann er den move nicht mehr machen, weil er den Ordner nicht mehr findet? Aber eher ist doch ach iwi komisch...

28.05.2013 - 15:48 Uhr

ahh ok du meinst also, dass es eigentlich schon klappt?

Wenn ich es ausgeführt habe und mir dann mal den Ordner im normalen Explorer angucke, ist an dem Ordner immernoch nen Fragezeichen...

28.05.2013 - 15:13 Uhr

würde schon gern bei meiner Variante mit der svn.exe bleiben....

mal gucken ob es mit copy und delete klappt

28.05.2013 - 14:49 Uhr

hehe^^

ja schick aber auch wenn ich entsprechendes eingebe passiert nicht das was ich möchte....

vlt mal mehr infos...

habe einige Ordner und Dateien umbenannt
svn denkt dann, die ordner sind weg und möchte für die anderen nen add haben aber das soll über das move gelöst werden

Ich nutze das command line tool von tortoiseSVN.

Muss ich eigentlich jedes umbenannte File und Ordner einzelnd "moven" , also das direkt jedes mal nach dem umbenennen aufrufen? Ja oder?

28.05.2013 - 13:52 Uhr

Hi,

ich möchte ein svn move auf einer Datei/Ordner ausführen und das von meinem Programm aus.

was ich bisher gefunden habe ist

Process.Start("svn.exe", @"/c svn checkout C:\TestBuildDevelopment\Code");

wie müsste das denn nun für einen Move Befehl aussehen?

probiere sowas hier

Process.Start("svn.exe",@"svn move ""originalDirNam newDirName");

aber das tuts noch nicht. Ich finde auch wenig dazu wie man sowas macht

Wer kann helfen?

23.05.2013 - 16:32 Uhr

Hallo zusammen,

ich habe folgendes vor...

Ich habe eine Ordnerstruktur, die ich durchlaufen möchte und dabei sollen bestimmte Ordner und dann auch bestimmte Datein in den Ordnern umbenannt werden.

Dabei handelt es sich um einen c# projekt Ordner. Darin sind .cs Dateien und .ascx Dateien. Ich möchte auch da rein und Umbenennungen vornehmen.

Ich möchte also nen Pfead übergeben, die Ordnerstruktur durchlaufen und ablegen in einer Liste und dann dort nach bestimmten Dateien suchen und umbenennen. Zusätzlch sollen einige Dateien ausgelesen werden, dort nach Textstellen gesucht werden und auch dort eine Umbenennung erfolgen.

Gerade beim 2. Part habe ich noch keine Vorstellung wie das zu tun ist...

Ich habe noch nichts geschrieben und würde mich erstmal über Denkanstöße freuen.

LG

15.02.2011 - 15:18 Uhr

hmm also jetzt klappts, hatte es erst mit einem der Testfiles probiert um mich einzuarbeiten...jetzt mit meinem eigenem xml-file ging alles ohne Probleme

15.02.2011 - 13:49 Uhr

Die Doku soll schon für Entwickler sein.

15.02.2011 - 10:51 Uhr

Hallo,

ich wollte für mein Programm mal ne hübsche Doku machen und habe mich ein wenig belesen. Bin dabei auf Sandcastle gestoßen und hab mir auch die zugehörige GUI geladen. Allerdings bekomme ich beim Build-Vorgang immer Fehler da ihm in VS2005.config etwas fehlt.

Macht Sinn, denn ich hab ja nur Visual C# 2010 Express...kann ich das dann überhaupt nutzen?

Wenn nein...was kann ich dann machen?

LG

10.02.2011 - 15:59 Uhr

geht klar....hab jetzt auch keine performanceprobleme....war schon fast eher ne Interessefrage

10.02.2011 - 15:50 Uhr

Also ich hab schon ne Source dahinter, auf die ich zugreife. Mit "nicht zu praktizieren" hab ich vll etwas übertrieben ^^

Habe es angepasst und greife auf die DataSource zu 😉

--> und nu? Bin ich jetzt schneller wenn ich die Zellen direkt anspreche oder alles in ne Liste packe und dann die Liste abfrage? 😁

10.02.2011 - 12:38 Uhr

nimm immer die Datenquelle.

Da geb ich dir ja recht aber das ist in meinem Fall leider nicht zu praktizieren

besser und schneller durch die benutzte Auflistung zu gehen.

vorher noch in eine Liste kopierst was natürlich zusätzlich Zeit in Anspruch nimmt.

hmm nun stehts 1:1 😁

10.02.2011 - 11:11 Uhr

Hi,

folgendes:

Ich hab nen Datagridview, den ich Zeile für Zeile abarbeite.
Wenn ich die einzelnen Werte der Zellen abfragen möchte, was ist dann schneller?

Variante A:

direkter Zugriff auf die Zelle

work = row.Cells[1].Value.ToString();

Variante B:

alle Zellen einer Zeile in eine Liste packen und dann aus der Liste abrufen

cell = row.Cells[i].Value.ToString();
                            values.Add(cell);
                            rate = values[6];

ich vermute mal Variante A ist besser, vor allem da ich ja gar nicht jede Zelle benötige aber ich wollt zur Sicherheit mal nachfragen =)

07.02.2011 - 14:41 Uhr

AHA! Vielen Dank habt mir sehr geholfen 👍

07.02.2011 - 11:06 Uhr

Hallo,

ich möchte gern mein Programm veröffentlichen bzw eine .exe erstellen, sodass man es ohne Entwicklungsumgebung starten kann. Diese möchte ich dann auf anderen Computern installieren.(mache ich zum 1. mal)

Habe schon das Forum durchsucht und alles Mögliche gelesen aber ich will ja gar nicht, dass es ohne .net läuft...daher hilft mir das wenig
Habe mich an die msdn Anleitung gehalten aber es klappt irgendwas nicht.

Ich gehe also unter Projekt -> Projekt veröffentlichen, gebe den Zielordner an, sage "mit cd installieren"( oder so) und er soll keine Updates suchen...

Dann wird das ganze erstellt und es erscheint der Zielordner, indem sich dann ein Setup, ein Applikation Manifest und der Ordner Apllication Files befinden. In dem Ordner ist nochmal ein App Manifest und nen paar andere Dateien.

Egal was ich nun anklicke, es passiert nichts...beim Setup kommt nen kurzer Ladescreen und das wars. Auch wenn ich es über die Verknüpfung im Startmenü öffnen möchte geht nichts.

Wenn ich es unter Projekt->Projekt Eigenschaften -> Veröffentlichen versuche, kann man ja erforderlich Komponenten auswählen und bei .Net Framework 2.0, 3.0, 3.5 habe ich nen gelbes Dreieck und die Meldung
"Für Bootstrapping erforderlich Komponente nicht gefunden"

Aber .Net ist installiert...

03.02.2011 - 10:48 Uhr

Ah - vlt. hast du ja nur eine oder keine SelectedRow, evtl. SelectionMode.SingleRow eingestellt?

👍 👍 👍 😉

03.02.2011 - 08:34 Uhr

also bisher ist meine Gui noch nicht eingefroren.

Werde mal gucken was passiert, wenn ich den SerialConnector da auslagere..wobei ich den halt an mehreren Stellen habe.

Übrigens ist deine Schleife fragwürdig:

Die Schleife passt schon so. Das was im label steht ist abhängig von der Zeile in der ich mich befinde und count soll auch nicht hochgezählt werden. (count soll hier für "Anzahl" stehen und nicht für "zählen")

02.02.2011 - 13:16 Uhr

Hey das klappt ja prima!!!

Aber nur mal so für mich...was mache ich da eigentlich?

Ich hoffe, es ist gewollt, dass der serialConnector das Senden der Daten im Gui-Thread erledigt?

Ja das war so gewollt und klappt auch ohne Probleme. Aber las mich ruhig an deinen Zweifeln Teil haben.

02.02.2011 - 12:01 Uhr

Hallo,

also eigentlich liefert das Forum einem ja alles Mögliche zu dem Thema aber ich bekomme es auf mein Beispiel nicht richtig übertragen.... X(

Ich habe also einen 2. Thread und in dem rufe ich beim Erfüllen einer Bedingung eine Methode auf, die mein label auf der Form anspricht und dann kommt halt diese Standardmeldung von wegen..Zugriff aus falschem Thread etc.

Nun wollte ich das Ganze mittels Invoke beheben aber es klappt nicht.

etwa so:

public void run()
        {
            if (ctrl.InvokeRequired)
            {
                ctrl.Invoke(new MethodInvoker(run));
                return;
            }
            try
            {
                foreach (DataGridViewRow row in dataGridViewSteuerung.SelectedRows)
                {
                    count = int.Parse(row.Cells[8].Value.ToString());
                    this.serialConnector.SendDataToSerialPort("run");
                    help++;     
                    label1.Text = "Durchgang: " + help.ToString() + " / " + count.ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
                return;            
            }
        }

was fehlt mir um zum Ziel zu kommen?

31.01.2011 - 14:27 Uhr

Schön, jetzt hauts hin. Danke für die Hilfe!

28.01.2011 - 13:39 Uhr

manchmal muss man sich halt erst wiederholen bevor der andere versteht was man will..

jedenfalls hoffe ich,dass ich dich richtig verstehe

soll also so werden:

spinwait s= new spinwait()
do{
testeBit();
s.spinOnce();
}
while ( prog is running)

und das ganze dann in nem extra Thread halt..

sollte es in die Richtung gehen?

28.01.2011 - 08:18 Uhr

hmm also das mit der Pumensteuerung läuft auf jeden Fall und bei der Übertragung gibt es auch keine Probleme. Es hat mich auch genügend Schweiß gekostet, sodass ich daran auch letztendlich nichts mehr ändern möchte.

Aber danke für den Hinweis, so weiss ich für die Zukunft, dass es bessere Wege gibt.

Schon mal was von "do-while" gehört?

Ja 8o

und wie müsste dann sowas aussehen?

jetzt mal bisl pseudocode mäßig:

do (alle paar ms){ 
x=tasterbit.getValue()
if (x=1) run()
while(program is running)} 

ich bekomme halt dieses..."mach alle paar ms was" statement vor allem nicht formuliert

27.01.2011 - 16:22 Uhr

sag ich doch..baum vorm kopf 😛

Verwende keinen Timer sondern einen Thread mit einer Schleife und einem Spinwait.

wie sage ich denn einer Schleife, dass sie sich alle paar millisekunden wieder aufrufen soll? Die erwartet doch ne Anzahl an durchläufen oder nicht? und das kann ich ihr ja gar nicht geben.

Sobald das prog läuft soll der thread(in dem der Taster überwacht wird) rattern und er soll erst aufhören, wenn der benutzer meint, er ist fertig und das programm beendet.

@ winsharp:

also die Steuerung der Pumpen ist ohnehin schon sehr grob^^ weil viel können die nicht und das ganze geschieht über die RS232 Schnittstelle

Nun möchte ich eig nichts anderes als diese Steuermaschine wieder dazwischen klemmen (bzw hängt jetzt ja der PC zwischen der Maschine und der Pumpe) und meinen Button, den ich habe um den Vorgang zu starten über den Taster auslösen. Dazu muss man vll wissen, dass pumpe+Maschine halt nicht dort stehen wo der PC ist. Quasi erst alles am Rechner einstellen...rüber zu der Pumpe und feuer frei für den Taster 😉

Da jetzt noch neue Hardware zu besorgen und die dann auch wieder zu programmieren halte ich für overhead

27.01.2011 - 15:32 Uhr

puh also viel hab ich leider noch nicht hinbekommen....kann mir mal rasch einer helfen

ich denke bzw. hoffe es reicht, wenn ich mit System.Timers.Timer arbeite

wollte dann das Timer.Elapsed Event nehmen und dann jedes mal mein Bit abfragen nur iwi bekomme ich es nicht hin

ich bekomme zwar in der Main Methode mein Bit ausgelesen und kann den Wert dann in ner Variablen speichern aber in meiner Timer_Elapsed Methode kann ich nicht drauf zugreifen??
...hab wohl grad nen Baum vorm Kopf

Für das nicht statische Feld, die Methode oder die Eigenschaft "TestConsole_meIOSingleReadAnalog_CS.TestConsole_meIOSingleReadAnalog.str" ist ein Objektverweis erforderlich.

btw...@winSharp93: Was genau meinst du denn wenn du von Microcontrollern sprichst? Hab ein wenig gesucht aber wusste auch nicht direkt wonach und mit dem was ich gefunden habe, konnte ich nur wenig anfangen. Hast du nen Link oder so, was du genau meinst? oder sprichst du von Hardware?

27.01.2011 - 08:46 Uhr

Also hier mal zur weiteren Vollständigkeit einiges, was sich ebenfalls mit dem Thema befasst:

[erledigt] Bestimmte Aktion exakt alle 20ms ausführen

Echtzeit und C# ? Genauer Timer ?

27.01.2011 - 08:01 Uhr

also nur zur vollständigkeit:
Der Computer hängt zwischen 2 Elementen.

Maschine 1: Steuerelement an dem der Taster ist
Maschine 2: Pumpe

vorher war die Pumpe direkt an M1 aber nun soll die Pumpe über den Rechner konfigurierbar sein.

Der Taster wird quasi weiterhin alles starten aber er wird bestimmt nicht im ms bereich gedrückt. Jedoch sollte ich schon sicher sein können, dass ich dieses Event nicht verpasse.

Sich zu merken, wann der Schalter gedrückt war ist ne sehr gute Sache also werd ich das mal mit dem Controller veruschen. Danke!

26.01.2011 - 16:10 Uhr

Ja 2-3 oder auch 5 ms sind denke ich ok vll übertreib ich da auch und die Toleranz könnte noch größer sein...

und wenn ich dass dann extra habe und der das dann erkennt, kann ich dann von dort aus quasi in mein Hauptprogramm springen und die Dinge ausführen die nach dem betätigen geschehen sollen?

mit threading hab ich noch nicht wirklich gearbeitet..aber wenn du sagst damit komme ich am besten zum ziel dann guck ich mir das an

26.01.2011 - 15:35 Uhr

Hallo,

ich hab folgendes Anliegen:

Ich habe ein Fußtaster, der vom Computer erkannt wird bzw wird bei betätigem des Tasters ein Bit auf 1 gesetzt und dieses kann dann ausgelesen werden. Genau genommen ist am Computer über eine zusätzliche Messkarte ein Gerät angeschlossen und an diesem Gerät hängt der Fußtaster.

Jetzt möchte ich natürlich wissen wann bzw. ob der Schalter gedrückt wurde. Dazu muss ich dann also ständig überprüfen ob dieses Bit auf 1 oder 0 steht.

Da das möglichst exakt registriert werden soll dachte ich mir, ich sollte diese Abrfrage schon im Millisekundentakt machen.

Bisher kann ich die Abfrage des Bits mit der Tastatur machen...also wenn ich den Taster betätige und kurz darauf Enter drücke, dann sehe ich, dass das Bit auf 1 steht und wenn ich dann nochmal Enter drücke ist es wieder auf 0. Ist quasi kein andauerndes Signal in dem externen Gerät, sondern nur ein kurzes.

Ja nun also an euch die Frage wie ich diese Abfrage in so einem Zeitintervall hinbekomme?

24.01.2011 - 15:39 Uhr

Hallo,

ja int != IntPtr das ist mir schon klar 😉

aber irgendwo schreiben wir ja

int flags = Win32.GetWindowLongPtr(p.MainWindowHandle,Win32.GWL_STYLE);

und das geht halt nicht, es sei denn, ich caste den Ausdruck zu einem int...aber das dass blödsinn ist weis ich auch ...

Sorry fürs späte schreiben aber ich muss die arbeit daran gerade etwas zurückstellen...das sind ja auch nur noch feinheiten, das Programm an sich steht ja 👅

20.01.2011 - 08:18 Uhr

O man...das ist natrülich absolut blind..logisch muss ich für die beiden nochmal extra die Werte raussuchen...argh!
Ja vorher lief der Teil schon und ne extra .cs hab ich gestern auch schonmal angelegt weil es ja doch etwas mehr geworden ist.

trotzdem klappt der letztendlich aufruf immernoch nicht...

bei der Definition der flags, also int flags = .... hat er mir auch erst fehler angezeigt, hab das dann in ein int gecastet und es ging, ich schätze aber mal, dass das so nicht sein soll und wohl auch das Problem beim Aufruf dann ist oder?

aufruf meint folgende Zeile

Win32.SetWindowLongPtr(p.MainWindowHandle,Win32.GWL_STYLE,flags);

die muss ich doch aber auch noch nem Wert zuweisen, so wie du es mit dem bool b =..gemacht hattest oder?

19.01.2011 - 15:38 Uhr

Hallo,

also mir ist soweit klar wie es funktionieren soll denke ich.

hier mal meins komplett jetzt mit dem neuen kram

private void toolStripButtonHilfe_Click(object sender, EventArgs e)
        {
            Process p = new Process();
            p.StartInfo.FileName = "wordpad.exe";
            p.StartInfo.Arguments = "Manual.rtf";
            p.Start();
            p.WaitForInputIdle();

            int flags = Win32.GetWindowLongPtr(p.MainWindowHandle,Win32.GWL_STYLE);//alte Werte holen

            flags &= ~(WS_SIZEBOX | WS_MAXIMIZEBOX);//flags löschen

            Win32.SetWindowLongPtr(p.MainWindowHandle, GWL_STYLE, flags);//neue Werte setzen

            bool b = Win32.SetWindowPos(p.MainWindowHandle, Win32.HWND_TOP, 50, 30, 980, 900, 0x0);
        }

        static class Win32
        {
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, /*SetWindowPosFlags*/ uint uFlags);

            public static readonly IntPtr HWND_TOP = new IntPtr(0);
            public static readonly int GWL_STYLE = (-16);

            [DllImport("user32.dll", EntryPoint = "SetWindowLong")]
            private static extern IntPtr SetWindowLong32(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

            [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")]
            private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

            [DllImport("user32.dll", EntryPoint = "GetWindowLong")]

            private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex);

            [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")]
            private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex);

            public static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
            {
                if (IntPtr.Size == 8)
                    return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
                else
                    return SetWindowLong32(hWnd, nIndex, dwNewLong);
            }

            public static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex)
            {
                if (IntPtr.Size == 8)
                    return GetWindowLongPtr64(hWnd, nIndex);
                else
                    return GetWindowLongPtr32(hWnd, nIndex);
            }
        }

das mit dem nIndex nimmt er nicht also auch nicht wenn ich -16 schreibe...habs ja auch nochmal extra angelegt wie du bei dem HWND_TOP aber er unterstreicht es mir trotzdem rot...

das mit der SizeBox und MaxiBox kennt er auch nicht 🙁 was fehlt mir denn noch?

Wenn ich es so, wie es jetzt ist lasse, müsste er doch erst alles einstellen und dann quasi SetWindowPos aufrufen...dann müssten ja alle Einstellungen gleich richtig sein oder?

schwere Geburt, aber danke das du mir hilfst 🙂

19.01.2011 - 10:17 Uhr

Also bish hier hin war es ja noch relativ einfach und zu erwarten

private static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
        {
            if (IntPtr.Size == 8)
                return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
            else
                return SetWindowLong32(hWnd, nIndex, dwNewLong);
        }

        [DllImport("user32.dll", EntryPoint = "SetWindowLong")]
        private static extern IntPtr SetWindowLong32(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

        [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")]
        private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

aber ich habe nirgends entsprechende Werte für den Index gefunden, die den BorderStye auf Fixed setzen....sicher dass das damit geht? Ich finde aber auch nichts anderes. Ist ahtl schwer was zu finden, wenn man nicht genau weis wonach man sucht 🤔

Was anderes...wenn man das jetzt hinbekommt, hat man dann automatisch auch die Funktion des Maximierens verhindert? Weil wenn man das auch noch extra machen müsste, dann ist das alles vll doch etwas zuviel Aufwand.

19.01.2011 - 08:09 Uhr

Soso...also verschieben wäre für das Fenster ok nur von der Größe her soll es fix sein.

Ich vermute mal das wird dann ganz ähnlich sein wie bei dem SetWindowPos. Ich meld mich also wenn ich was hab. Danke!

18.01.2011 - 16:17 Uhr

Ich wäre dankbar wenn mir jemand auch noch bei meiner letzten Frage helfen könnte

17.01.2011 - 16:18 Uhr

Ach jetzt hätt ich es fast vergessen...kann ich den bei einer solchen externen Anwendung dann auch auf die Eigenschaft "Locked" zugreifen, damit quasi die Größe auch nicht mehr verändert werden kann?

17.01.2011 - 16:07 Uhr

Ui, naja da war ja doch noch etwas Luft zwischen deiner und meiner Fassung aber so klappt es nun bei mir auch einwandfrei.

Ich hatte den DLL import nicht so schön in ner extra Klasse sondern einfach reingeklatscht. Er konnte halt mit einigen Argumenten gar nichts anfangen weil er sie nicht erkannt hat.

Ich konnte deine Lösung quasi übernehmen. VIELEN DANK!!! 👍

17.01.2011 - 14:38 Uhr

die 0 steht ja für HWND_TOP und mit HWND_Top kann ich ja nicht arbeiten. Er unterstreicht es mir rot und sagt der Name ist im aktuellen Kontext nicht vorhanden. Hab ich das irgendwas an der falschen stelle stehen vll?

und wie gesagt klappt nichts für die Flags...

17.01.2011 - 13:53 Uhr

Also mit 0x0 klappt es auch nicht und nen Error bekomme ich auch nicht.

hier mal die ganze Mehtode

Process p = new Process();
            p.StartInfo.FileName = "wordpad.exe";
            p.StartInfo.Arguments = "Manual.rtf";
            p.Start();
            p.WaitForInputIdle();
            //SetWindowPos(p.MainWindowHandle, 0, 15, 15, 1300, 760,0x0);
            MessageBox.Show(Marshal.GetLastWin32Error().ToString());

Das GetLastError gibt mir ne 0 zurück.

Die Konstanten habe ich in der Klasse SetWindowPosFlags. Das ist doch Unsinn oder? Weil die kann ich ja so auch gar nicht an der entsprechenden Stelle beutzen.

Letzendlich soll das Fenster wie gesagt in einer bestimmten Größe geöffnet werden und dann am besten nicht mehr veränderbar sein. Klingt komisch...iss aber so ^^

17.01.2011 - 11:23 Uhr

hmm ja also lange bin ich auch noch nicht am programmieren....

also da ich Visual C# 2010 klappt das mit dem Plug In nicht

hab jetzt


DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);

einfach mal in mein Prog eingefügt..noch ein using rein und ne extra Klasse für SetWindiwPosFlags und dann wars drin...

in die entsprechende Klasse habe ich

static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
static readonly IntPtr HWND_TOP = new IntPtr(0);
static readonly IntPtr HWND_BOTTOM = new IntPtr(1);

eingefügt und nun wollte ich mit der Zeile

SetWindowPos(p.MainWindowHandle, 1, 15, 15, 1300, 760,0x0040);

zum Ziel kommen....Der erfahrene Programmierer, der grad wahrscheinlich nen Schreikrampf bekommt bemerkt natürlich, dass das nicht klappt.
das mit dem 0x0040 klappt halt nicht....war kann mir helfen?

14.01.2011 - 08:23 Uhr

Hi,

also mit dem waitInputIdle ist es zwar nicht mehr 0 (soweit also schonmal danke) aber es hat jedes mal einen anderen Wert...

ausserdem gibt das MainWindowHandle ja nur nen int Wert aus bzw man kann einen setzen...wie stelle ich damit die größe meines Fensters ein?
Ergibt sich der Wert aus Länge*Breite oder wie kommt der zu stande?

LG

13.01.2011 - 14:35 Uhr

ahhhh ja das ist ne top idee! THX!

13.01.2011 - 14:19 Uhr

Hallo,

ich versuche mal das Schiff zu kapern :p

also ich möchte auch eine anwendung(wordpad) mit einem Formular öffnen.

bis dahin kein ding

Process p = new Process();
p.StartInfo.FileName = "wordpad.exe";
p.StartInfo.Arguments = "Manual.rtf";
p.Start();

aber ich möchte gern, dass sich wordpad in einer ganz bestimmten größe öffnet. Wie geht das ?

mit dem MainWindowHandle komme ich nicht so recht weiter

13.01.2011 - 11:55 Uhr

Ja das mit der AlternatingBackColor hab ich schon drin. Es sollte quasi noch ein Zusatz sein.

Danke für die Antwort! Werde das mit dem PaintEvent versuchen.