2026年2月8日

Windows11の、右下に出てくるポップ広告を出た瞬間に消すアプリ(2)「PopSentry02.exe」

 ここで、コードを全部公開する。

プログラミングは40年も昔にN88_BASICでちょこっとやっただけなので、とても自信が無いけど、AIの力をお借りしてなんとか形になったとは思う。コード生成はAI任せだったので全くわかりません。でもちゃんと機能してるみたいですよ。



このアプリは、「PopSentry02.exe」という名前にした。POPの見張番という意味だ。

インストール不要、Windows11の適当なフォルダにコピーして、ショートカットをスタートアップにおいておくだけで、起動時に常駐する。

アプリの説明だけど、ここにWIN11機がないからスクショが取れない、よって言葉だけで説明する。

ポップが出た瞬間に感知し、表示の許可を求めてくる。重要だと思えば「はい」にすれば、同種のポップは今後も同じように表示してくる。不要なポップは「いいえ」を選べば、ブラックリストに追加され、瞬時に消され、今後一切出てきた瞬間に消去される。

という感じのアプリです。

https://github.com/sanmasystem-Jima/Popsentry02

ここで公開しました!github


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Drawing;

using System.IO;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading;

using System.Windows.Forms;


namespace PopSentry

{

    internal static class Program

    {

        // WinAPI

        private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);


        [DllImport("user32.dll")]

        private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);


        [DllImport("user32.dll")]

        private static extern bool IsWindowVisible(IntPtr hWnd);


        [DllImport("user32.dll")]

        private static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);


        [DllImport("user32.dll")]

        private static extern int GetWindowTextLength(IntPtr hWnd);


        [DllImport("user32.dll")]

        private static extern bool GetWindowRect(IntPtr hWnd, out RECT rect);


        [DllImport("user32.dll")]

        private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);


        [DllImport("user32.dll")]

        private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);


        private const uint WM_CLOSE = 0x0010;


        [StructLayout(LayoutKind.Sequential)]

        private struct RECT

        {

            public int Left;

            public int Top;

            public int Right;

            public int Bottom;

        }


        // 設定

        class Settings

        {

            public List<string> WhiteList { get; set; } = new List<string>();

            public List<string> BlackList { get; set; } = new List<string>();

        }


        private static Settings settings = new Settings();

        private const string SettingsFile = "popsentry.json";

        private const string LogFile = "popsentry.log";


        [STAThread]

        static void Main()

        {

            bool createdNew;

            using (var mutex = new System.Threading.Mutex(true, "PopSentryMutex", out createdNew))

            {

                if (!createdNew)

                {

                    MessageBox.Show(

                        "PopSentry はすでに起動しています。",

                        "PopSentry",

                        MessageBoxButtons.OK,

                        MessageBoxIcon.Information

                    );

                    return;

                }


                Application.EnableVisualStyles();

                Application.SetCompatibleTextRenderingDefault(false);


                LoadSettings();


                // トレイアイコン

                NotifyIcon icon = new NotifyIcon();

                icon.Icon = SystemIcons.Information;

                icon.Visible = true;

                icon.Text = "PopSentry - 稼働中";


                ContextMenuStrip menu = new ContextMenuStrip();

                menu.Items.Add("ログを開く", null, (s, e) =>

                {

                    if (File.Exists(LogFile))

                        Process.Start("notepad.exe", LogFile);

                });

                menu.Items.Add("終了", null, (s, e) =>

                {

                    icon.Visible = false;

                    Application.Exit();

                });

                icon.ContextMenuStrip = menu;


                // 監視スレッド

                Thread t = new Thread(RunLoop);

                t.IsBackground = true;

                t.Start();


                Application.Run();

            }

        }


        private static void RunLoop()

        {

            while (true)

            {

                EnumWindows(EnumWindowCallback, IntPtr.Zero);

                Thread.Sleep(300);

            }

        }


        private static bool EnumWindowCallback(IntPtr hWnd, IntPtr lParam)

        {

            if (!IsWindowVisible(hWnd))

                return true;


            int length = GetWindowTextLength(hWnd);

            if (length == 0)

                return true;


            StringBuilder sb = new StringBuilder(length + 1);

            GetWindowText(hWnd, sb, sb.Capacity);

            string title = sb.ToString();


            if (!GetWindowRect(hWnd, out RECT rect))

                return true;


            var screen = Screen.PrimaryScreen.WorkingArea;


            bool isRightBottom =

                rect.Left > screen.Right - 800 &&

                rect.Top > screen.Bottom - 800;


            if (!isRightBottom)

                return true;


            GetWindowThreadProcessId(hWnd, out uint pid);

            string procName = "unknown";


            try

            {

                using (var p = Process.GetProcessById((int)pid))

                    procName = p.ProcessName;

            }

            catch { }


            // ホワイト → 毎回ログしてスルー

            if (settings.WhiteList.Contains(procName))

            {

                LogWhite(procName, title);

                return true;

            }


            // ブラック → 毎回ログして即死

            if (settings.BlackList.Contains(procName))

            {

                LogKill(procName, title);

                SendMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);

                return true;

            }


            // 未登録 → ユーザーに聞く

            DialogResult result = MessageBox.Show(

                $"このポップアップを許可しますか?\n\nプロセス: {procName}\nタイトル: {title}",

                "PopSentry",

                MessageBoxButtons.YesNo,

                MessageBoxIcon.Question);


            if (result == DialogResult.Yes)

            {

                settings.WhiteList.Add(procName);

                SaveSettings();

                LogWhite(procName, title);   // 初回ログ

            }

            else

            {

                settings.BlackList.Add(procName);

                SaveSettings();

                LogKill(procName, title);    // 初回ログ

                SendMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);

            }


            return true;

        }


        private static void LoadSettings()

        {

            try

            {

                if (File.Exists(SettingsFile))

                {

                    string json = File.ReadAllText(SettingsFile);

                    settings = JsonConvert.DeserializeObject<Settings>(json) ?? new Settings();

                }

            }

            catch

            {

                settings = new Settings();

            }

        }


        private static void SaveSettings()

        {

            try

            {

                string json = JsonConvert.SerializeObject(settings, Formatting.Indented);

                File.WriteAllText(SettingsFile, json);

            }

            catch { }

        }


        // ホワイトログ(毎回)

        private static void LogWhite(string procName, string title)

        {

            try

            {

                string line = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} WHITE {procName} | {title}";

                File.AppendAllText(LogFile, line + Environment.NewLine);

            }

            catch { }

        }


        // ブラックログ(毎回)

        private static void LogKill(string procName, string title)

        {

            try

            {

                string line = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} KILL {procName} | {title}";

                File.AppendAllText(LogFile, line + Environment.NewLine);

            }

            catch { }

        }

    }

}

2026年2月7日

Windows11の、右下に出てくるポップ広告を出た瞬間に消すアプリを作ったよ。

 去年の10月14日に、長年使ってきたWindows10が使えなくなったのは皆様ご存知の通りです。私めの、dynabook_T75/RR2だけど、10年以上使ってきたかわいいPCが、MS帝王の意向により今後使用できなくなったわけであります。

そんな折、Ubuntuというものがあるということで、T75/RR2は延命処置を受け、ここに甦って現役で動いているわけであります。

しかし、会社で使用しているPCにおいては、W11に強制アップグレードされたのです。

長年連れ添ったおとなしいけど有能なW10と強制的にお別れさせられたと思ったら、高飛車な公爵令嬢が嫁に来た感じです。

AIさんに描画してもらったのがあるのでここに貼ってみます。(Copilot)

このお姉さんがW10だよ。静かで優しくて従順で有能だった。でも強制的にお別れさせられた。(描画:Copilot)



この人が新しい嫁さんのWIN11令嬢。
きれいだけど、能天気でおせっかいでやかましいんだよ
(描画:Gemini)


Upgradeがとんでもないダウングレードだったことに気付いたときは、もうWIN10はサポート外だったわけです。


どういうことかと、簡単に申し上げます

なんなら、日本語IMEが勝手に終わって、ローマ字モードになってる。 いちいち広告がでて集中をそがれる。その設定をいじれば消えるんじゃない?と設定をいくらいじっても、IMEの勝手な終了と広告を消し去ることはできなかった。

そういうわけで、MS帝国の出先機関であるCopilotにその旨苦情を申立たわけです。

Copilot「それは仕様です」

俺「ぷち」

何十年ぶりかに切れましたよ。

そういうわけで、WIN11の開発環境を仕入れて、ポップを物理的に出ないようにするアプリの開発に手を染めたわけであります。


・・・続く


2026年2月5日

絶対撃たれないF15のラッピングデザインしてみた

 


わたくし、この頃AIにハマっています。
とくに描画機能がお気に入りで、妄想などを形にしてもらって喜んでいます。

さて、ニュースで、航空自衛隊の戦闘機が中国海軍の戦闘機にレーダー照準されたとか言ってた。舐め腐りやがって!航空自衛隊は何もできないと信じてるんだよな。

今回はミサイル攻撃はされてはいないけど、もしもミサイルを撃ち尽くしたあとに機関砲による戦闘になったとき、中国パイロットに撃たれないための「痛戦闘機」のデザインをして、AI(Gemini)に描画してもらいました。

最期の盾になるかな?

逆に「なめんなよ」って撃たれそうだけど、一瞬躊躇くらいするよね。そのスキをついて離脱、反撃する作戦。

中国戦闘機のJ15は、F15よりきれいな機体デザインだけど、エンジンナセルの形状を絶対領域に一致させてラッピングしたとき、エンジン間隔が広すぎてガニマタになるし、真中の棒が非常にデザイン的に邪魔と言うか、放送事故を誘発する。




いくらモノマネ上手な中国人でもダメ!絶対。

航空自衛隊の優位性を発見して喜んでる。

2024年12月26日

技術の進歩は人間の退化

 

自動車の「運転支援システム」、実は危険だった? 人間の学習能力が裏目に―衝撃の米国研究が明らかに


上の記事にコメントを投稿しました。

投稿内容

いつも思っていますが、「技術の進歩は人間の退化」
ATがそうでしょ、昔はMTの運転ができない人はいませんでした。でも今は・・・

自動運転になったら、運転ができなくなる。


そんなの米国で研究したりしなくても当たり前でしょう。衝撃でも何でもない。
なんなら自動運転中に昼寝する自信がある。

どうしてクルマ作る人はいらない機能ばっかり増やそうとするんせしょうかねぇ。ご自分が運転できなくなる年齢に達したときのことを考えているのでしょうか。

自動運転にしても人間が退化する結果、事故は無くならないと思いますが。

クルマを進めるほうに自動化は反対ですが、止めるほう・自動ブレーキはいいと思う。高速道路には自動ブレーキ非搭載車は進入禁止!くらいやってもいいと思います。

熊を殺すな!という人へ現実的な対応。

 yahoo!ニュースで

「日本が"クマの惑星"になってからでは遅い」県政50年の秋田・佐竹知事が語る"アーバンベア"の恐ろしさhttps://news.yahoo.co.jp/articles/f087d10c0ce67b2ce64b53aa1b10c005a8ef0006


秋田市でまたクマが建物内に…自動車修理工場に逃げ込み、箱わなで捕獲作戦https://news.yahoo.co.jp/articles/b4327ebb229c6bc7905eab9844f617867eea2a88


というのが話題になっていましたので、恥ずかしながら私の意見も投稿したのでここに再投稿します。

投稿内容

自動音声で対応すればいいんじゃないの?

県職員○○  「はい県自然保護課の〇〇です。」
クレーマー  「クマを殺さないで。かわいそうです。」
県職員○○  「あ、熊の件ですね、お待ちください・・・・ガチャ(回線を切り替える)。」
自動音声   「♬(音楽)こちらは野生動物問題の解決のためのご案内です。市街地に現れた熊を絶対に駆除してはならないという方は①を、そうではないという方は②を押してください。」
クレーマー  「・・・①」
自動音声   「海外からおかけの方は①を、県外からおかけの方は②を、県内からおかけの方は③を押してください。」
クレーマー  「・・・②」
自動音声   「北海道、東北地方の方は①を、関東地方の方は②を、東海地方の方は③を、北陸地方の方は④を、・・・・」とやって、住所と名前を特定し、熊を着払いで送付する。

クレーマーの人はどうせ自分の憂さ晴らしのために立場の弱い人をいじめて喜んでるような卑怯者なので、もっとストレスを与えて自滅させる作戦。
我ながらなかなか面白い対クレーマー作戦だと思ったのですが。

熊出没県でも、税金やらのお問合せには自動音声を使ってるはずなので、技術的には問題ない
対応する職員も絶対楽になると思う。



ついでにこっちにも投稿しました。

茶の間侵入のクマは再び山へ... 今度は「なぜ殺処分しないのか」の声、喜多方市は理解求める

https://news.yahoo.co.jp/articles/fd152e53955dc7c7b3bc7e77437a0ba92b0ec368


投稿内容

>クマは、殺処分されず、集落から(200㎞位)離れた山の中で放獣された。 もう帰ってこない。

これは私ごときが提案しなくても各自治体で日常的に行われている気がします。

2024年12月24日

フォルクスワーゲンポロ6R(CBZ)のキーシリンダーがいかれてエンジン始動できない!けどお安くなおす方法。VW POLO

 お久しぶりです。

やっと帰ってこれました。またボチボチ更新したいと思います。


さて嫁ちゃんカー[VWPOLO]ですが、車歴10年経過しました。カッコいいのに中古価格がとても安かったので購入に至りました。同年式のヤリスやノートの半額でしたが、


・・・安いのには理由があったのです。


それは、外車ならではというか、うちのだけだったらごめんなさい、と最初に謝っておきます。


まず、点火が良く死んで3気筒になること。

デスビ的な部品(イグニッショントランスフォーマーという、名前はカッコ良い)とプラグコードの継目のジョイント部が上向きになっているため、水が溜まりやすくてリーク→両方死亡となります。デスビは4回、コードは7回くらい交換しました。特に純正品のコードはくそ高価なくせにだめだめです。永井電子とか、日本碍子のなら安くて10万㎞近く持ちます。点火のエネルギーが高すぎるのではないかと思います。

あと、理由がわからないのにメーター内のチェックランプが点灯したりとか、ブレーキキャリパーに亀裂が入ったりとか、鍵が折れたりとか、国産車ではとても考えられないようなところが次々にアボンする・・・。

文句を言いたいですが、車両価格が安かったのであきらめて修理しましょう。しかし、いちいち部品が高価でがっかりしますね。中国の工場で製作した部品は一度ドイツに集めてから航空便で送られてくるようです。

しかし、生産国から直接購入する裏ルートがあるみたいで、半額程度にはなりますが、それでも国産車の4倍くらいします。

さて今回ですが、キーシリンダーが壊れて「ON」までは回りますが、セルのところに行かなくなりエンジンが始動できません。頑張っていれば奇跡的に始動できるのですが、急いでいるときなどイライラします。

キーシリンダーの部品は正規品で10万円!!します。裏ルートでは見つけることができませんでした。

そしてこのキーシリンダーは良く壊れるそうです。さらにそのうえ無理に回そうとしたらキーが折れました。

ディーラーの人のせいではありませんが大文句をつけて車を引き揚げてきました。もう行きません。


んー(1か月考えました)・・・・。


💡! セルが回転しさえすればエンジンは始動できるはずなので、配線を改造してやります。

近所の修理屋の兄ちゃんは、「そんな改造はしません」と言いやがったのでセルフでやるしかないようです。

※ ここで、文章では理解できない人がまねされて壊しても責任取れないので写真は載せませんが、割と簡単にできます。(撮影していないとも言う)文章だけでわかる人であきらめきれない人はやる価値はあります。

使う工具は大きいプライヤー、ニッパ、はんだこて、10㎜と14㎜のボックスレンチとエクステンション、星型のねじ頭のレンチです。外車は15とか18とかの変なねじを使っていて困ることが多いですが、今回は普通のサイズでした(笑)

使用材料は、電線、はんだ、熱収縮チューブ、絶縁テープ、スイッチ等です。

まず、バッテリー、バッテリーの台、エアクリボックスを外しましょう。セルモーターはその下にあります。

セルリレー電源の赤黒線を切ってしまいましょう。元の電源は使いません。

リレー側の電線を延長接続して継目を絶縁したらエアクリとバッテリーを戻しましょう。組立は超簡単です。ばらすよりも組むほうが速いです。

延長した電線はクラッチペダルの使われていない穴から室内に引き込んで、ACC電源からスイッチを介してセルリレーに直接電圧を掛けてやるとセルが回って始動できます。

コンピューターとセルは切断されており、昔はよくやっていた「押掛け」と同様なことになるのでエラーは出ないみたいです。

安全性を求めたい人はニュートラルスイッチから電源を取ればいいと思いますが、

うちでは、ATのセレクターがDやらRでもセル始動できるので超便利!何なら走行中でも再始動できます!!のでACCから取りました。(走行中に変なチェックランプがついたときに止まらず再起動できる)

この車は走行20万㎞を超えていますがエンジン、車体、足回りともしっかりしており、こんなしょうもない故障で乗り換えるのはどうかと思います。数年前にはとてもたくさんいたVWのポロ、ゴルフ、ニュービートルとかを最近とんと見ないのはこういうマイナートラブルがとても多いからではないかと考えています。

おかげさまで2024年現在中古部品は豊富に存在し、外装の修理は簡単ですが、キーシリンダーはないみたいでした。みんな同じところが壊れるということでしょう。品質的に日本の気候に適応していないということだと考えています。

したがって、新車の購入はおすすめしませんが、わかっていて中古車を購入するのなら安くてカッコいいし、走りはGOOD!特にDCTが最高!ノートやヤリスなんかよりとても高品質な走りをします。なのでアリではないかと思います。

最後に良いところをちょっとほめて伸ばす方針。

2023年1月14日

薪ストーブ暑いです



うちでは今年は薪ストーブを入れました。
でも暖冬なので余り寒くない 

でも寒いのは寒いので
トロトロ焚いてたら煙突が詰まり安い。

かといってガンガン焚いてたら・・・・




室温が31℃。

家中の間仕切りを開けて扇風機を廻して涼んで居ます。

 

2022年10月22日


 呉にいきました。

潜水艦デカイです!




大和の波動砲はまだ未装備の様でした!



ゼロ戦かっこいいです。



しかし、私が一番気になったのは、展示のMAZDAオート3輪の、

タイヤがなぜかTT100(笑)




すみません、変な所が気になる世代です。


2021年11月6日

草の絡みにタイカレー

 あまり使われていない自作のフリー刃ですが、


使われないのには理由があって、


この刃受けと刃の間に草が詰まって
摩擦熱でカリカリに乾いて燃えそうなくらいに熱くなるんです。

いろいろな絡み防止の刃を試して見ましたが、DIYでなんとかしたいと思います。

いなばのタイカレーの缶がとてもピッタリサイズなのを発見。


真ん中にφ25.4の穴を削孔しました


刃受け金具を設置



中華ギアサイズに超ぴったり。あったかご飯にかけるだけ。


答えは刈ってみなけりゃわかりませんが
うまく行ってるイメージはあります(笑)

リヤカーのタイヤチューブを交換しました。

 昭和のリヤカーですが、パンクしていたので赤チューブを引っ張り出して見たら、


バルブの根本が裂けていました。直せない(困)

ドナーのチューブがあれば修復できますが、そんな都合よくありません。ここは貴重な昭和赤チューブですが交換してしまいましょう。

マウンテンバイクのタイヤが近いサイズみたい。


トライアルでチューブを買ってきました。998円。



思ったより高価でしたが背に腹は変えられない。


サイズ的にかなり小さめだったけどエアーを中途半端に張ったり抜いたりしながらいろいろなテクを発揮してハメました。


復活THEリヤカー、リメンバーパールハーバー!(意味不明)


残った赤チューブですが、使いみちがありません。けど捨てられない性格(困)