Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Borg
Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Zitat
Mit den Compilermeldungen nicht klar zu kommen ist leicht wenn man den code größtenteils nicht versteht ^^
Da ist doch kaum Code. Ein paar Structs, ein paar Konstruktoren und Erzeugung und Füllen eines Arrays. Wenn du das nicht verstehst, solltest du eventuell noch mal an den Grundlagen feilen.
Zitat
das tasten drücken greift garnicht
Möglicherweise muss man beim Mausklicken auch noch die aktuellen Koordinaten in dx und dy mitliefern. Um diese zu erhalten, kannst du GetCursorPos benutzen.
EDIT: Code angepasst.
Zitat
beim ausführen werden die maustasten lahm gelegt
Das bedeutet was?

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Nein, ich habe den Code nicht getestet.
Ich habe den direkt hier rein getippt. Weil ich dir nämlich auch bloß helfen wollte.
Da wusste ich aber noch nicht, dass du nicht mit ein paar Compilerfehlermeldungen klar kommst.

Code wiederum angepasst.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Ein solch kleines Problemchen solltest du aber durchaus alleine lösen können...
Daher: Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Code oben angepasst.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Und hör mal bitte auf deine Beiträge zu editieren. Beziehungsweise - so wie ich - nur um Fehler zu verbessern. Aber nicht um Fragen hinzuzufügen oder zu entfernen. Lies dir doch mal deine Posts durch und dann meine jetzt plötzlich völlig zusammenhanglosen Antworten...

Das ist hier ein Forum, kein Chat...

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Habe das fehlende "d" ergänzt.

Ansonsten ist die Verwendung durch die Konstruktoren doch sehr einfach...

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Ebenfalls System.Runtime.InteropServices. Müsstest du doch aber schon drin haben!?

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Muss ja auch hin. Habe das oben verpeilt. Ist jetzt aber geändert.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Probier einfach nur uint.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Das Problem ist, dass du zwei unterschiedliche Funktionen nutzt. Mittels SendInput kannst du alle deine Aktionen atomar ausführen.

[DllImport("user32.dll", SetLastError = true)]
private static extern int SendInput(int nInputs, ref INPUT[] pInputs, int cbSize);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool GetCursorPos( ref POINT coord );

[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct POINT
{
   public Int32 x;
   public Int32 y;
}

[Flags()]
private enum MOUSEEVENTF
{
   MOVE = 0x0001,
   LEFTDOWN = 0x0002, LEFTUP = 0x0004,
   RIGHTDOWN = 0x0008, RIGHTUP = 0x0010,
   MIDDLEDOWN = 0x0020, MIDDLEUP = 0x0040,
   XDOWN = 0x0080, XUP = 0x0100,
   WHEEL = 0x0800,
   VIRTUALDESK = 0x4000,
   ABSOLUTE = 0x8000,
   none = 0x0;
}

[Flags()]
private enum KEYEVENTF
{
   EXTENDEDKEY  = 0x0001,
   KEYDOWN = 0x0, KEYUP = 0x0002,
   UNICODE = 0x0004, SCANCODE = 0x0008,
   none = 0x0
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct MOUSEINPUT
{
   public Int32 dx;
   public Int32 dy;
   public UInt32 mouseData;
   public UInt32 dwFlags;
   public UInt32 time;
   public IntPtr dwExtraInfo;
   public MOUSEINPUT( Int32 x, Int32 y, UInt32 mD, MOUSEEVENTF dwF, UInt32 t, IntPtr dwEI )
   {
      dx = x; dy = y; mouseData = mD; dwFlags = (UInt32)dwF; time = t; dwExtraInfo = dwEI;
   }
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct KEYBDINPUT
{
   public UInt16 wVk;
   public UInt16 wScan;
   public UInt32 dwFlags;
   public UInt32 time;
   public IntPtr dwExtraInfo;
   public KEYBDINPUT( UInt16 wV, UInt16 wS, KEYEVENTF dwF, UInt32 t, IntPtr dwEI )
   {
      wVK = wV; wScan = wS, dwFlags = (UInt32)dwF; time = t; dwExtraInfo = dwEI;
   }
}

[StructLayout(LayoutKind.Explicit)]
private struct INPUT
{
   [FieldOffset(0)]
   public UInt32 type;
   [FieldOffset(4)]
   public MOUSEINPUT mi;
   [FieldOffset(4)]
   public KEYBDINPUT ki;
   public INPUT( MOUSEINPUT mouse )
   {
      type = INPUT_MOUSE;
      ki = new KEYBDINPUT( 0, 0, KEYEVENTF.none, 0, IntPtr.Zero );
      mi = mouse;
   }
   public INPUT( KEYBDINPUT keybd )
   {
      type = INPUT_KEYBD;
      mi = new MOUSEINPUT( 0, 0, 0, MOUSEEVENTF.none, 0, IntPtr.Zero );
      ki = keybd;
   }
   private const UInt32 INPUT_MOUSE = 0;
   private const UInt32 INPUT_KEYBD = 1;
   private const UInt32 INPUT_HARDWARE = 2;
}

// ....

private const UInt16 VK_CONTROL = 0x11;
public void DoSomeAction()
{
   // Mauskoordinaten holen
   POINT coord;
   GetCursorPos( coord );
   // Strg runter, Maus links runter, Maus links hoch, Strg hoch
   INPUT[] inputs = new INPUT[4];
   inputs[0] = new INPUT(new KEYBDINPUT(VK_CONTROL,0,KEYEVENTF.KEYDOWN,0,IntPtr.Zero));
   inputs[1] = new INPUT(new MOUSEINPUT(coord.x,coord.y,0,MOUSEEVENTF.LEFTDOWN,0,IntPtr.Zero));
   inputs[2] = new INPUT(new MOUSEINPUT(coord.x,coord.y,0,MOUSEEVENTF.LEFTUP,0,IntPtr.Zero));
   inputs[3] = new INPUT(new KEYBDINPUT(VK_CONTROL,0,KEYEVENTF.KEYUP,0,IntPtr.Zero));

   int result = SendInput( inputs.Length, ref inputs, Marshal.SizeOf( typeof(INPUT) ) );
   // ...
}

Thema: seltsam hohe Prozessorauslastung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nur leider ist Logging und Fragmentierung der falsche Ansatz.
Gerade wenn die Festplatte fragmentiert ist, sinkt die Prozessorauslastung, da die Prozesse länger auf die Festplatte warten müssen...

Ich fürchte, es liegt an etwas anderem. Auf jeden Fall ist es ein Mythos, dass die Fragmentierung der Festplatte irgendetwas mit einem langsamen Rechner zu tun hätte...

Erstellt in der Software doch mal ein mit Zeitstempeln versehenes DebugLog, in dem alle Aktionen verzeichnet sind. Dann findet ihr vielleicht heraus, womit die Software beschäftigt ist.

Thema: Marshalling im Struct?
Am im Forum: Rund um die Programmierung

Ist doch logisch. Die Funktion erwartet immer die angegebene Reihenfolge. Änderst du diese, liest die Funktion sinnlose Daten. So könnte beispielsweise eine Frequenz von 60kHz verlangt werden. Kein Wunder, dass das false zurückkommt.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Irgendwie versteh ich das nicht. Werden die MouseClicks asynchron ausgelöst? Wie können denn Funktionsaufrufe nach dem MouseClick diesen verändern? Kann man bei MouseClick nicht irgenwie gedrückte Tasten mitliefern?

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Was ist damit:

keybd_event((int)Keys.ControlKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
MausClick("ld");
MausClick("lu");
keybd_event((int)Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);
keybd_event((int)Keys.ControlKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

Thema: Microsoft bestätigt kritische Sicherheitslücke
Am im Forum: Szenenews

Und wieder ein Buffer Overrun.

Klar das so etwas in einem riesigen Softwareprojekt wie Windows passiert. Allerdings könnte Microsoft - gerade angesichts der Beteuerung mehr für die Code- und Laufzeitsicherheit tun zu wollen - ein Tool entwickeln, welches C- und C++-Code auf typische Fehler, wie zum Beispiel dem Verwenden nicht größengetesteter Puffer beim Kopieren, untersucht. Und das wichtigste: dieses Tool muss dann auch auf jeden Fetzen Code im Hause losgelassen werden.

Die Milliarden von Her(t)zen moderner Prozessoren sind im Checken aller Parameter und Datenstrukturen vor dem Damit-Arbeiten besser angelegt als in neuem graphischen Schnickschnack...

Thema: Marshalling im Struct?
Am im Forum: Rund um die Programmierung

Ich vermute eher, dass die Funktion den Struct nicht wirklich auf den Stapel packt (unüblich), sondern nur die Referenz. Also musst du ihn auch per Referenz übergeben.

[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct DAC
{
    byte WaveShape;
    UInt16 Amplitude;
    UInt16 Frequency;
    UInt16 Offset;
}

[DllImport("gUSBamp.DLL")]
private static extern bool GT_SetDAC(IntPtr hDevice, ref DAC AnalogOut);

Falls es so auch nicht geht, kannst du es ja doch wieder ohne ref probieren.

Thema: Funkarmbanduhr mit Binäranzeige gesucht
Am im Forum: Smalltalk

Das ist doch aber keine Binär- sondern nur eine Strichuhr...

Thema: vollständiger Benutzername rausfinden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich vermute mal, da ist NetUserGetInfo kürzer, einfacher und performanter.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

Ich kombiniere deine obigen Versionen mal zu:

keybd_event((int)Keys.ControlKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
MausClick("ld");
MausClick("lu");
keybd_event((int)Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);

Thema: vollständiger Benutzername rausfinden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@nin: Nur leider war dieser Name nie gesucht. Es geht um den vollständigen Benutzernamen, den man in der Computerverwaltung zusätzlich zum Benutzernamen (= Login-Name) angeben kann. Der Explorer zeigt diesen, wenn er vorhanden ist, im Startmenü an.

Thema: vollständiger Benutzername rausfinden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

System.Security.Principal.WindowsIdentity.GetCurrent().Name liefert aber - glaube ich - auch nur den Login-Namen.
Ansonsten musst du die WinAPI-Funktion NetUserGetInfo benutzen.

Thema: Programm mit einem Exitcode verlassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Siehe: Programm beenden erzwingen

Thema: Variablenbezeichnungen
Am im Forum: Rund um die Programmierung

Ungefähr genauso, wie a, b und c bei allgemeinen Parametern in der Analysis, x, y und z für die drei Koordinaten eines kartesischen Koordinatensystems, r, s, t als Parameter in der analytischen Geometrie oder f, g, h als Funktionen.
Oder mit griechischen Buchstaben.

Der gemeine Mathematiker sucht sich einen Buchstaben für einen bestimmte Größe aus und bezeichnet gleiche Größen mit den nachfolgenden Buchstaben. Andere Größen bekommen einen anderen Startbuchstaben und daher eine andere Folge.

Thema: aus schließendes Fenster warten
Am im Forum: GUI: Windows-Forms

fenster.ShowDialog().

Thema: Neueste Datei aus einem Verzeichnis holen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wieso so kompliziert?
Mittels DirectoryInfo.GetFiles bekommst du direkt ein FileInfo[]. Dort brauchst du dann bloß noch die Zeit abfragen. Das ganze über Strings laufen zu lassen ist sehr kompliziert.
Desweiteren solltest du statt new DateTime(2001,1,1) einfach DateTime.MinValue benutzen.

Allse in allem also so:

public string GetNewestFilesName( string DirectoryName, string FileMask )
{
   DateTime newestDate = DateTime.MinValue;
   int newestIndex = 0;
   FileInfo[] Files = (new DirectoryInfo( DirectoryName )).GetFiles( FileMask );
   for ( int i = 0; i < Files.Length; i+ )
   {
      if (newestDate < Files[i].LastWriteTime)
      {
         newestDate = Files[i].LastWriteTime;
         newestIndex = i;
      }
   }
   return (Files.Length > 0) ? Files[newestIndex].FullName : null;
}

Thema: suche Dateien
Am im Forum: Rund um die Programmierung

Zitat
in .NET 2.0 gehts auch leicht inkl. Unterordner: SearchOption.AllDirectories
Sollte man trotzdem nicht verwenden, da die Funktion mit einer Exception aussteigt, wenn ein Unterordner nicht geöffnet werden kann.

Thema: while Schleife mit zwei booleschen Anweisungen | Probleme beim Wechsel von Delphi
Am im Forum: Rund um die Programmierung

public int GetFileSize( string filename )
{
   string[] lines = File.ReadAllLines( filename );
   int charcount = 0;
   foreach( string line in lines )
      charcount += line.Length;
   retunr charcount;
}

Ich möchte dich allerdings noch darauf hinweisen, dass die Methode nicht die Dateigröße liefert, sondern die Anzahl der Zeichen exklusive dem Zeilenendezeichen. Das ist nicht das gleiche (war es auch in Delphi nicht). Um die Dateigröße zu ermitteln, nimmst du (new FileInfo( filename )).Length.

Thema: Netzwerkkarten eindeutig identifizieren
Am im Forum: Netzwerktechnologien

Die Netzwerkkarten kannst du über WMI herausfinden, Klassen Win32_NetworkAdapter und eventuell alle mit Win32_PnP*. Such mal hier nach WMI Code Creator".

Trotzdem bleibe ich bei meiner Meinung, dass du eigentlich die Kameras identifizieren willst und das auch tun solltest. Du könntest ja die Seriennummern aller Kameras in der Software speichern und bei jeder eintragen, ob sie als Kamera 1 oder 2 dient und entsprechend den Aufkleber anbringen.

Thema: Probleme mit PerformClick() ?!
Am im Forum: GUI: Windows-Forms

Zitat
falls du umlaute meidest
Was allerdings technisch gesehen nicht nötig ist, da .NET auf Unicode basiert.
Nur wenn du deine Klassen an anderssprachige (bzw. anderstastaturlayoutige) weitergibst, sollten alle öffentlichen Klassen, Methoden und Felder in lateinischen Buchstaben geschrieben sein.

Thema: Anwendung nachbauen?
Am im Forum: Rund um die Programmierung

Die technischen Elemente einer Anwendung darfst du nachbauen, so lange wie du keinen Code kopierst, die Anwendung dekompilierst oder ähnlich. Also nur reines Reverse Engineering. Davon leben einige Open-Source-Projekte (bspw. Samba).

Die graphische Gestaltung kann hingegen, wenn eine gewisse Schöpfungshöhe erreicht ist, als ein originäres Werk eines Designers betrachtet werden und unterliegt damit auch Schutzansprüchen.
Eine "gewisse Schöpfungshöhe" erreicht man aber mit Sicherheit nicht, wenn man einfach nur normale Menüs und Buttons benutzt. Als Beispiel müsste dieses der Oberfläche von Word bis zur Version 2003 abgesprochen werden. Erst in der 2007er Version ist durch das Ribbon wieder ein gewisser schöpferischer Akt erkennbar.

Solange du dich nur inspirieren lässt und deine Oberfläche an einer bestehenden Anwendung orientierst, ist der Hersteller machtlos.
Nur Kopieren und Quellcode anschauen (auch Dekompilat) ist strikt verboten.

Ansonsten wären Microsoft, Apple, jeder Linux-Distributor und die meisten anderen Softwarehäuser schon längst pleite, da sie ständig wegen irgend einem graphischen Detail, das irgendeiner der Millionen Programmierer bereits vor ihnen hatte, verklagt würden.

Thema: Generische Event-Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich fürchte, ich habe den Unterschied zwischen public event myEventType myEvent; und public Event<myEventType> myEvent; nicht ganz verstanden...