tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルKeybd_Eventでのモニターリセット
記事No12062
投稿日: 2021/03/05(Fri) 15:17
投稿者九州男児
Visual BasicでKeybd_Eventを使用してモニターリセット(Win+Ctrl+Shift+B)をするPGを作成したのですが、
Winddows10の.NET Framework4.8系(Release:528040)ではモニターーリセットがうまく動作したのですが
.NET Framework4.8系以下のWindows10では動作しませんでした。
どなたか情報お持ちの方いますか
※キーボード押下でのリセットは当然効きます。

Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

Call keybd_event(&H5B, 0, 0, 0) ' Windowsキーを押す
Call keybd_event(&H11, 0, 0, 0) ' Ctrlキーを押す
Call keybd_event(&H10, 0, 0, 0) ' Shiftキーを押す
Call keybd_event(&H42, 0, 0, 0) ' Bキーを押す

System.Threading.Thread.Sleep(100)

Call keybd_event(&H42, 0, 2, 0) ' Bキーを上げる
Call keybd_event(&H10, 0, 2, 0) ' Shiftキーを上げる
Call keybd_event(&H11, 0, 2, 0) ' Ctrlキーを上げる
Call keybd_event(&H5B, 0, 2, 0) ' Windowsキーを上げる

[ツリー表示へ]
タイトルRe: Keybd_Eventでのモニターリセット
記事No12063
投稿日: 2021/03/06(Sat) 11:47
投稿者魔界の仮面弁士
> Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

最後の引数は ULONG_PTR dwExtraInfo なので、本来の型は IntPtr あるいは UIntPtr ですね。
でもそれが原因かと言われると、ちょっと弱い気もします。


あとは、セキュリティソフトによる阻害ぐらいしか今のところ思い当たりませんでした。

それ以外では駄目元で、Vista 以降の UIPI(ユーザーインターフェイス特権分離)の影響を疑って、
app.manifest で uiAccess="true" を設定してみるぐらいかな…。(可能性は薄そう)


> 動作しませんでした。
<supportedRuntime> を変更した複数の exe を同じ OS 環境で試したのでしょうか。
それとも、同じ exe を、異なる OS 環境で試したという事でしょうか。

ターゲットフレームワークを .NET Framework 2.0〜3.5 にした場合はどうでしょうか。

keybd_event を 4 回呼び出す代わりに、
SendInput の 1 回の呼び出し(4 要素の配列を渡す)に切り替えた場合はどうでしょうか。
※ keybd_event に比べると宣言が面倒ですが…。


> Winddows10の
Winddows10 ではなく
Windows 10 ですね。


> .NET Framework4.8系以下の
以下 ではなく
未満 ですね。


> Visual BasicでKeybd_Eventを使用して
Keybd_Event ではなく
keybd_event ですね。

[ツリー表示へ]
タイトルRe^2: Keybd_Eventでのモニターリセット
記事No12064
投稿日: 2021/03/06(Sat) 17:37
投稿者九州男児
魔界の仮面弁士さま

色々とご指摘、アドバイスありがとうございます。

> 同じ exe を、異なる OS 環境で試したという事でしょうか。

おっしゃる通り同じexeを異なるOS環境で試しました。

試してない事もありますのでアドバイス頂いた内容で試してみます。
結果は改めて投稿します。

[ツリー表示へ]
タイトルRe^3: Keybd_Eventでのモニターリセット
記事No12065
投稿日: 2021/03/10(Wed) 00:04
投稿者九州男児
結果は下記でした。

1.dwExtraInfo型をIntPtr、UIntPtrに変更
    ====> 結果変わらず。

2.uiAccess="true"に変更
    ====> アプリケーションマニフェストのuiAccess属性が'true'に設定されています。
          アクセシビリティアプリケーションを実行するには、ヘルプに記載されている手順に従う必要があります。---> 英語のサイトに遷移

3.SendInputに変更
    ====> 結果変わらず。

やはりWindows 10のバージョンが関連しているような・・・
ちなみにPowerSell、Excelマクロでも同じ結果でした。
もう少し調査してみます。
新たな情報ありましたら宜しくお願い致します。

[ツリー表示へ]
タイトルRe^4: Keybd_Eventでのモニターリセット
記事No12066
投稿日: 2021/03/10(Wed) 11:11
投稿者花ちゃん
> 新たな情報ありましたら宜しくお願い致します。

MapVirtualKey 関数を使って、仮想キーコード・ASCII値・スキャンコード間でコードを変換する必要があるのでは、でないと Shiftキー 等が動作しなかったかと。

下記等を参考にしてみてください。
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=245&no=0
http://hanatyan.sakura.ne.jp/vbhlp/keyevent.htm

[ツリー表示へ]
タイトルRe^5: Keybd_Eventでのモニターリセット
記事No12067
投稿日: 2021/03/10(Wed) 23:04
投稿者九州男児
花ちゃん さん

情報ありがとうございます。
試してみます。
結果は後日お知らせします。

[ツリー表示へ]
タイトルRe^6: Keybd_Eventでのモニターリセット
記事No12068
投稿日: 2021/03/16(Tue) 00:17
投稿者九州男児
教えていただいたサンプルを参考にしましたが結果は変わらずでした。
※Winddows 10の.NET Framework4.8系(Release:528040)未満は動作せず。

何が原因なのか・・・・

『devcon restart』コマンド、『pnputil /restart-device』コマンドでもモニタのリセットはできるので
それなら『devcon restart』コマンド、『pnputil /restart-device』を使えばーーと
言われるかもしれませんが、『devcon』はマイクロソフトからダウンロードしなくてはならない為、
フリーソフト扱いで社内審査が厳しく、
『pnputil』はOSのバージョンにより『restart-device』オプションが存在しません。

ん〜もう少し調べてみます。


これを試してみてーーと言う情報ありましたら、またお願いします。

[ツリー表示へ]
タイトルRe^7: Keybd_Eventでのモニターリセット
記事No12069
投稿日: 2021/03/16(Tue) 10:44
投稿者魔界の仮面弁士
> ※Winddows 10の.NET Framework4.8系(Release:528040)未満は動作せず。

また、Win「dd」ows になっていますね。


> 何が原因なのか・・・・
No12065 では「やはりWindows 10のバージョンが関連しているような・・・」
No12068 では「.NET Framework4.8系(Release:528040)未満は動作せず」
と書かれており、情報にブレがあります。


・コンパイル環境のターゲット フレームワーク設定 (.NET Framework バージョン)
・コンパイル環境のターゲット CPU プラットフォーム設定 (x86, x64, AnyCPU, AnyCpu32bitPreferred, …)
・実行環境の Windows 10 のエディション(Pro 等)およびバージョン(v20H2 等)
・実行環境の .NET Framework バージョン

をセットにして、どの組合せの時に成功して、どの組合せが失敗しているのか、
正確な情報を列挙してみてください。同じ環境があれば追調査できるかもしれません。

[ツリー表示へ]
タイトルRe^8: Keybd_Eventでのモニターリセット
記事No12070
投稿日: 2021/03/17(Wed) 19:52
投稿者九州男児
魔界の仮面弁士さま
コンパイル環境、実行環境、実行結果は下記です。
お気付きの点がありましたらよろしくお願い致します。


[コンパイル環境]
    エディション    Windows 10 Pro
    バージョン  1803
    Release 461808(.NET Framework 4.7.2)
    Visual Studio 2017
    ターゲットフレームワーク    .NET Framework 4.6.2
    ターゲットCPU               AnyCPU

実行環境@
        エディション    Windows 10 Pro
        バージョン  1803
        Release 461808(.NET Framework 4.7.2)
        keybd_event             リセットされない
        SendInput               リセットされない
        花ちゃんさんサンプル@  リセットされない
        花ちゃんさんサンプルA  リセットされない

実行環境A
        エディション    Windows 10 Enterprise 2016 LTSB
        バージョン  1607
        Release 394802(.NET Framework 4.6.2)
        keybd_event             リセットされない
        SendInput               リセットされない
        花ちゃんさんサンプル@  リセットされない
        花ちゃんさんサンプルA  リセットされない

実行環境B
        エディション    Windows 10 Pro
        バージョン  1909
        Release 528040(.NET Framework 4.8)
        keybd_event             リセットされる
        SendInput               リセットされる
        花ちゃんさんサンプル@  リセットされる
        花ちゃんさんサンプルA  リセットされる

実行環境C
        エディション    Windows 10 Home
        バージョン  2004
        Release 528372(.NET Framework 4.8)
        keybd_event             リセットされる
        SendInput               リセットされる
        花ちゃんさんサンプル@  リセットされる
        花ちゃんさんサンプルA  リセットされる

[ツリー表示へ]
タイトルRe^9: Keybd_Eventでのモニターリセット
記事No12071
投稿日: 2021/03/18(Thu) 17:31
投稿者魔界の仮面弁士
※2021/03/19: コードを若干修正しました。(ParamArray 化)

グラフィックドライバーの違いが原因なのか、
OS バージョンに依存する話であるのか…。

当方でも実験してみましたが、リセットされない要因については
現時点でははっきりしません。


★ .NET Framework 4.8.4300.0【Windows 10 Pro (20H2)】物理マシン

上記環境においては、自作プログラムから GPU をリセットできました。

また、[スタート] - [Windows 簡単操作] - [スクリーン キーボード]
からでもリセット可能なことを確認しました。

[Ctrl]+[Shift]を押しながらスクリーン キーボードを起動するパターンも
確認してみましたが、どうやら管理者モードの有無も無関係のようです。



★ .NET Framework 4.8.4300.0【Windows 10 Pro (2004)】Hyper-V ゲスト
★ .NET Framework 4.7.3416.0【Windows 10 Enterprise 2016 LTSB (1607)】Hyper-V ゲスト
★ .NET Framework 4.7.3620.0【Windows Server 2016 Standard (1607)】Hyper-V ゲスト

上記環境においては、自作プログラムからの GPU リセットが動作しませんでした。
また、スクリーン キーボードからの操作も反応なしです。


Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Text = $"64bitOS={Environment.Is64BitOperatingSystem}, 64bitProc={Environment.Is64BitProcess}, {RuntimeInformation.FrameworkDescription}"
        'Text = $"{RuntimeInformation.OSDescription}, {RuntimeInformation.OSArchitecture} ({RuntimeInformation.ProcessArchitecture}) - {RuntimeInformation.FrameworkDescription}"
    End Sub

    Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        SendStrokes(
            Input.NewKeyboard(Keys.ControlKey, True),
            Input.NewKeyboard(Keys.ShiftKey, True),
            Input.NewKeyboard(Keys.LWin, True),
            Input.NewKeyboard(Keys.B, True)
        )
        Await Task.Delay(TimeSpan.FromSeconds(0.2))
        SendStrokes(
            Input.NewKeyboard(Keys.B, False),
            Input.NewKeyboard(Keys.ControlKey, False),
            Input.NewKeyboard(Keys.LWin, False),
            Input.NewKeyboard(Keys.ShiftKey, False)
        )
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        SendStrokes(
            Input.NewKeyboard(Keys.ControlKey, True),
            Input.NewKeyboard(Keys.ShiftKey, True),
            Input.NewKeyboard(Keys.LWin, True),
            Input.NewKeyboard(Keys.B, True),
            Input.NewKeyboard(Keys.B, False),
            Input.NewKeyboard(Keys.ControlKey, False),
            Input.NewKeyboard(Keys.LWin, False),
            Input.NewKeyboard(Keys.ShiftKey, False)
        )
    End Sub
End Class




Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Public Module InputModule
    'Public Sub SendStrokes(stroke() As Input)  'ParamArray に変更
    Public Sub SendStrokes(ParamArray stroke() As Input)
        If If(stroke?.Length, 0) = 0 Then
            Return
        End If
        Dim count As Integer = SendInput(stroke.Length, stroke, Marshal.SizeOf(Of Input)())
        If count = 0 Then
            Throw New Win32Exception()
        End If
    End Sub

    Private Declare Unicode Function GetMessageExtraInfo Lib "user32" () As IntPtr

    Private Declare Unicode Function SendInput Lib "user32" (
        nInputs As Integer,
        <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=0)> pInputs As Input(),
        cbsize As Integer) As Integer

    Public Enum InputType As Integer
        Mouse = 0
        Keyboard = 1
        Hardware = 2
    End Enum

    <Flags>
    Public Enum KeyFlags As UShort
        None = 0
        ExtendedKey = 1
        KeyUp = 2
        Unicode = 4
        ScanCode = 8
    End Enum

    <Flags>
    Public Enum MouseFlags As UShort
        None = &H0
        Move = &H1
        LeftDown = &H2
        LeftUp = &H4
        RightDown = &H8
        RightUp = &H10
        MiddleDown = &H20
        MiddleUp = &H40
        XDown = &H80
        XUp = &H100
        Wheel = &H800
        HWheel = &H1000
        Move_NoCoalesce = &H2000
        VirtualDesk = &H4000
        Absolute = &H8000
    End Enum


    <StructLayout(LayoutKind.Sequential)>
    Public Structure Input
        Public Type As InputType
        Public Union As InputUnion
        Public Shared Function NewKeyboard(wVk As UShort, wScan As UShort, dwFlags As UInteger) As Input
            Dim t As New Input() With {.Type = InputType.Keyboard}
            With t.Union.Keyboard
                .VirtualKey = wVk
                .ScanCode = wScan
                .Flags = dwFlags
                .Time = 0
                .ExtraInfo = GetMessageExtraInfo()
            End With
            Return t
        End Function

        Public Shared Function NewKeyboard(virtualKey As Keys, pushed As Boolean) As Input
            Return NewKeyboard(CUShort(virtualKey), 0US, CUShort(If(pushed, KeyFlags.None, KeyFlags.KeyUp)))
        End Function

        Public Shared Function NewMouse(dx As Integer, dy As Integer, dwFlags As MouseFlags, mouseData As UInteger) As Input
            Dim t As New Input() With {.Type = InputType.Mouse}
            With t.Union.Mouse
                .X = 0
                .Y = 0
                .Data = mouseData
                .Flags = dwFlags
                .Time = 0
                .ExtraInfo = GetMessageExtraInfo()
            End With
            Return t
        End Function

        Public Shared Function NewHardware(uMsg As UInteger, wParamH As UShort, wParamL As UShort) As Input
            Dim t As New Input() With {.Type = InputType.Hardware}
            With t.Union.Hardware
                .Msg = uMsg
                .WParamH = wParamH
                .WParamL = wParamL
            End With
            Return t
        End Function

        Public Shared Function NewHardware(uMsg As UInteger, wParam As UInteger) As Input
            Dim t As New Input() With {.Type = InputType.Hardware}
            With t.Union.Hardware
                .Msg = uMsg
                .WParamH = CUShort(wParam And &HFFFFUS)
                .WParamL = CUShort(wParam >> 16)
            End With
            Return t
        End Function

    End Structure

    <StructLayout(LayoutKind.Explicit)>
    Public Structure InputUnion
        <FieldOffset(0)> Public Mouse As MouseInput
        <FieldOffset(0)> Public Keyboard As KeyboardInput
        <FieldOffset(0)> Public Hardware As HardwareInput
    End Structure

    <StructLayout(LayoutKind.Sequential)>
    Public Structure MouseInput
        Public X As Integer
        Public Y As Integer
        Public Data As UInteger
        Public Flags As UInteger
        Public Time As UInteger
        Public ExtraInfo As IntPtr
    End Structure

    <StructLayout(LayoutKind.Sequential)>
    Public Structure KeyboardInput
        Public VirtualKey As UShort
        Public ScanCode As UShort
        Public Flags As UInteger
        Public Time As UInteger
        Public ExtraInfo As IntPtr
    End Structure

    <StructLayout(LayoutKind.Sequential)>
    Public Structure HardwareInput
        Public Msg As UInteger
        Public WParamL As UShort
        Public WParamH As UShort
    End Structure
End Module

[ツリー表示へ]
タイトルRe^10: Keybd_Eventでのモニターリセット
記事No12072
投稿日: 2021/03/18(Thu) 22:28
投稿者九州男児
魔界の仮面弁士さま


大変お世話になっております。

リセットが動作しなかった自作プログラムとは下記のプログラムでしょうか?
下記の私の自宅PCで試したらリセットが動作しました。

        エディション    Windows 10 Home
        バージョン  2004
        Release 528372(.NET Framework 4.8)

来週、他の環境でも試してみます。
ありがとうございました。



> グラフィックドライバーの違いが原因なのか、
> OS バージョンに依存する話であるのか…。
>
> 当方でも実験してみましたが、リセットされない要因については
> 現時点でははっきりしません。
>
>
> ★ .NET Framework 4.8.4300.0【Windows 10 Pro (20H2)】物理マシン
>
> 上記環境においては、自作プログラムから GPU をリセットできました。
>
> また、[スタート] - [Windows 簡単操作] - [スクリーン キーボード]
> からでもリセット可能なことを確認しました。
>
> [Ctrl]+[Shift]を押しながらスクリーン キーボードを起動するパターンも
> 確認してみましたが、どうやら管理者モードの有無も無関係のようです。
>
>
>
> ★ .NET Framework 4.8.4300.0【Windows 10 Pro (2004)】Hyper-V ゲスト
> ★ .NET Framework 4.7.3416.0【Windows 10 Enterprise 2016 LTSB (1607)】Hyper-V ゲスト
> ★ .NET Framework 4.7.3620.0【Windows Server 2016 Standard (1607)】Hyper-V ゲスト
>
> 上記環境においては、自作プログラムからの GPU リセットが動作しませんでした。
> また、スクリーン キーボードからの操作も反応なしです。
>
>
> Imports System
> Imports System.Windows.Forms
> Imports System.Runtime.InteropServices
> Public Class Form1
>     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
>         Text = $"64bitOS={Environment.Is64BitOperatingSystem}, 64bitProc={Environment.Is64BitProcess}, {RuntimeInformation.FrameworkDescription}"
>     End Sub
>
>     Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
>         SendStrokes({
>             Input.NewKeyboard(Keys.ControlKey, True),
>             Input.NewKeyboard(Keys.ShiftKey, True),
>             Input.NewKeyboard(Keys.LWin, True),
>             Input.NewKeyboard(Keys.B, True)
>         })
>         Await Task.Delay(TimeSpan.FromSeconds(0.2))
>         SendStrokes({
>             Input.NewKeyboard(Keys.B, False),
>             Input.NewKeyboard(Keys.ControlKey, False),
>             Input.NewKeyboard(Keys.LWin, False),
>             Input.NewKeyboard(Keys.ShiftKey, False)
>         })
>     End Sub
>
>     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
>         SendStrokes({
>             Input.NewKeyboard(Keys.ControlKey, True),
>             Input.NewKeyboard(Keys.ShiftKey, True),
>             Input.NewKeyboard(Keys.LWin, True),
>             Input.NewKeyboard(Keys.B, True),
>             Input.NewKeyboard(Keys.B, False),
>             Input.NewKeyboard(Keys.ControlKey, False),
>             Input.NewKeyboard(Keys.LWin, False),
>             Input.NewKeyboard(Keys.ShiftKey, False)
>         })
>     End Sub
> End Class
>
>
>
>
> Imports System
> Imports System.ComponentModel
> Imports System.Drawing
> Imports System.Runtime.InteropServices
> Imports System.Windows.Forms
>
> Public Module InputModule
>     Public Sub SendStrokes(stroke() As Input)
>         If If(stroke?.Length, 0) = 0 Then
>             Return
>         End If
>         Dim count As Integer = SendInput(stroke.Length, stroke, Marshal.SizeOf(Of Input)())
>         If count = 0 Then
>             Throw New Win32Exception()
>         End If
>     End Sub
>
>     Private Declare Unicode Function GetMessageExtraInfo Lib "user32" () As IntPtr
>
>     Private Declare Unicode Function SendInput Lib "user32" (
>         nInputs As Integer,
>         <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=0)> pInputs As Input(),
>         cbsize As Integer) As Integer
>
>     Public Enum InputType As Integer
>         Mouse = 0
>         Keyboard = 1
>         Hardware = 2
>     End Enum
>
>     <Flags>
>     Public Enum KeyFlags As UShort
>         None = 0
>         ExtendedKey = 1
>         KeyUp = 2
>         Unicode = 4
>         ScanCode = 8
>     End Enum
>
>     <Flags>
>     Public Enum MouseFlags As UShort
>         None = &H0
>         Move = &H1
>         LeftDown = &H2
>         LeftUp = &H4
>         RightDown = &H8
>         RightUp = &H10
>         MiddleDown = &H20
>         MiddleUp = &H40
>         XDown = &H80
>         XUp = &H100
>         Wheel = &H800
>         HWheel = &H1000
>         Move_NoCoalesce = &H2000
>         VirtualDesk = &H4000
>         Absolute = &H8000
>     End Enum
>
>
>     <StructLayout(LayoutKind.Sequential)>
>     Public Structure Input
>         Public Type As InputType
>         Public Union As InputUnion
>         Public Shared Function NewKeyboard(wVk As UShort, wScan As UShort, dwFlags As UInteger) As Input
>             Dim t As New Input() With {.Type = InputType.Keyboard}
>             With t.Union.Keyboard
>                 .VirtualKey = wVk
>                 .ScanCode = wScan
>                 .Flags = dwFlags
>                 .Time = 0
>                 .ExtraInfo = GetMessageExtraInfo()
>             End With
>             Return t
>         End Function
>
>         Public Shared Function NewKeyboard(virtualKey As Keys, pushed As Boolean) As Input
>             Return NewKeyboard(CUShort(virtualKey), 0US, CUShort(If(pushed, KeyFlags.None, KeyFlags.KeyUp)))
>         End Function
>
>         Public Shared Function NewMouse(dx As Integer, dy As Integer, dwFlags As MouseFlags, mouseData As UInteger) As Input
>             Dim t As New Input() With {.Type = InputType.Mouse}
>             With t.Union.Mouse
>                 .X = 0
>                 .Y = 0
>                 .Data = mouseData
>                 .Flags = dwFlags
>                 .Time = 0
>                 .ExtraInfo = GetMessageExtraInfo()
>             End With
>             Return t
>         End Function
>
>         Public Shared Function NewHardware(uMsg As UInteger, wParamH As UShort, wParamL As UShort) As Input
>             Dim t As New Input() With {.Type = InputType.Hardware}
>             With t.Union.Hardware
>                 .Msg = uMsg
>                 .WParamH = wParamH
>                 .WParamL = wParamL
>             End With
>             Return t
>         End Function
>
>         Public Shared Function NewHardware(uMsg As UInteger, wParam As UInteger) As Input
>             Dim t As New Input() With {.Type = InputType.Hardware}
>             With t.Union.Hardware
>                 .Msg = uMsg
>                 .WParamH = CUShort(wParam And &HFFFFUS)
>                 .WParamL = CUShort(wParam >> 16)
>             End With
>             Return t
>         End Function
>
>     End Structure
>
>     <StructLayout(LayoutKind.Explicit)>
>     Public Structure InputUnion
>         <FieldOffset(0)> Public Mouse As MouseInput
>         <FieldOffset(0)> Public Keyboard As KeyboardInput
>         <FieldOffset(0)> Public Hardware As HardwareInput
>     End Structure
>
>     <StructLayout(LayoutKind.Sequential)>
>     Public Structure MouseInput
>         Public X As Integer
>         Public Y As Integer
>         Public Data As UInteger
>         Public Flags As UInteger
>         Public Time As UInteger
>         Public ExtraInfo As IntPtr
>     End Structure
>
>     <StructLayout(LayoutKind.Sequential)>
>     Public Structure KeyboardInput
>         Public VirtualKey As UShort
>         Public ScanCode As UShort
>         Public Flags As UInteger
>         Public Time As UInteger
>         Public ExtraInfo As IntPtr
>     End Structure
>
>     <StructLayout(LayoutKind.Sequential)>
>     Public Structure HardwareInput
>         Public Msg As UInteger
>         Public WParamL As UShort
>         Public WParamH As UShort
>     End Structure
> End Module

[ツリー表示へ]
タイトルRe^11: Keybd_Eventでのモニターリセット
記事No12073
投稿日: 2021/03/18(Thu) 22:38
投稿者九州男児
魔界の仮面弁士さま

失礼しました、物理PCでは動作したのですね。

こちらも自宅PCでは動作しました。
来週、他環境で試してみます。

ありがとうございました。

[ツリー表示へ]
タイトルRe^12: Keybd_Eventでのモニターリセット
記事No12074
投稿日: 2021/03/22(Mon) 21:05
投稿者九州男児
魔界の仮面弁士さま

頂いた自作PG試しましたが、残念ながら結果は同じでした。
ちょっと厳しい状況なので、他の方法を検討します。

今までの支援感謝いたします。
ありがとうございました。

また、何かありましたら宜しくお願いします。

[ツリー表示へ]