Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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?
RE: HWND auslesen, funktioniert nicht mit jedem PC
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.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
RE: HWND auslesen, funktioniert nicht mit jedem PC
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 ) 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.
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
RE: HWND auslesen, funktioniert nicht mit jedem PC
(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 ) 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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: HWND auslesen, funktioniert nicht mit jedem PC
(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 ) 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.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
RE: HWND auslesen, funktioniert nicht mit jedem PC
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.
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
23.04.2012, 10:30 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2012 10:31 von Mischa E.)