Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 2 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Werte in W7 Registry schreiben
04.01.2016, 14:57
Beitrag: #1
Werte in W7 Registry schreiben
Servus!

Mein VXE Programm passt sich mittlerweile abhängig von der zur Verfügungen stehenden Bildschirmauflösung an.
Mein Programm läuft auf der linken Seite des Bildschirmes, Excel soll rechts davon angezeigt werden. Da ich die aktuelle Bildschirmauflösung in meinem Programm bereits kenne, möchte ich jetzt die Startposition und Startgröße für Excel in VEE (VXE) berechnen. Das habe ich bereits verwirklicht.

Die Position und Größe für Excel ist in der Registry gespeichert.
Ich habe das Beispiel "Registry.vee" gefunden. Dort ist beschrieben, wie ein Schlüssel mit dem dazugehörenden Wert ausgelesen werden kann.
Den Schlüssel für die Fensterposition von Excel kann ich auslesen.

Leider kann ich in diesen Schlüssel mit der von mir gefundenen (verwendeten) .NET Funktion keinen Wert zurückschreiben. Es wird von VEE der Fehler 751 ausgegeben.

Vielleicht verwende ich die Falsche Funktion oder es muß dafür noch eine weitere Instanz gestartet werden, welche ich nicht kenne.

Ein Bild mit meiner nicht funktionierenden Funktion habe ich beigefügt.

Vielleicht kann mir jemand helfen.

PS: Mein Rechner wird durch unsere IT Administriert, ich habe nur "USER" Rechte.
Der händische Aufruf von Regedit funktioniert und da kann ich den Wert des POS Schlüssels verändern. Die Auswirkungen sieht man auch sofort beim nächsten Start von Excel.

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 11:41 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2016 11:46 von detlef.)
Beitrag: #2
RE: Werte in W7 Registry schreiben
Duerfte wohl nur mit Admin Rechten gehen.
Ich wuerde es anders machen: Excel Fenster, Windows Taste und rechter Pfeil...
Setz das mal in VEE um:
Excel window handle rausfinden, dann auf rechte Seite bringen per Tastenkombi...
Andererseits, wenn du die Sache mit dem Windows handle fuer VEE gemacht hast und dann das Fenster vorgibts, brauchst du nur den Handle fuer Excel eintauschen und die anderen Koordinaten angeben.
Nix mit Registry !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 13:39
Beitrag: #3
RE: Werte in W7 Registry schreiben
Ja, da hast Du leider Recht. Das mit der Registry ist nicht so einfach. Auf meinem Rechner (W7 32 bit, USER Rechte) klappt das ganz toll. Auf meinem Testrechner (W7 64 bit, ADMIN Rechte) mault das System, wenn der Schlüssel geschrieben werden soll. Wenn ich die Windows Warnmeldung "Ja" bestätige, funtioniert es, ist aber nervig. Irgendwie komisch.

Da ich das Schreiben eines Reg.Key direk aus Vee nicht umsetzten konnte, bin ich den Umweg über Regedit gegangen. Funktioniert erst mal, aber nicht vollständig zufriedenstellend s.o. Das Bildschirmfoto zeigt wie ich es momentan gelöst habe.
   

Mit hwind... den Handle herausfinden hab ich noch nicht ganz verstanden. Bisher habe ich doch den Handle für VEE bekommen, weil ich diese Funktion aus VEE aufgerufen habe. Wie finde ich jetzt den Handle für Excel raus? Wie muß da der Aufruf aussehen?
Das wäre die Lösung, welche mir am besten gefallen würde.

Für die Aktion mit Sendkeys fehlt mir die Beschreibung für die "Windows" Taste. Das würde gehen, ist aber nicht ganz nach meinem Geschmack. Weil ich dadurch nur feste Grenzen von Windows verwenden kann und das nicht auf meine Bedürfnisse anpassen kann.

Zudem kann ich dann mit xlap.... Werte nach Excel schreiben, wenn ich Excel über Sendkeys starte? Ich glaube nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 14:38 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2016 14:40 von detlef.)
Beitrag: #4
RE: Werte in W7 Registry schreiben
Ne Ne, Excel wird nicht ueber Sendkeys gestartet, Sendkeys uebernimmt nur die Aktion, die man sonst selbst haendisch an der Tastatur machen wuerde. Ein KEyboard Simulator sozusagen.

Aber mal einfach: nur die Window Handles rausfinden- fuer VEE war das das aktuell aktive, geht aber auch ueber den Namen. Die alte Version suchte da nach HP VEE oder Agilent VEE - ist ja jetzt Keysight VEE und deshalb wurde es nicht gefunden.

Aber genauso laesst sich nach dem Excel Namen suchen.

Vee starten, da die VEE Fenster Einstellunegn machen, dann die Excel Lib aufrufen, excel auf Visible.
dann den Excel Windows handle suchen, dann die Fensterposition und Groesse bestimmen.
Dann alles so weiter machen, wie du es wuenscht.
Man muss aber aufpassen, wenn Excel ferngesteuert wird, sollten da keine Benutzereingaben per Tastatur oder Maus gemacht werden- da verliert die VEE Fernsteuerung den Fokus auf Excel mit den tollsten Effekten.

Hier mal was zu Whandle und Suche....
jetzte aber...
Ne Ne, Excel wird nicht ueber Sendkeys gestartet, Sendkeys uebernimmt nur die Aktion, die man sonst selbst haendisch an der Tastatur machen wuerde. Ein KEyboard Simulator sozusagen.

Aber mal einfach: nur die Window Handles rausfinden- fuer VEE war das das aktuell aktive, geht aber auch ueber den Namen. Die alte Version suchte da nach HP VEE oder Agilent VEE - ist ja jetzt Keysight VEE und deshalb wurde es nicht gefunden.

Aber genauso laesst sich nach dem Excel Namen suchen.

Vee starten, da die VEE Fenster Einstellunegn machen, dann die Excel Lib aufrufen, excel auf Visible.
dann den Excel Windows handle suchen, dann die Fensterposition und Groesse bestimmen.
Dann alles so weiter machen, wie du es wuenscht.
Man muss aber aufpassen, wenn Excel ferngesteuert wird, sollten da keine Benutzereingaben per Tastatur oder Maus gemacht werden- da verliert die VEE Fernsteuerung den Fokus auf Excel mit den tollsten Effekten.

Hier mal was zu Whandle und Suche....


Angehängte Datei(en)
.vee  Call_Panel2.vee (Größe: 3,39 KB / Downloads: 3)
.vee  Processes_Running_mod_SwitchToWindow.vee (Größe: 19,58 KB / Downloads: 1)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 15:43 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2016 15:48 von MaxSchmidtFan.)
Beitrag: #5
RE: Werte in W7 Registry schreiben
Danke für die Funktion, hab mir die mal geholt und versuche die zu verstehen. Das es mit SendKeys so nicht wirklich funktioniert, hab ich mir gedacht. Wäre trotzdem gut, den Tastencode für die "Windows-Taste" zu kennen.
Die "Processes.....Window" holt mir zumindest mein vorerst per Hand gestartetes Excel in den Vordergrund. Wie das genau funktioniert, verstehe ich auf die schnelle nicht.
Den Rest den Du beschrieben hast muß ich erst noch ausprobieren. Die Bastelzeit ist leider vorbei, am Donnerstag kommt der Capo wieder, dann gibt es leider anders zu tun.

Danke nochmal für die Hilfe.
Trotzdem wäre es für mich auch gut, zu verstehen, warum die .NET Funktion "registryKey.SetValue(name, value)" mit dem Fehler 751 die Aufgabe verweigert. Ich bin mir Sicher das der zugehörige .NET Aufruf nicht ganz korrekt ist. Aber wie kann ich das erkennen, ob es der Aufruf ist oder eine fehlende Instanz?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 11:59 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 12:38 von detlef.)
Beitrag: #6
RE: Werte in W7 Registry schreiben
Mist, einmal "ESC" zu viel gedrueckt , un mein ganzer Text hier war weg....

Also dann von neuem getippert:

a) USER Rechte: wahrscheinlich hat das regedit mehr Rechte als deine VEE-Instanz.
Versuch mal, VEE explizit als Admin zu starten ( Run as Admin)...tut es dann?
Ist halt immer so eine Sache mit der UAC in WIn7 +....

B)
Sendkeys wuerde ich nun ueber DOTNET benutzen, infos ueber BING z.B: Sendkeys window key:

System.Windows.Forms.SendKeys.SendWait("xxxx");

window Taste ist CTRL +ESC , dann noch Pfeil Links.

in dem alten Sendkeys Beispiel ( also ohne DOTNET ) waere es dann:

"(^{ESC}{LEFT})" oder so....muss ich selber testen...
Ach ja, dein Excel ist ja rechts, also arrow rechts...aber zuerst muss das Excel Fenster active sein, also den Fokus bekommen....
Also bei meinem WIN 7 tut CTRL_ESC nicht das selbe wie die WIn Taste, mal weiter suchen bei MS...
So, vergessen wir mal sendkeys und Windows aero, und lesen dies hier:
http://stackoverflow.com/questions/18313...-of-screen
Eine schoene Erklaerung, einfach mal folgen. Zeigt den aktuellen Stand der "Ermittlung".
http://rlbisbe.net/2013/11/19/moving-win...winresize/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 18:44
Beitrag: #7
RE: Werte in W7 Registry schreiben
Wie finde ich den Whandle von Excel?
examples/contrib/win32api/user32_dotnetHandle

und da dann einfack process name "VEE" gegen "Excel" tauschen, und sollte dann tun ;-) , wenn Excel auf ist und aktiv...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 10:31
Beitrag: #8
RE: Werte in W7 Registry schreiben
Servus und vielen Dank für Deine Hilfe.

Habe mir Deine Vorschläge angeschaut und umgesetzt. Verstehe zwar nicht ganz, was da alles passiert. Macht aber nix, es funktioniert ohne Registry Werte schreiben zu müssen. Auch auf meinem W7 64 bit Testrechner mit Vee Runtime. Shy

Allerdings muß ich noch die "user32.h" Datei in den Ordner meines Projektes kopieren, damit ich auf die Funktionen der "user32.dll" zugreifen kann.
Die "user32.h" habe ich mir mit dem Texteditor angeschaut. Soweit ich das verstehe, sind dort die .NET Aufrufe deklariert.
Anstatt nun eine "user32.h" Datei mit dem Programm weitergeben zu müssen, würde ich diese Textdatei gerne selbst erzeugen.
Hier habe ich noch nicht ganz verstanden, wie ich die Anweisungen aus der "user32.h" in die untenstehende "Write def" einfügen muß, damit ich diese "user32.h" selbst erzeugen kann.
   
Vielleicht hat das ja schon jemand gemacht und postet das VEE Programm dazu. Ansonsten würd ich mich über eine Anleitung freuen, damit ich die selbst erstellen kann.Undecided
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 11:40 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2016 11:47 von detlef.)
Beitrag: #9
RE: Werte in W7 Registry schreiben
Ist
eigentlich in den anderen Beispielen schon drin.
Der Trick ist es, diese .h in eine Konstante einzulesen, und diese dann auf deinen Rechner abzuspeichern, wenn noch nicht dort vorhanden.

Es gibt halt mehrere Wege, die Sache mit der .dll , nix anderes als ein Programm, welches aufgerufen wird ( als Bibliothek), man muss dort nur die Definitionen der EIn/Ausgabe benennen, dazu dient die .h ...
Man koennte dies auch alles ueber Dotnet machen. Die "alte" Windows API dient halt zur Kompatibilitaet.

Wenn du nun ein wenig fit in dotnet bist, mach doch das alles in dotnet....dann brauchst du die alten Aufrufe mittels .dll und .h nicht.

Allerdings, es wird nur dotnet 2.0 bei VEE benutzt, win 10 ist schon bei 4.5, auf manchen Rechnern ist 2.0 gar nicht mehr installiert, da muss man checken und nachinstallieren- wenn VEE installiert wird, wird ja auch dotnet 2 dazugepackt...
Mach das mit der .h als Konstante , siehe hier:
http://www.veeforum.de/excel-diagramm-t-418.html
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 13:26
Beitrag: #10
RE: Werte in W7 Registry schreiben
Servus und Danke.

Hätt ich auch selber drauf kommen können mit dem Einlesen einer Datei in ein Array und dann wieder her nehmen. Mach das halt nicht so oft. Das demonstriert doch wieder wie mächtig VEE eigentlich ist.

Jetzt mach mein Programm alles wie ich es mit vorgestellt hab. Vielen Dank für die bisherige Unterstützung.Big Grin
Vielleicht brauch ich noch mal den ein oder anderen Rat, wenn ich das mit .Net versuche zu realisieren.
Muss mich jetzt wieder um meine Baustellen und deren Sensoren kümmern.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 14:35
Beitrag: #11
RE: Werte in W7 Registry schreiben
Dann ist ja alles supi.

Setz doch mal deinen Loesungsansatz als Kurzform ( ohne deine Geheimnisse) hier rein .

Und die andere Sache mit dem Write Def ist nix anderes als ein Menue-I/O-toFile Object...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:




Partnerforen: LabVIEWForum.de| DIAdem-Forum.de| Machine-Vision-Forum.de| goMatlab.de| VEEforum.de