LabVIEWForum.de
HWND auslesen, funktioniert nicht mit jedem PC - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: HWND auslesen, funktioniert nicht mit jedem PC (/Thread-HWND-auslesen-funktioniert-nicht-mit-jedem-PC)

Seiten: 1 2


HWND auslesen, funktioniert nicht mit jedem PC - Mischa E - 18.04.2012 13:14

Hallo zusammen,

das angehängte Vi. funktioniert nicht auf jedem PC mit LabVIEW 2010 SP1.
Wenn es nicht funktioniert wird eine 0 ausgegeben.

Es wird die User32.dll eingebunden und mit FindWindowA soll der HWND Wert zurückgegeben werden.

Hat einer von euch eine Idee warum, es auf manchen PCs funktioniert und auf manchen nicht?
Ist dies ein bekanntes Windows oder LabVIEW Problem?
Wisst ihr einen Lösungsansatz?

Vielen vielen Dank!

Gruß
Mischa


RE: HWND auslesen, funktioniert nicht mit jedem PC - jg - 18.04.2012 13:30

Ich tippe mal darauf, dass das ganze unter Windows Vista oder Win 7 nicht funktioniert, wenn die Benutzer-Rechte nicht ausreichen.

Gruß, Jens


RE: HWND auslesen, funktioniert nicht mit jedem PC - rolfk - 18.04.2012 14:36

Ein weiterer Punkt könnte der Umstand sein dass Du es auf einer 64 Bit Installation versuchst. Dort sind alle Pointer (und auch Windows Handles) 64 Bit, sodass der erste Parameter lpszClassName der mit einer 32Bit Null initialisiert wird, die anderen 32 Bit undefiniert (und sehr wahrscheinlich nicht NULL) hat, sodass Windows versucht diesen String zu interpretieren was dann natürlich fehlschlagen muss. Dazu sollte man sowohl den Returnwert der Funktion als auch diesen ersten Parameter als Pointersized Integer konfigurieren.

Wenn ein NULL Handle zurückkommt ist ein Fehler aufgetreten den man mit GetLastError() abfragen kann. Aber das ist in LabVIEW nicht ganz trivial. Den GetLastError() muss unmittelbar nach der Funktion die den Fehler erzeugt hat im selben Thread aufgerufen werden. Die einzige Möglichkeit um zu garantieren, dass zwei Call Library Nodes im gleichen Thread und ohne dass dazwischen andere Interaktionen von anderen Teilen von LabVIEW aufgerufen werden, ist um die Call Library Nodes auf reentrant zu setzen und das SubVI als Subroutine zu konfigurieren. Dazu muss man aber auch die VI Server Funktionaliteit herausnehmen, denn das ist in einer Subroutine nicht gestattet.


RE: HWND auslesen, funktioniert nicht mit jedem PC - Mischa E - 18.04.2012 16:48

Ich habe natürlich vergessen mein Betriebssystem zu nennen. Ich nutze Windows XP SP3 als 32Bit Version


RE: HWND auslesen, funktioniert nicht mit jedem PC - rolfk - 18.04.2012 17:24

(18.04.2012 16:48 )Mischa E schrieb:  Ich habe natürlich vergessen mein Betriebssystem zu nennen. Ich nutze Windows XP SP3 als 32Bit Version

Dann versuch es mal hiermit und sage uns was für ein Fehler da auf diesen Maschinen zurückgegeben wird.

[attachment=39509]


RE: HWND auslesen, funktioniert nicht mit jedem PC - Y-P - 18.04.2012 18:04

Hallo Rolf,

ich wollte Dein VI gerade auch testen, aber man kann es leider nicht ausführen, erstens da der Run-Button fehlt und er sich auch nicht einblenden lässt (ist in den LabVIEW-Properties ausgegraut Blink) und zweitens auch nicht mit CTRL+R.

Gruß Markus

(18.04.2012 17:24 )rolfk schrieb:  
(18.04.2012 16:48 )Mischa E schrieb:  Ich habe natürlich vergessen mein Betriebssystem zu nennen. Ich nutze Windows XP SP3 als 32Bit Version

Dann versuch es mal hiermit und sage uns was für ein Fehler da auf diesen Maschinen zurückgegeben wird.



RE: HWND auslesen, funktioniert nicht mit jedem PC - jg - 18.04.2012 19:38

(18.04.2012 18:04 )Y-P schrieb:  ich wollte Dein VI gerade auch testen, aber man kann es leider nicht ausführen, erstens da der Run-Button fehlt und er sich auch nicht einblenden lässt (ist in den LabVIEW-Properties ausgegraut Blink) und zweitens auch nicht mit CTRL+R.
@Markus: Dann geh mal in die "Execution"-Abteilung der VI-Properties.
Das VI steht auf Priority = subroutine, deshalb kein Run-Button.

Gruß, Jens


RE: HWND auslesen, funktioniert nicht mit jedem PC - rolfk - 19.04.2012 06:03

(18.04.2012 18:04 )Y-P schrieb:  Hallo Rolf,

ich wollte Dein VI gerade auch testen, aber man kann es leider nicht ausführen, erstens da der Run-Button fehlt und er sich auch nicht einblenden lässt (ist in den LabVIEW-Properties ausgegraut Blink) und zweitens auch nicht mit CTRL+R.

Natürlich! Das VI ist als Subroutine gesetzt. Aber, bitte nicht ausschalten! Sonst liest die GetLastError() Funktion irgendwas aber nicht den Error der durch FindWindow() erzeugt wurde. Das habe ich in meinem ersten Post zu erklären versucht.

Was Du machen musst ist ein zweites, normales VI wo Du auch die VI Server Property Node hineinlegen kannst um den Namen dieses VI Windows zu erhalten, diesen an das Subroutine VI übergeben und dann den HWND und den Error Cluster auf das Frontpanel dieses neuen VIs führen.


RE: HWND auslesen, funktioniert nicht mit jedem PC - Y-P - 19.04.2012 08:46

Wall Klar. Danke.

Gruß Markus

(18.04.2012 19:38 )jg schrieb:  @Markus: Dann geh mal in die "Execution"-Abteilung der VI-Properties.
Das VI steht auf Priority = subroutine, deshalb kein Run-Button.



RE: HWND auslesen, funktioniert nicht mit jedem PC - Mischa E - 23.04.2012 10:30

Hallo zusammen,

Vielen Dank für die rege Beteiligung!!

Ich habe die Routine wie im Bild gezeigt eingebunden. Ich erhalte als FehlerCode eine Null zurück.
Das ist glaube ich nicht das gewünschte Ergebnis. Confused

Habe ich die Subroutine falsch eingebunden? Muss ich sonst etwas einstellen?

Vielen Dank!

Gruß
Mischa