

アプリケーション（現在作りたいアプリケーション）が起動中は  
他のアプリを操作中（ゲームやブラウザ）でもアプリケーションのウインドウに線を描き続けたいのですが、方法がわかりません

よろしくお願いいたします。

C#

[code]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;
    
    namespace mouz
    {
        /// <summary>
        /// Mouz.xaml の相互作用ロジック
        /// </summary>
        public partial class Mouz : Window
        {
            public Mouz()
            {
                InitializeComponent();
            }
    
            private DrawingAttributes ink = new DrawingAttributes();
            private IntPtr hHook;
    
    
            private void left_mouz_down(object sender, MouseButtonEventArgs e)
            {
    
                changeColor(e);
    
            }
    
            private void left_mouz_up(object sender, MouseButtonEventArgs e)
            {
                mouzCanvas.Strokes.Clear();
            }
            private void mouz_move(object sender, MouseEventArgs e)
            {
    
                changeColor(e);
            }
    
            private void right_mouz_down(object sender, MouseEventArgs e)
            {
                mouzCanvas.Strokes.Clear();
            }
    
            private void MouzCanvas_Loaded(object sender, RoutedEventArgs e)
            {
                var mouse_capture = Mouse.Capture(this);
    
                ink.Width = 10;
                ink.Height = 10;
                Color myColor = (Color)ColorConverter.ConvertFromString("#30FFFFFF");
    
                ink.Color = myColor;
    
                mouzCanvas.DefaultDrawingAttributes = ink;
                _ = Mouse.Capture(this);
            }
    
            private void changeColor(MouseEventArgs e)
            {
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    Color myColor = new Color();
                    myColor = (Color)ColorConverter.ConvertFromString("#30FF0000");
                    ink.Color = myColor;
    
                    mouzCanvas.DefaultDrawingAttributes = ink;
                }
                else
                {
                    Color myColor = new Color();
                    myColor = (Color)ColorConverter.ConvertFromString("#30FFFFFF");
                    ink.Color = myColor;
    
                    mouzCanvas.DefaultDrawingAttributes = ink;
                }
            }
        }
    }
    
    
[/code]

xaml

[code]

    <Window x:Class="mouz.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:mouz"
            mc:Ignorable="d"
            Title="MainWindow" Height="337.271" Width="206.435"  Background="#FF000000" WindowStyle="SingleBorderWindow">
        <Grid>
            <Button Content="Start" HorizontalAlignment="Left" Margin="10,15,0,0" VerticalAlignment="Top" Width="175" Height="87" Click="Start_Button" FontSize="30"/>
            <Button Content="Quit" HorizontalAlignment="Left" Margin="10,129,0,0" VerticalAlignment="Top" Width="175" Height="87" Click="Quit_Button" FontSize="30"/>
            <Button Content="Quit" HorizontalAlignment="Left" Margin="10,226,0,0" VerticalAlignment="Top" Width="175" Height="87" Click="Button_Click" FontSize="30"/>
    
        </Grid>
    </Window>
    
[/code]


CC BY-SA 4.0
2019-06-08T13:06:48.327
55637
2020-06-10T16:03:05.253
2019-06-08T15:04:31.913
76
34634
question
c# wpf
InkCanvas をバックグラウンドで動かしたい


実際にやりたいのは質問タイトルとは逆に、ほぼ透明なアプリケーションウィンドウをTopmost(最前面)に配置し、他のアプリケーションが動作している内容が透過で見える状態にして、その上でInkCanvasを表示・操作するという形ではないでしょうか？  
Microsoft EdgeのWebノート機能のようなものをデスクトップ画面全体に対して行いたいのでは？

[Microsoft Edge でサイトにメモを追加する](https://support.microsoft.com/ja-
jp/help/4027048/microsoft-edge-add-notes-to-sites) / [Web
に書き込む](https://support.microsoft.com/ja-jp/help/17221)  
[Webノートの使い方（ノートの作成・保存）](https://windowsfaq.net/win10-help/edge/web-note.php)

* * *

そうした機能を実現するサンプルを作った記事が以下にあります。

[デスクトップ画面にコメントなどの落書きを書き込むアプリを作りました。](http://sourcechord.hatenablog.com/entry/20131210/1386693383),
[CodePlexサイト](https://archive.codeplex.com/?p=desktopannotator),[GitHubサイト](https://github.com/sourcechord/DesktopAnnotator)

> 一応、用途としては、以下のような使い方を想定しています。
>
>   * プレゼンとかしてる時に、画面上に色々書き込んで説明する
>   * タブレットで人に何か説明をするときのお供に
>

>
> **やってること**  
>  プログラム的にやってることはとても単純です。  
>  フルスクリーンの半透明ウィンドウを作成し、常に最前面表示にしておき、  
>  このウィンドウ上にInkCanvasを配置して落書きできるようにしているだけです。

ただし、「他のアプリを操作中（ゲームやブラウザ）でもアプリケーションのウインドウに線を描き続けたい」ということは **出来ません。
ある一時に操作可能なアプリケーションは一つだけです。**

作者は以下のように色々機能を試していたようです。  
操作対象アプリを素早く切り替えられるような機能が必要ならば、ご自分で追加してみてはどうでしょう？

> **その他雑文**  
>  このアプリ、最初は常駐アプリとしてタスクトレイに常駐するように作ってました。  
>  ついでに、ホットキーの設定をしておいて、ホットキーからいつでも起動できるようにしようとしたり。
>
> でも、手書きでコメントを書き込むような、タブレット操作を強く意識したアプリのため、  
>  実際に使ってみたら、タスクトレイからの起動は面倒で使い心地がよくありませんでした。


CC BY-SA 4.0
2019-06-17T08:26:44.757
55877
2019-06-17T08:33:16.253
2019-06-17T08:33:16.253
26370
26370
55637
answer