Vielen Dank für Deine Zeit und die Hilfe.
Die Acrobat-dll funktioniert jetzt sogar. Aber es gibt nur "Save" kein "Save As". Leider! Und eine brauchbare Doku dazu gibt es natürlch auch nicht.
Dann bleibt wohl wirklich nur der von Dir vorgeschlagene Weg. Ich werde es versuchen...
Vielen Dank erstmal für die Antwort.
Wie kann ich Acrobat "automatisieren". Ich würde ja eigentlich nur "Öffnen", "Speichern unter..." und "Schließen" benötigen.
Ich habe das versucht, indem ich die Acrobat-Bibliothek eingebunden habe (Interop.Acrobat.dll).
Das geht erstmal, die Objekte gibt es auch - aber dann tut sich einfach nichts. Fehlermeldungen gibt es auch nicht.
Ich möchte eigentlich etwas recht triviales - finde aber keine Lösung:
Ich muss aus C# heraus eine PDF-Datei in eine Text-Datei konvertieren. Es soll eigentlich die gleiche Funktion sein, die im Dialog im ACROBAT-Reader als "Speichern unter..." zur Verfügung steht.
Der Acrobat-Reader ist natürlich vorhanden. Wie komme ich an diese Funktion heran, ohne umfangreiche Zusatzbibliotheken zu installieren?
Ich habe ein ACROBAT-Credential, aber ich finde kein Beispiel, wie ich es damit lösen kann. Auch die freie Bibliothek iText 7 ermöglicht das ggf., aber ich bekomme es nicht hin.
Einige Lösungen, die ich bisher fand (z.B. https://stackoverflow.com/questions/42761048/c-sharp-convert-pdf-to-txt)) funktionieren nicht.
Wichtig wäre dabei auch, dass die Ausgabedatei die gleiche Struktur hat, die ACROBAT erzeugt.
Hat de jemand ggf. eine Lösung?
Vielen Dank schonmal.
Ich habe eine WPF-Applikation. Seit kurzem werden mir unzählige Fehler CS0103 in der Fehlerliste angezeigt, z.B. auch dass "InitializeComponent()" im aktuellen Kontext nicht vorhanden wäre. Auch viele WPF-Elemente betrifft dies.
Aber die Applikation lässt sich problemlos (auch im Debug-Modus) starten und läuft dann fehlerfrei durch.
Was könnte der Grund sein?
Danke!
Hallo,
ich erzeuge aus C# heraus eine neue Powerpoint-Datei und verknüpfe darin externe Bilder.
Öffne ich später diese Datei, so sind aus Datenschutzgründen die Bilder deaktiviert und unsichtbar. Es muss jedesmal manuell die Aktivierung freigegeben werden. Dann dauert es eine ganze Weile bis Powerpoint die Bilder aktiviert hat. Dann ppt-File speichern, schließen und neu öffnen - dann ist alles ok.
Sobald ich diese Datei an eine andere Position kopiert habe, geht das ganze Spiel von vorn los.
Hat jemand eine Idee, wie ich das per C#-Code umgehen kann?
Danke für Eure Tipps!
Vielen Dank für den Tip.
Das Verzeichnis habe ich jetzt gefunden.
Wie Du schon angedeutet hast, scheitert es jetzt daran, die Datein dort auch zu lesen.
... mal sehen, was das wird;-)
Ich schreibe an einer Maui-App für ein Android-Handy. In Maui bin ich sehr unerfahren.
Die App funktioniert soweit auch schon recht gut.
Aber ich habe das Problem, dass es mir nicht gelingt auf ein Standardverzeichnis, z.B. das standardmäßige Verzeichnis "Music" zuzugreifen.
Ich versuche es mit 'Environment.GetFolderPath(Environment.SpecialFolder.MyMusic)'. Da wird auch ein Verzeichnis zurückgegeben:
"/data/user/0/com.companyname.franzmaui/files/Music"
(Das Projekt heißt 'franzmaui')
Aber das ist nicht das sichtbare Music-Verzeichnis. Ich kann in das mir zurückgegebene Verzeichnis auch schreiben oder z.B. neue Unterordner erzeugen. Aber auch die sind anschließend nicht zu finden.
Wie komme ich zu der korrekten Pfadangabe?
Danke schon mal!
Sorry - Ich habe ein wahrscheinlich triviales Problem, welches ich trotz x-facher Versuche und Recherchen nicht lösen kann:
Mein Datagrid ist an eine Datenbanktabelle als Itemsource gebunden. Sie hat zwei (sichtbare) Spalten. Ich trage in einer der Spalten in einer neuen Zeile etwas ein. Dann möchte ich im "CellEditEnding"-Trigger diese Eingabe auswerten und die zweite Spalte füllen.
Mache ich das z.B. in der ersten Spalte und verlasse diese mit Tab (dann in die zweite Spalte) funktioniert dies.
Trage ich den Wert jedoch in die zweite Spalte ein und verlasse diese, ist der im Trigger in die erste Spalte eingetragene Wert nicht zu sehen. Erst wenn ich z.B. diese Zelle nochmals selektiere erscheint der Eintrag. Dies geschieht auch, wenn ich die erste Spalte z.B. verlasse, indem ich irgendeine andere Zelle mit der Maus selektiere.
Der Trigger läuft in jedem Fall fehlerfrei durch.
Was muss ich nur tun?
@Abt: Ja - Du hattest Recht. Ist schon dumm - aber das war mir nicht klar.
Warum die Pakete auf meinem Desktop offensichtlich schon installiert waren, kann ich gar nicht nachvollziehen...
Also nochmal recht vielen Dank!! Jetzt funktioniert alles.
Danke für den Tip. Ich hatte die System.Data.dll einfach neu aufgespielt. Dann war speech da. Aber das Problem nicht gelöst, da dann trotzdem andere Sachen fehlen.
Das Paket braucht man unter .NET6 wohl eher nicht mehr.
Es gibt dazu eine wie ich finde tolle Anleitung unter
https://www.youtube.com/watch?v=2-Ts05KKQA0
Die habe ich benutzt und auf meinem Desktop-Rechner funktioniert das alles super.
Gehe ich mit dieser Applikation in die Entwicklungsumgebung meines Laptop tritt der genannte Fehler auf.
Er findet dann auch z.B. System.Data.OLEdb nicht.
Ich habe keine Ahnung, woran das liegen könnte....
Naja - Fehler gefunden ist zuviel gesagt.
Aber jetzt funktioniert es. Ich habe die System.Speech DLL gelöscht und neu installiert. Nun geht es.
Warum - das ist mir allerdings völlig unklar. Ggf. war die DLL einfach fehlerhaft.
Danke für den Hinweis.
Natürlich ist das .NET6 installiert. Für alle Fälle habe ich es nochmal aktualisiert. Es ist wie geschrieben ein W-11! Ist das da evtl. in System nicht mehr dabei? Das kann ich mir eigentlich nicht vorstellen...
Eingebunden in die App ganz normal mittels "using" - der Rest von System ist ja auch da.
Auf mehreren anderen (allerdings Windows 10-Rechnern) gibt es dieses Problem nicht. Da läuft alles problemlos.
Mit fällt ggw. einfach nichts mehr ein.
Sorry - ich weiß nicht, ob ich in diesem Forum jetzt richtig bin - aber ich habe erstmal nichts passenderes gefunden.
Ich habe eine WPF-Anwendung (mit .NET6) mit einer Text-to-Speech Funktion.
In meiner Entwicklungsumgebung unter Windows 10 funktioniert alles einwandfrei. Aber auf einem anderen Rechner unter Windows 11 gibt es den Namespace System.Speech (bzw. dann System.Speech.Synthesis) nicht.
Hat jemand einen Tipp, woran das liegen könnte und was ich da machen kann/muss?
Vielen Dank!
Danke auch für den Hinweis.
Aber wenn ich mir den erforderlichen Aufwand ansehe, ist die Lösung mit dem Adorner wohl doch viel einfacher und übersichtlicher.
Den größten Vorteil sehe ich darin, dass man die Adorner-Klasse nur einmal quasi universell erstellen muss und diesen Adorner dann für beliebige Objekte verwenden kann. Ich habe mir bzgl. meines Problems z.B. eine Adorner-Klasse mit drei thumbs erstellt (linker Rand, rechter Rand und in der Mitte zum Verschieben des ganzen Objekts). Die nutze ich nun für verschiedenste Objekte der WPF-Oberfläche.
Trotzdem natürlich nochmal vielen Dank für die Idee!
Für alle, die das gleiche Problem haben, würde ich gern auf ein kleines Tutorial verweisen.
In dem wird sehr gut erläutert, wie man eine Resize-Lösung mit dem Adorner hinbekommt.
Ehrlich gesagt: Ohne diese Anleitung hätte ich es niemals hinbekommen - wer kommt schon auf sowas...
Also:
https://www.youtube.com/watch?v=ddVXKMpWGME
Viel erfolg!
Danke - das sieht schon mal gut aus.
Ich hatte davon leider noch nie "gehört"...
Ich habe zu folgender (sorry - m.E. eigentlich trivialen) Frage gesucht, aber nichts passendes gefunden - hat ggf. jemand eine Idee:
Gibt es ein event, welches zieht, wenn sich der Mauscursor über dem Rand(!) eines grafischen (WPF-)Objekts befindet?
Ich möchte die Größe z.B. eines Rechtecks durch "ziehen" mit der Maus ändern und dazu z.B. den Cursor nur dann ändern, wenn er sich über der Begrenzung befindet - nicht im Inneren des Objekts.
Oder gehe ich da überhaupt falsch ran?
Danke schon mal!
Nochmal danke für den Tipp.
Ich schaue es mir mal an...
Danke fü die Hinweise!
Das Verrückte ist ja, dass ich gar nichts in den Report reinschreibe. Nur öffnen - und der Body ist nicht mehr lesbar (auch direkt in de Outlook-Oberfläche nicht mehr).
Bei den Emails funktioniert es völlig problemlos.
Ich nutze in den verschiedensten Applikationen die Objekt-Bibliotheken (hier z.B. die Microsoft Outlook 16.0 object library).
Das funktioniert auch im allg. völlig problemlos und auch auf (aktuellen) Microsoft-Seiten gibt es viele Tipps und Anleitungen, wie damit umzugehen ist.
Da ich ja kein Add-In schreiben will, ist mir ein anderer Weg auch nicht geläufig. Auf die Outlook-Objekte muss ich aber trotzdem zugreifen.
Naja - ich suche mal weiter.
Hallo,
ich muss den Text (Body) von ReportItems in Outlook auslesen. Diese erhält man z.B., wenn eine Email nicht zugestellt werden konnte.
Dies tue ich mittels C# und der Outlook-Bibliothek.
Aber es passiert etwas ganz komisches:
Ich kann den Body lesen und z.B. in eine Stringvariable speichern.
Aber darin stehen nur völlig unleserliche (optisch chinesische) Zeichen. Und obwohl ich nichts zurückschreibe, besteht ab diesem Moment auch der in Outlook lesbare Inhalt des Reports nur noch aus diesem komischen chinesischen Kauderwelch.
Eine Möglichkeit, die ich gefunden habe besteht darin, den Report erst in eine Datei zu schreiben und diese dann wieder zu lesen.
Das funktioniert. Aber das kann doch nicht der richtige Weg sein!
Hat das schon mal jemand gemacht und kennt eine Lösung?
Vielen Dank!
Erst nochmal vielen Dank für die Hilfe!
Ich habe das Problem jetzt gelöst.
Für die Grafikdatein (geht für jpg genauso wie z.B. für heic) nutze ich jetzt den ShellPropertyWriter zum schreiben bzw. IShellProperty zum lesen.
Beide sind aus dem WindowsAPICodePack.
Das geht gut und schnell.
Für die Videos (mp4) geht zum schreiben ebenfalls ShellPropertyWriter gut. Leider funktioniert hier aber das Lesen nicht so simple (IShellProperty gibt nur NULL zurück; Warum auch immer.).
Dazu habe ich deshalb eine Funktion implementiert, die das mittels des ExifTool (https://exiftool.org/) erledigt. Das ist etwas langsamer, funktioniert aber auch gut.
Nochmal danke!
@TH69:
Ganz vielen Dank für den Tipp!
Das Tool hat mir schon mal sehr geholfen. So langsam werde ich Lösungen finden.
Hast Du ggf. auch Erfahrungen mit dem WindowsAPICodePack?
Das arbeitet auch ganz ok, aber hier habe ich einen komischen Effekt:
Ich kann z.B. in eine mp4-Datei folgendes Property schreiben:
ShellPropertyWriter propertyWriter = file.Properties.GetPropertyWriter();
propertyWriter.WriteProperty(SystemProperties.System.Title, "TestText");
propertyWriter.Close();
Erstmal fällt auf, dass der "TestText" nicht im Titel angezeigt wird.
Aber er wird am File angetragen, was eine Abfrage mit "exiftool -Title" zeigt. Da wird genau dieser Text zurückgegeben.
Er steht also wohl irgendwo anders.
Das wäre ja nicht so tragisch (für das, was ich machen möchte).
Aber er lässt sich über die Shell nicht wieder abfragen. Da steht NULL drin (file.Properties.System.Title.Value)
... sehr verrückt.
Ja, das hatte ich.
Gerade habe ich aber gesehen, dass das eine veraltete Version war.
Mit der aktuellen habe ich es jetzt nach x Versuchen hinbekommen.
Jetzt kommt leider schon die nächste Aufgabe:
Viele Kameras machen jetzt .heic-Bilder.
Die haben zwar zum großen Teil auch die gleichen Eigenschaften (z.B. Copyright) - nur das kann das Tool (noch) nicht.
... eine endlose Geschichte.
Trotzdem erstmal vielen Dank. Es ist ja zumindest der Anfang.
Sorry - das hatte ich wohl falsch verstanden.
Aber: Ich habe jetzt die meisten Pakete, die ich unter den Links fand, angesehen.
Eine Lösung meines Problems habe ich dabei nicht gefunden.
Lesen der Metadaten können alle - das kann ich aber auch so.
Aber wie eines schreiben - vor allem, wenn es bisher leer war?
(Und das idealerweise noch, ohne dafür ein riesiges Paket installieren zu müssen...
Hat ggf. jemand ein sinnvolles Beispiel zur BitmapMetadata.SetQuery-Methode? Das (m.E. recht sinnlose) Beispiel in der Hilfe (pngInplace.SetQuery("/Text/Description", "Have a nice day.")😉 bringt mich auch nicht weiter. Kann man die nicht verwenden?
Danke für Eure Hilfe!
Ich habe aber bisher leider keine gefunden (vgl. Anhang)...
Hast Du ggf. nur ein passendes Beispiel?
Ich möchte in einer Bilddatei den Titel schreiben.
Das ist dann simpel, wenn die Bilddatei bereits einen (nicht leeren) Titel hat.
Wenn das nicht der Fall ist, gibt es in der Property-Liste kein Element "PropertyTagImageDescription" (ID 270).
Aber natürlich besitzt die Bilddatei den "Titel" - nur eben leer.
In der Windows-Oberfläche kann man in den Eigenschaften dieser Datei natürlich manuell einen Titel eintragen (die leere Eigenschaft existiert).
Dann erscheint er auch in der Property-Liste.
Das Problem ist, dass die PropertyItem Klasse nicht über einen definierten Public Konstruktor verfügt und man also keine Instanz eines PropertyItem Objekts erstellen kann.
So kann man im Programm auch das Titel-Property nicht hinzufügen.
Obwohl ich intensiv suche, finde ich einfach keine Lösung dafür.
Hat bitte jemand eine Idee, wie man (in meinem Fall) den (bisher leeren) Titel schreiben kann?
Es läuft!!🙂
Fragt bitte nicht warum!
adb zeigte, dass das handy erkannt wurde, aber nicht autorisiert ist.
Darauf (nach weiteren Hinweisen im Netz) habe ich den debug-Modus deaktiviert, adbkey und adbkey.pub im .android-Verzeichnis (mehrfach) gelöscht, edb-Server gestoppt und wieder aktiviert...
...irgendwann ging es.
Im Android-Geräte-Manager gibt es das Gerät zwar immer noch nicht, aber beim debug-start wird es erkannt.
Ich bin gespannt, ob das eine stabile Lösung ist...
Vielen dank erstmal an dieser Stelle für die vielen Tipps. Ohne die wäre ich wohl nicht weiter gekommen.
Ich habe mal eine simple App mit XAMARIN erstellt. Die lässt sich auf dem handy zumindest installieren (stürzt dann allerdings auch sofort wieder ab).
Aber der Gerätetyp im Gerätemanager bleibt unbekannt...
Das SAMSUNG-Driver war bereits installiert. Ich habe ihn nochmal neu installiert und alles nochmal runter- und wieder hochgefahren.
Keine Chance!
Müsste man die SAMSUNG-Geräte (also z.B. die Galaxy S-Serie) im Gerätemanager denn nicht eigentlich auch sehen?
Und mir ist auch nicht klar, warum man offensichtlich wirklich für jedes Android-Gerät eine separate Einstellung braucht.
Hast du denn überhaupt schon
> befolgt (davon war ich bisher ausgegangen)?
Ja - selbstverständlich.
USB-Debugging ist aktiv und ich sehe das Handy auch auf dem PC. Nur eben nicht im VS...
Vielen Dank für den Tipp.
Aber ich habe einfach keine chance, das Handy als Ziel anzugeben. Ich habe auch schon im Web gesucht. Aber es hilft nichts. Das gerät ist in VS einfach nicht existent. Auch im Gerätemanager für Android sollte doch ein Samsung aufgeführt sein. Da gibt es aber nur Nexus-Geräte. Hast du da noch einen Tipp?
Es ist ein Galaxy S21 Ultra 5G mit Android 12 (UI-Version 4.1), letztes update vom 1.08.22
Ja klar:
Sie lautet: "Die App wurde nicht installiert, da sie nicht mit deinem Smartphone kompatibel ist."
Aber auf was muss ich achten bzw. einstellen, dass sie kompatibel ist?
Hallo zusammen,
ich versuche gerade, mich mit MAUI etwas näher zu beschäftigen. Ich verwende das mit VS2022 und C#.
Eine erste einfache App funktioniert auf dem Simulator bereits.
Aber ich bekomme es einfach nicht hin, die .apk auf dem Handy zu installieren. Es kommt jeweils beim Installationsversuch die Mitteilung, dass diese App nicht zu diesem Handy passt.
Kann mir evtl. jemand sagen, welche Einstellungen (wohl im Android SDK...?) ich vornehmen muss, dass es zu o.g. Handy passt?
Schon mal vielen Dank!
@Abt: Ja - das wird sich nicht vermeiden lassen.
Auch die Win-Systemfunktionen geben zu W10 andere Rückgabewerte. So sind z.B. teils Größen falsch (doppelt oder halb so groß, wie real. Mal so, mal so).
Probieren wir eben weiter...
Es wird zum unendlichen Problem:
Ich weiß ja nicht, ob schon jemand Erfahrungen mit W11 hat...
Die zuvor diskutierte Lösung funktioniert unter W10 perfekt.
Unter W11 allerdings ist das Window zu sehen, ob nicht ansprechbar. Es reagiert auf keinen Mausklick.
Gibt es da ggf. auch einen Tipp?
Ich habe schon x Versuche gemacht, aber es gelingt nicht, das Window wieder zum Leben zu erwecken.
@Stefan.Haegele: Ganz einfach - ich ersetze und erweitere wesentliche Funktionen der Taskbar (speziell in Hinblick auf W11).
Ich muss wohl erstmal ein wenig schlafen gehen - es funktioniert ja doch, hatte den x-Wert dummerweise als zweiten parameter eingegeben. Er ist natürlich der dritte.
Mit SetWindowPos(hWindow, 0, (int)this.Left, 0, (int)this.Width, (int)this.Height, SWP_NOZORDER | SWP_SHOWWINDOW); ist jetzt alles OK.
Noch mal sorry und vielen Dank!
Ohne SetWindowsPos geht es nicht (Window ist unsichtbar).
Ich nutze die Parameter: SetWindowPos(hWindow, 0, 0, 0, (int)this.Width, (int)this.Height, SWP_NOZORDER | SWP_SHOWWINDOW);
Damit geht es - aber eben immer vorn links. Ändern des x-Werts auf z.B. 200 statt 0 bringt keinen Effekt. Zusätzlich SWP_NOMOVE lässt das Window wieder unsichtbar werden.
Das ist alles schon komisch😉
@dannoe: Das ist ein interessanter Beitrag. Speziell der weiterführende Link Window z-order in Windows 10 – ADeltaX Blog
Ich hatte nicht gedacht, dass Z-Order so kompliziert ist) - ich bin noch beim lesen...
Ich werde mal einen workarround versuchen. Werde das Fenster im linken Teil einfach transparent machen.
Th69: Noch eine letzte Frage. Jetzt schiebt er mein Window aber immer gnadenlos an das linke Ende der Taskbar. Da hilft auch kein Eintrag in SetWindowsPos. Kennst Du da eine Lösung - also quasi relatives Verschieben zur Taskbar?
Th69: Sorry - ich habs!
SetWindowPos gesetzt - und schon funktioniert alles😉
Nochmal vielen Dank - jetzt hab ich die Lösung.
@Th69:
Nochmal vielen Dank für Deine Mühe!
Also: "So soll es sein" zeigt, wie sich das Window darstellt, wenn ich es starte und über der Taskbar positioniere. Da funktioniert alles wie gewünscht.
"So ist es" zeigt das Window, sobald ich die Taskbar selbst benutzt habe - dann verschwindet mein Window hinter der Taskbar. Und genau das möchte ich vermeiden!
Topmost ist gesetzt, hilft aber in diesem Fall leider nichts. Andere Einstellungen, die m.E. relevant sein könnten, sind nicht gesetzt. Einen Rahmen hat das Window nicht.
hWindow hatte ich wirklich zu früh abgefragt. Ich habe den teil nach "hinten" geschoben. Jetzt kommt ein Wert und die Funktionen laufen auch sauber durch.
Allerdings ist der Effekt nun, dass das Window komplett unsichtbar wird. Das ist natürlich auch nicht hilfreich. Kann man das (nun als Kind der Taskbar) wieder sichtbar machen? Ich werde mal ein wenig experimentieren. Oder hättest Du da noch einen Vorschlag?
Viele Grüße und Dank!
@Abt: Nein, es soll kein kiosk-Modus sein.
@TH69:
Vielen Dank für die ausführliche Antwort.
Die Taskbar ist nicht aus-/einblendbar. Ein Window kann man aber problemlos drüberlegen - ich habe mal zwei Bilder angefügt.
Leider funktioniert sie nicht.
Eigentlich war die Idee, das Window als Child der Taskbar zu definieren, die Beste. Denn wenn die Taskbar nicht sichtbar ist, dann brauche ich das Fenster nicht unbedingt.
Aber es tuts nicht.
Habe die drei Zeilen so genutzt:
IntPtr hWindow = new WindowInteropHelper(this).Handle;
IntPtr hTaskbar = FindWindow("Shell_TrayWnd", "");
SetParent(hWindow, hTaskbar);
Eine Frage dazu: Ist es normal, dass IntPtr hWindow = new WindowInteropHelper(this).Handle; hWindow auf 0#00000000 setzt?
Die Links muss ich noch genauer ansehen.
Hallo zusammen,
hat jemand zu folgendem Problem eine Idee:
Ich habe ein WPF-Window (nicht-maximiert). Dieses positioniere ich über der Taskbar. Sobald ich jedoch die Taskbar nutze, wird diese über mein Fenster gesetzt.
Genau das möchte ich vermeiden.
Da hilft auch (z.B.) kein Topmost.
Grund ist, dass das betreffende Fenster sehr klein ist und im Normalfall genau über der Taskbar posiitoniert wird - d.h. es verschwindet einfach, wenn die Taskbar genutzt wird.
Hat da evtl. jemand eine Lösungsidee?
Vielen Dank für den Tipp.
Die Lösung war eine andere:
Die Windows.winmd im Release 10.0.19041.0 enthält den Namespace nicht.
Ich habe es dann mal mit der Version 10.0.18362.0 versucht. Und dort ist alles OK.
Keine Ahnung warum ...
Gruß
Ralph