C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Windows 11 タブレットモードの設定

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■103648 / inTopicNo.1)  Windows 11 タブレットモードの設定
  
□投稿者/ 河童 (1回)-(2025/05/06(Tue) 13:58:02)

分類:[C#] 

開発環境
Windows 11 pro
C#
VS2019
.NET Framework 4.7.2
Windowsフォームアプリケーション(.Net Framework)でプロジェクトを作成しています。

2年前にも同じ質問(101639)をさせていただきました。

【現象】
Windows 10では問題なかったフォーム画面が、
Windows 11では、Surface Go 4 でキーボード(タイプカバー)を外すと勝手に最大化される。

【原因】
Windows 11では「タブレットモード」が廃止され、自動的に端末の状態(キーボード有無)に応じたモード切り替えが行われる。
タイプカバーを外すとタブレットとして認識され、フォームが最大化される動きになる。

【対策】
MaximizeBox:False に設定する
または、Windows 10 にダウングレード

今回、Winodows10 のサポートがきれるということで再度解決策を考えているところです。

レジストリを修正することでモードを切り替えることはできました。
しかし、もう少し良くしたい箇所があります。

改善策1:バッチファイルでモード切替
下記URL を参考にタスクスケジュールに設定しました。
https://qiita.com/kazu_iroiro/items/15e6ee3a6f1d1b66e48a
モードの切り替えはできましたが、変更時に画面が一瞬チラつく問題がある。
タイプカバーの脱着以外でも実行されて、チラつきが多いです。


改善策2:フォームのロード時にモード切替
起動時のフォームにロード時の処理を追加しました。
モードの切替自体はできました。
しかし、起動時のフォームにはモードが適用されないので、PGを閉じて再度開く作業必要です。

        private void SetConvertibleSlateMode()
       {
            const string regPath = @"SYSTEM\CurrentControlSet\Control\PriorityControl";
            const string regName = "ConvertibleSlateMode";

            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(regPath, writable: true))
            {
                if (key != null)
                {
                    key.SetValue(regName, 1, RegistryValueKind.DWord);
                }
                else
                {
                    throw new Exception("レジストリキーが開けませんでした。");
                }
            }
        }

        private bool IsRunAsAdmin()
        {
            try
            {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }
            catch
            {
                return false;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                if (IsRunAsAdmin())
                {
                    SetConvertibleSlateMode();
                    MessageBox.Show("ConvertibleSlateMode を 1 に設定しました。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("レジストリの変更には管理者権限が必要です。", "権限エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"エラーが発生しました: {ex.Message}", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


教えていただきたいこと
・タスク実行時の画面チラつき防止
・PG再起動なしでモードを切り替える方法

その他、別方法がございましたら、お教えください。
よろしくお願いいたします。



引用返信 編集キー/
■103649 / inTopicNo.2)  Re[1]: Windows 11 タブレットモードの設定
□投稿者/ とっちゃん (844回)-(2025/05/06(Tue) 15:04:26)
No103648 (河童 さん) に返信
> 教えていただきたいこと
> ・タスク実行時の画面チラつき防止
> ・PG再起動なしでモードを切り替える方法
>
タスク実行時に画面がちらつくのは、画面モードが変わってしまうことに起因する問題ではありませんか?
例えば、何も画面がない状態で切り替えを行ったら発生しないとか…
そういうことだとすると、対策はないと思います(通常状態&#8596;最大化で行き来するとそれなりにちらつくのと同じ)

PG再起動なしでの切り替えですが、
Loadのタイミングではなく、Program.cs で、Run( new Form1() ); を呼び出す前に
切り替えるようにすれば、行けるのでは?と思います。

手元に環境がないので、試していませんので、実現できるかわかりませんが
試してみてはいかがでしょうか?

引用返信 編集キー/
■103650 / inTopicNo.3)  Re[2]: Windows 11 タブレットモードの設定
□投稿者/ 河童 (2回)-(2025/05/06(Tue) 23:58:33)
No103649 (とっちゃん さん) に返信
ご回答ありがとうございました。

> タスク実行時に画面がちらつくのは、画面モードが変わってしまうことに起因する問題ではありませんか?
> 例えば、何も画面がない状態で切り替えを行ったら発生しないとか…
> そういうことだとすると、対策はないと思います(通常状態&#8596;最大化で行き来するとそれなりにちらつくのと同じ)
そうですね。なにも画面がない場合は発生しません。

> PG再起動なしでの切り替えですが、
> Loadのタイミングではなく、Program.cs で、Run( new Form1() ); を呼び出す前に
> 切り替えるようにすれば、行けるのでは?と思います。
Program.cs で切り替えるように修正しました。
再起動が必要なくなりました。
ありがとうございました。

別の質問になるかもしれませんが、
レジストリを編集する場合にユーザアカウント制御のメッセージを省力する方法はあるものでしょうか。




引用返信 編集キー/
■103651 / inTopicNo.4)  Re[3]: Windows 11 タブレットモードの設定
□投稿者/ とっちゃん (845回)-(2025/05/07(Wed) 02:57:41)
No103650 (河童 さん) に返信
> 別の質問になるかもしれませんが、
> レジストリを編集する場合にユーザアカウント制御のメッセージを省力する方法はあるものでしょうか。
>
権限がありませんのメッセージを出して、処理を抑制するという部分ですか?

権限がない状態では操作できないので、ある意味仕方ない部分といえます。
メッセージを出さないという選択肢はありません。

あるとすれば、メッセージを出す代わりに権限を取得(昇格実行)して
レジストリを実際に変えてしまうというくらいかと。


パターンとしては以下のいずれかになると思います。

1. 権限がない場合(もしくはレジストリ書き換えを試みて権限不足で失敗する場合)は、自身を昇格実行して設定だけして終了し、継続する(見た目一番シンプルに提供可能。実装はそこそこ面倒)
2. 権限がない場合(もしくはレジストリ書き換えを試みて権限不足で失敗する場合)は、レジストリ書き換えアプリを起動して設定変更してもらう。アプリは管理者権限を必要とするようにmanifestを用意する
3. 権限がない場合(もしくはレジストリ書き換えを試みて権限不足で失敗する場合)は、自分自身を昇格実行してそのまま継続する(呼び出した側は即座に終了する)
4. アプリを管理者権限で実行するように設定する(2のレジストリ設定アプリ同様manifestを用意する)


アプリを昇格実行するには(自分自身を権限昇格して再実行する場合でも同じ)以下の記事のように行います。
・アプリケーションを管理者権限で起動する
https://qiita.com/tada0724/items/645616a5d1deb55bfdb8

1, 3 はこのパターンを利用してアプリケーションを実行(いずれも自分自身ですが)します。
再実行する際、パラメータをつけておくなどで判断しやすくできるのでそういうことも検討してもよいでしょう。

2, 4 はアプリケーションマニフェスト(app.manifest)を追加してそこで管理者権限を設定します。
2 はレジストリ設定するための専用アプリとして該当機能(SetConvertibleSlateModeメソッドだけを持つアプリ)を分離したもの。
4 は今作ってるアプリそのものに app.manifest を追加するだけとなります。

app.manifest の追加についてはこちら
・アプリケーション実行時に常にAdministratorとして実行する
https://www.ipentec.com/document/csharp/csharp-run-as-administrator-using-manifest-file


ちょっと手間ですが、作りとしては1または2で作るのが良いでしょう。

つくりとしては以下のようにします。

起動時処理としては以下のようにします。
1. レジストリがすでに設定済みかを確認する
2. レジストリが設定されていない場合は、試しに設定してみる(アプリの権限は確認しないでSetConvertibleSlateModeを実行する)
3. 2でセキュリティ例外(SecurityException)が出た場合は権限が足りないので、レジストリ設定機能を実行する(後述)
4. 3のアプリ実行の終了を待って、アプリを実行する

3の実行で分割して独立アプリにする場合は、単純に Process.Start で実行して
終了を待ちます(権限昇格しないで普通のアプリ実行なので調べればすぐわかります)。
こちらのほうがつくりとしては単純になります(昇格実行しても短時間で終わるのでクラックされる可能性はほとんどない)。

アプリ自身を再実行する場合は、パラメータをつけて実行するのがいいでしょう。
そうすれば、権限昇格してレジストリ設定しに来たかどうかがわかりますので(昇格確認せずに実行するため)。

引用返信 編集キー/
■103652 / inTopicNo.5)  Re[4]: Windows 11 タブレットモードの設定
□投稿者/ くま (50回)-(2025/05/07(Wed) 14:11:50)
No103650 (河童 さん) に返信

こちらの内容であっているのかな?
https://learn.microsoft.com/ja-jp/windows-hardware/design/device-experiences/continuum
環境がないので試せないけれども
モード切り替え時に
・WM_SETTINGCHANGE
https://learn.microsoft.com/ja-jp/windows/win32/winmsg/wm-settingchange
がWinProcに届くみたい
'#define WM_WININICHANGE                 0x001A
'#define WM_SETTINGCHANGE                WM_WININICHANGE

Const WM_WININICHANGE As Integer = &H001A
WinProcのサンプルは
https://dobon.net/vb/dotnet/form/fixformposition.html
から拝借で

実際は以下の通りで動くかな?
----- Form1というフォームを作成したとして -----

Imports System.Runtime.InteropServices
Imports System.Security.Permissions

Public Class Form1

    ''' <summary>
    ''' アクティブな入力ロケール識別子 (以前はキーボード レイアウトと呼ばれます) を取得します。
    ''' https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-getkeyboardlayout
    ''' </summary>
    ''' <param name="idThread"></param>
    ''' <returns></returns>
    <DllImport("User32.dll", SetLastError:=True)>
    Private Shared Function GetKeyboardLayout(
            idThread As Integer
        ) As IntPtr
    End Function

    ''' <summary>
    ''' キーボードが接続してるかを取得します。
    ''' </summary>
    ''' <param name="value">HRESULT。</param>
    ''' <returns>キーボードが接続してる true。それ以外の場合は false。</returns>
    Private Function IsKeyboardConnected() As Boolean
        Return (GetKeyboardLayout(0) <> IntPtr.Zero)
    End Function

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        If IsKeyboardConnected() = True Then
            Me.MaximizeBox = False
        Else
            Me.MaximizeBox = True
        End If
    End Sub

    <SecurityPermission(SecurityAction.Demand,
    Flags:=SecurityPermissionFlag.UnmanagedCode)>
    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_SETTINGCHANGE As Integer = &H1A

        If m.Msg = WM_SETTINGCHANGE Then
            ' SystemParametersInfo 関数がシステム全体の設定を変更した時
            'https://learn.microsoft.com/ja-jp/windows/win32/winmsg/wm-settingchange

            If IsKeyboardConnected() = True Then
                Me.MaximizeBox = False
            Else
                Me.MaximizeBox = True
            End If
        End If

        MyBase.WndProc(m)
    End Sub
End Class

----------------

引用返信 編集キー/
■103653 / inTopicNo.6)  Re[5]: Windows 11 タブレットモードの設定
□投稿者/ くま (51回)-(2025/05/07(Wed) 14:17:52)
No103650 (河童 さん) に返信
補足
今回のお話は「自分で作ったアプリのみタブレットモードみたいな動きから解除したい」という事ですよね?
レジストリいじると他のアプリにも影響出ませんか?
環境がないので推測で申し訳ないです
引用返信 編集キー/
■103654 / inTopicNo.7)  Re[6]: Windows 11 タブレットモードの設定
□投稿者/ くま (52回)-(2025/05/07(Wed) 15:33:44)
2025/05/07(Wed) 15:33:59 編集(投稿者)
訂正(編集キー入れてなくって修正できない...)
誤り
            If IsKeyboardConnected() = True Then
                Me.MaximizeBox = False
            Else
                Me.MaximizeBox = True
            End If
正解
            If IsKeyboardConnected() = True Then
                Me.MaximizeBox = True
            Else
                Me.MaximizeBox = False
            End If
ですよね...

引用返信 編集キー/
■103655 / inTopicNo.8)  Re[7]: Windows 11 タブレットモードの設定
□投稿者/ 河童 (3回)-(2025/05/07(Wed) 17:44:25)
No103654 (くま さん) に返信

ご回答ありがとうございます。

> 今回のお話は「自分で作ったアプリのみタブレットモードみたいな動きから解除したい」という事ですよね?
> レジストリいじると他のアプリにも影響出ませんか?
> 環境がないので推測で申し訳ないです

まだご提示していただいたコードを試しておりませんが、
くま さんのご推察の通り、他のアプリに影響が出ていました。

タッチキーボードが表示できなくなっていました。
タッチキーボードの表示の設定は、
・タッチキーボードを無効
・タッチキーボードを常に表示する
・キーボードが接続されていない場合

「キーボードが接続されていない場合」を選択したとき、タッチキーボードが表示されません。
「常に表示する」を選択したときは、タッチキーボードは表示されるが、キーボードが接続されているときも表示されます。

タブレットモードの切り替えとタッチキーボードの表示設定を考慮する必要が出てきました。


引用返信 編集キー/
■103656 / inTopicNo.9)  Re[8]: Windows 11 タブレットモードの設定
□投稿者/ くま (53回)-(2025/05/07(Wed) 21:46:16)
2025/05/07(Wed) 21:46:56 編集(投稿者)
多分以下の仕組みでタブレットモード?の時は「最大化」はしないようになるはず
仕組みは
1. フォームに「最大化」してと要求があった時
2. デバイスのキーボードを検索
3. キーボードが1件もない場合、タブレットモードとして判定
4. タブレットモードの場合、「最大化」をキャンセルする。

ただ正確には「Surface Go 4」のキーボードデバイスが接続しているか?なんだよね...
メーカーが違うとその機種専用のキーボードで判断してるから
どっかに判定値が入っていてそれで判断してると思う。

環境がないもので推測ばっかりで申し訳ないです。

----- Form3というフォーム(Form3.vb)を作成したとして -----
Imports System.Security.Permissions

Public Class Form3

    <SecurityPermission(SecurityAction.Demand,
    Flags:=SecurityPermissionFlag.UnmanagedCode)>
    Protected Overrides Sub WndProc(ByRef m As Message)
        'Const WM_SETTINGCHANGE As Integer = &H1A
        'Const WM_DEVICECHANGE As Integer = &H219
        'Const DBT_DEVNODES_CHANGED = &H7            'デバイスがシステムに追加されたか、システムから削除されました。
        'Const DBT_QUERYCHANGECONFIG = &H17          '現在の構成を変更するためのアクセス許可が要求されます (ドッキングまたはドッキング解除)。
        'Const DBT_CONFIGCHANGED = &H18              'ドッキングまたはドッキング解除により、現在の構成が変更されました。
        'Const DBT_CONFIGCHANGECANCELED = &H19       '現在の構成を変更する要求 (ドックまたはドッキング解除) が取り消されました。
        'Const DBT_DEVICEARRIVAL = &H8000            'デバイスまたはメディアが挿入され、使用可能になりました。
        'Const DBT_DEVICEQUERYREMOVE = &H8001        'デバイスまたはメディアの一部を削除するためのアクセス許可が要求されます。 どのアプリケーションでも、この要求を拒否し、削除を取り消すことができます。
        'Const DBT_DEVICEQUERYREMOVEFAILED = &H8002  'デバイスまたはメディアの一部を削除する要求が取り消されました。
        'Const DBT_DEVICEREMOVEPENDING = &H8003      'デバイスまたはメディアの一部が削除されようとしています。 拒否できません。
        'Const DBT_DEVICEREMOVECOMPLETE = &H8004     'デバイスまたはメディアが削除されました。
        'Const DBT_DEVICETYPESPECIFIC = &H8005       'デバイス固有のイベントが発生しました。
        'Const DBT_CUSTOMEVENT = &H8006              'カスタム イベントが発生しました。
        'Const DBT_USERDEFINED = &HFFFF              'このメッセージの意味は、ユーザー定義です。
        Const WM_SYSCOMMAND As Integer = &H112
        Const SC_MAXIMIZE = &HF030                  'ウィンドウを最大化します。

        'Debug.Print("WndProc m.Msg = &h{0:X}", m.Msg)

        Select Case m.Msg
            'Case WM_DEVICECHANGE
            '    'デバイスまたはコンピューターのハードウェア構成の変更をアプリケーションに通知します。
            '    'https://learn.microsoft.com/ja-jp/windows/win32/devio/wm-devicechange
            '    Debug.Print("WM_DEVICECHANGE {0} {1}", m.WParam, m.LParam)
            '    'デスクトップPCでキーボードのUSBを抜き差しすると
            '    'm.WParam = DBT_DEVNODES_CHANGED が発生
            '    'GetKeyboardLayout APIでも取得できてるし...

            '    'Surface Go 4 だと
            '    'm.WParam = DBT_QUERYCHANGECONFIG
            '    'm.WParam = DBT_CONFIGCHANGED
            '    'かな?
            '    Select Case m.WParam.ToInt64
            '        Case DBT_DEVNODES_CHANGED
            '    End Select

            'Case WM_SETTINGCHANGE
            '    ' SystemParametersInfo 関数がシステム全体の設定を変更した時
            '    'https://learn.microsoft.com/ja-jp/windows/win32/winmsg/wm-settingchange

            Case WM_SYSCOMMAND
                '最大化ボタン、最小化ボタン、復元ボタン、または閉じるボタンを選択したときに
                'https://learn.microsoft.com/ja-jp/windows/win32/menurc/wm-syscommand
                Select Case (m.WParam.ToInt64() And &HFFF0L)
                    Case SC_MAXIMIZE
                        ' キーボードが未接続の状態
                        If Devices.IsKeyboardConnected() = False Then
                            ' WndProc標準処理をスキップする事で最大化をさせない。
                            m.Result = IntPtr.Zero
                            Return
                        End If
                End Select
        End Select

        ' WndProc標準処理を行う
        MyBase.WndProc(m)

    End Sub

End Class
----- Form3終わり -----
----- Devicesというモジュールファイル(Devices.vb)だとして -----
Imports System.Runtime.InteropServices

Module Devices

    Private Const RIM_TYPEKEYBOARD As Integer = 1

    Private Const RIDI_DEVICENAME As Integer = &H20000007

    <StructLayout(LayoutKind.Sequential)>
    Private Structure RAWINPUTDEVICELIST
        Public hDevice As IntPtr
        <MarshalAs(UnmanagedType.U4)>
        Public dwType As Integer
    End Structure

    <StructLayout(LayoutKind.Sequential)>
    Private Structure RAWINPUTDEVICE
        <MarshalAs(UnmanagedType.U2)>
        Public usUsagePage As System.UInt16
        <MarshalAs(UnmanagedType.U2)>
        Public usUsage As System.UInt16
        <MarshalAs(UnmanagedType.U4)>
        Public dwFlags As Integer
        Public hwndTarget As IntPtr
    End Structure

    <DllImport("User32.dll", SetLastError:=True)>
    Private Function GetRawInputDeviceList(
            ByVal pRawInputDeviceList As IntPtr,
            ByRef uiNumDevices As UInteger,
            ByVal cbSize As UInteger
        ) As UInteger
    End Function

    <DllImport("User32.dll", SetLastError:=True)>
    Private Function GetRawInputDeviceInfo(
             ByVal hDevice As IntPtr,
             ByVal uiCommand As UInteger,
             ByVal pData As IntPtr,
             ByRef pcbSize As UInteger
        ) As UInteger
    End Function

    ''' <summary>
    ''' キーボードが接続しているか判定する。
    ''' </summary>
    ''' <returns>キーボードが接続している場合は true。それ以外の場合は false。</returns>
    Public Function IsKeyboardConnected() As Boolean
        Dim result As Boolean = False
        '----- デバイス一覧を取得する
        Dim NumberOfDevices As Integer = 0
        Dim deviceCount As UInteger = 0
        Dim dwSize As Integer = Marshal.SizeOf(GetType(RAWINPUTDEVICELIST))
        If GetRawInputDeviceList(IntPtr.Zero, deviceCount, CType(dwSize, UInteger)) = 0 Then
            Dim pRawInputDeviceList As IntPtr = Marshal.AllocHGlobal(CType((dwSize * deviceCount), Integer))
            GetRawInputDeviceList(pRawInputDeviceList, deviceCount, CType(dwSize, UInteger))
            For index As Integer = 0 To deviceCount - 1
                Dim pcbSize As UInteger = 0
                Dim rid As RAWINPUTDEVICELIST =
                    CType(
                        Marshal.PtrToStructure(
                            New IntPtr((pRawInputDeviceList.ToInt64 + (dwSize * index))),
                            GetType(RAWINPUTDEVICELIST)),
                        RAWINPUTDEVICELIST)
                GetRawInputDeviceInfo(rid.hDevice, RIDI_DEVICENAME, IntPtr.Zero, pcbSize)
                If pcbSize > 0 Then
                    If rid.dwType = RIM_TYPEKEYBOARD Then
                        '----- キーボードデバイスが存在する場合
                        result = True
                        Exit For
                    End If
                End If
            Next
            Marshal.FreeHGlobal(pRawInputDeviceList)
        Else
            '----- API失敗だがキーボードはある事とする。
            result = True
        End If
        Return result
    End Function
End Module
----- Devices終わり -----

引用返信 編集キー/
■103657 / inTopicNo.10)  Re[9]: Windows 11 タブレットモードの設定
□投稿者/ 河童 (4回)-(2025/05/08(Thu) 09:13:35)
No103656 (くま さん) に返信

C# で下記のように作成しました。
ビルドはできました。
タブレットが今なので、戻ってから試してみます。


Form1.cs に追加---------------------------

private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MAXIMIZE = 0xF030;

[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
int command = (int)(m.WParam.ToInt64() & 0xFFF0L);
if (command == SC_MAXIMIZE)
{
if (!Devices.IsKeyboardConnected())
{
// 最大化キャンセル(キーボードがない場合)
m.Result = IntPtr.Zero;
return;
}
}
}
base.WndProc(ref m)
}

Devices.cs を追加---------------------------

using System;
using System.Runtime.InteropServices;

namespace FormMax
{
public static class Devices
{
private const int RIM_TYPEKEYBOARD = 1;

[StructLayout(LayoutKind.Sequential)]
private struct RAWINPUTDEVICELIST
{
public IntPtr hDevice;
public uint dwType;
}

[DllImport("User32.dll", SetLastError = true)]
private static extern uint GetRawInputDeviceList(
IntPtr pRawInputDeviceList,
ref uint uiNumDevices,
uint cbSize);

public static bool IsKeyboardConnected()
{
try
{
uint deviceCount = 0;
int dwSize = Marshal.SizeOf(typeof(RAWINPUTDEVICELIST));

if (GetRawInputDeviceList(IntPtr.Zero, ref deviceCount, (uint)dwSize) != 0 || deviceCount == 0)
return true;

IntPtr pRawInputDeviceList = Marshal.AllocHGlobal(dwSize * (int)deviceCount);
GetRawInputDeviceList(pRawInputDeviceList, ref deviceCount, (uint)dwSize);

for (int i = 0; i < deviceCount; i++)
{
IntPtr pDevice = new IntPtr(pRawInputDeviceList.ToInt64() + dwSize * i);
RAWINPUTDEVICELIST device = (RAWINPUTDEVICELIST)Marshal.PtrToStructure(pDevice, typeof(RAWINPUTDEVICELIST));

if (device.dwType == RIM_TYPEKEYBOARD)
{
Marshal.FreeHGlobal(pRawInputDeviceList);
return true;
}
}

Marshal.FreeHGlobal(pRawInputDeviceList);
return false;
}
catch
{
return true;
}
}
}
}


app.manifest を追加---------------------------

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

//<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

</requestedPrivileges>

</security>
</trustInfo>

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>

</application>
</compatibility>


</assembly>


引用返信 編集キー/
■103659 / inTopicNo.11)  Re[10]: Windows 11 タブレットモードの設定
□投稿者/ 河童 (5回)-(2025/05/11(Sun) 01:01:00)
No103657 (河童 さん) に返信
Surface Go 3 でPGを試してみました。
エラーは発生しないのですが、フォーム画面は最大化されます。


レジストリを変更すると、タッチキーボードが表示されなくなるし、
何か良いタイ対策はないでしょうか。
引用返信 編集キー/
■103660 / inTopicNo.12)  Re[11]: Windows 11 タブレットモードの設定
□投稿者/ くま (54回)-(2025/05/11(Sun) 02:54:48)
2025/05/11(Sun) 03:29:44 編集(投稿者)
2025/05/11(Sun) 03:15:00 編集(投稿者)

あれから投稿エラーになってお返事できてませんでした。
またvb.netだと勘違いしてしまって申し訳ないです。

現在のプログラムだと「キーボード」デバイス『すべて』認識されない状態で最大化がロックされます

お手数ですが、
「デバイスマネージャ」開いて
もしかして「キーボード」デバイスの認識有り無しで
[Surface Type Cover Filter Device]
だけ有り無しになっていますか?

それとも
[Surface Type Cover Filter Device]
の[詳細]>[プロパティ]の"接続"の項目の値が"<true>","<false>"と切り替わっていますか?



引用返信 編集キー/
■103661 / inTopicNo.13)  Re[12]: Windows 11 タブレットモードの設定
□投稿者/ 河童 (6回)-(2025/05/11(Sun) 10:27:46)
No103660 (くま さん) に返信
> 「デバイスマネージャ」開いて
> もしかして「キーボード」デバイスの認識有り無しで
> [Surface Type Cover Filter Device]
> だけ有り無しになっていますか?
>
> それとも
> [Surface Type Cover Filter Device]
> の[詳細]>[プロパティ]の"接続"の項目の値が"<true>","<false>"と切り替わっていますか?
デバイスマネージャーのキーボードには、タイプカバーを接続した状態です。
・HID キーボードデイバス (変換済みポータブル デバイス コントロール デバイス)
・HID キーボードデイバス (GPIO ボタン ドライバー)
・HID キーボードデイバス (USB 入力デバイス)
・HID キーボードデイバス (Inter(R)HID Event Filter)

タイプカバーを外すと
3番目のUSB 入力デバイスが消えます。
引用返信 編集キー/
■103662 / inTopicNo.14)  Re[13]: Windows 11 タブレットモードの設定
□投稿者/ くま (55回)-(2025/05/11(Sun) 13:44:52)
2025/05/11(Sun) 13:47:38 編集(投稿者)
ERROR-迷惑投稿者と判定されました。
となって送れない...涙

引用返信 編集キー/
■103663 / inTopicNo.15)  Re[14]: Windows 11 タブレットモードの設定
□投稿者/ 河童 (7回)-(2025/05/13(Tue) 10:33:20)
No103662 (くま さん) に返信
> 2025/05/11(Sun) 13:47:38 編集(投稿者)
>
> ERROR-迷惑投稿者と判定されました。
> となって送れない...涙
>
一旦この質問を閉じて、新たに質問を投稿します。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ