Windows 8 u. 10 Problem mit sendmessage User32

  • VB6

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

    Windows 8 u. 10 Problem mit sendmessage User32

    Hallo,

    wir nutzen betrieblich eine Anwendung, die nicht mehr supportet wird, jedoch weiter im Einsatz ist.
    Es ist mit Visual Basic 6 programmiert.

    Es handelt sich um eine Fullscreen-Anwendung, die durch hinterlegbaren Öffnungszeiten den Monitor ausschalten und wieder einschalten kann.
    Das funktioniert mit Windows bis Version Windows 7 100%ig.

    Mit Windows 8.1 und Windows 10 funktioniert es nicht sauber: Erst wenn ich eine beliebige Taste an der Tastatur drücke bekomme ich wieder direkt ein Bild.
    Im produktiven Einsatz werden jedoch keine Tastaturen verwendet, da es sich um eine reine Anzeige-Anwendung handelt.

    Ich nehme an, dass der Monitor per "sendmassage" aus- und eingeschaltet wird und sich in der API für Windows 8 und Windows 10 dort Details geändert haben.

    Meine Hoffnung ist nun, dass ich per Windows-Einstellungen das Verhalten von Windows 8 und besonders Windows 10 ändern kann, sodass kein Tastendruck mehr nötig ist.

    Leider wird die Anwendung nicht mehr angeapsst / gewartet (Den Tastendruck per VB-Kommando umsetzen).


    Hat jemand Idee welche Einstellungen ich durchtesten könnte? Die Energiespareinstellungen habe ich bereits geprüft.
    Oder andere Tipps?


    Gruß Johannes

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich befürchte nicht, dass du auf dem Weg weiter kommst.
    Du wirst wohl am besten ein kleines Extra Script laufen lassen zu bestimmten Zeiten welches einfach eine Mausbewegung simuliert. (autoit script zB)
    Das ist meine Signatur und sie wird wunderbar sein!

    Johannes_ schrieb:

    die nicht mehr supportet wird
    Sind die Quellen davon da, dass man diese Applikation auf .NET übertragen könnte?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Auch wenn einige Fragen noch offen sind, vermute ich, dass es an mangelnden Rechten liegt. Ich hatte das Problem damals beim Upgrade von Win7 auf Win10, da plötzlich meine Programme, die unserer Betriebssoftware Eingaben vorgaukelt, nicht mehr funktionierten. Nach einiger Zeit stellte ich fest, dass es ging, wenn ich meinem Programm (entweder codebasiert oder beim Programmstart über den Win-Explorer) Adminrechte gab.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Guten Morgen,

    per autoit Script eine Mausbewegung oder Tastendruck zu erzeugen wäre ein möglicher Workaround. Danke.

    Der Source-Code liegt vor. Diesen jedoch in .Net zu übertragen wird keine Option sein...

    Wenn es nur an den Rechten liegt wäre ich sehr erfreut. Ich probier es noch einmal aus.
    Es handelt sich jedoch bei den Rechnern immer um neue Windows 10 installationen per Image. (Generell keine Upgrades.)


    Edit: Es handelt sich um ein Standalone Test-PC mit lokalem Administrator-Konto. Die UAC ist deaktiviert und die Anwendung wurde per "Als Administrator ausführen" gestartet.
    Es sollten somit alle Rechte vorhanden / übergeben sein. Leider ergab es keine Änderung im Verhalten.

    Jetzt teste ich es mit einem autoit Script.


    Gruß Johannes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Johannes_“ ()

    Johannes_ schrieb:

    Das ist die Entscheidung vom Chef.
    Solche Chefs lieben wir.
    Leider wird sich hinterher rausstellen, das es besser gewesen wäre, die Übertragung nach .NET gleich gemacht zu haben. Persönliche Erfahrung. 8o
    Wenn Ihr so weit seid, melde Dich wieder, sprich mich dann explizit an. Bis dahin bin ich draußen.
    Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    wenn der SourceCode vorhanden ist, kann man auch einfach noch die nötigen Zeilen Code ergänzen und neu kompilieren.

    Ich habe eben mal die Tipps VBNET und VB6 getestet. Beide verhalten sich unter Win10 so, wie hier beschrieben. Der Monitor wird zwar abgeschaltet, einschalten geht z.B. durch Mausbewegung. Dafür braucht man auch nicht die 10 Sekunden abwarten.

    Das Aufwecken funktioniert bei mir mit einem simulierten Tastendruck, welchen ich dem frei verwendbaren Code hinzugefügt habe:

    Visual Basic-Quellcode

    1. 'Dieser Quellcode stammt von http://www.activevb.de
    2. 'und kann frei verwendet werden. Für eventuelle Schäden
    3. 'wird nicht gehaftet.
    4. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
    5. 'Ansonsten viel Spaß und Erfolg mit diesem Source!
    6. '------------- Anfang Projektdatei Project1.vbp -------------
    7. '--------- Anfang Formular "Form1" alias Form1.frm ---------
    8. ' Steuerelement: Timersteuerelement "Timer1"
    9. ' Steuerelement: Schaltfläche "Command1"
    10. Option Explicit
    11. 'Für simulierten Tastendruck ergänzt BEGINN***
    12. Private Type INPUT_TYPE
    13. dwType As Long
    14. xi(0 To 23) As Byte
    15. End Type
    16. Private inputEvent(0) As INPUT_TYPE
    17. Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long) As Long
    18. 'Für simulierten Tastendruck ergänzt ENDE***
    19. Private Declare Function SendMessage Lib "user32" Alias _
    20. "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _
    21. Long, ByVal wParam As Long, lParam As Any) As Long
    22. 'Update am 6. April 2003: der Monitor sollte sich nun auch
    23. 'unter Windows 2k/XP abschalten
    24. Const WM_SYSCOMMAND = &H112&
    25. Const SC_MONITORPOWER = &HF170&
    26. Private Sub Command1_Click()
    27. Timer1.Interval = 10000
    28. Timer1.Enabled = True
    29. SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal 2&
    30. End Sub
    31. Private Sub Form_Load()
    32. Timer1.Enabled = False
    33. End Sub
    34. Private Sub Timer1_Timer()
    35. Timer1.Enabled = False
    36. 'SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal -1& 'Klappt unter Win10 nicht mehr.
    37. 'Für simulierten Tastendruck ergänzt BEGINN***
    38. SendInput 1, inputEvent(0), Len(inputEvent(0)) '
    39. 'Für simulierten Tastendruck ergänzt ENDE***
    40. End Sub
    41. '---------- Ende Formular "Form1" alias Form1.frm ----------
    42. '-------------- Ende Projektdatei Project1.vbp --------------
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Hallo,

    dann korrigiere den Code bitte. Ich habe ihn lediglich neulich schnell aus dem Netz gezogen und getestet. Der Test diente lediglich dazu, ob es mit einer Portierung auf VB.NET getan wäre. - Ist es nicht. Scheint, als ob der Befehl "Monitor ein" nicht (mehr) funktioniert.
    Gruß
    Peterfido

    Keine Unterstützung per PN!