備忘録

備忘録

C#でWin32APIを呼び出す方法(CsWin32利用)

Ⅰ. はじめに

タイトルの通り「C#でWin32APIを呼び出す方法」です。

この記事ではMicrosoftが作成しているCsWin32を利用する方法を紹介します。

Ⅱ. 必須環境

Ⅲ. やり方

1. 必要なパッケージをインストールする
dotnet add package Microsoft.Windows.CsWin32 --version 0.2.188-beta
2. NativeMethods.txt を新規作成する

NativeMethods.txt

MessageBox
3. サンプルプログラムを書く
using System.Diagnostics;
using Windows.Win32;

var windowHandle = Process.GetCurrentProcess().MainWindowHandle;
var hWnd = (Windows.Win32.Foundation.HWND)windowHandle;
var text = "Hello World!";
var caption = "Title";
var messageboxStyle = Windows.Win32.UI.WindowsAndMessaging.MESSAGEBOX_STYLE.MB_OK;
PInvoke.MessageBox(hWnd, text, caption, messageboxStyle);

実行結果


LaravelでQueueを利用する方法

Ⅰ. はじめに

タイトルの通り「LaravelでQueueを利用する方法」です。

Ⅱ. やり方

1. .envを編集する
QUEUE_CONNECTION=database
2. テーブルを作成する
php artisan queue:table
php artisan migrate
3. Job用クラスを作成する
php artisan make:job TestJob 
4. ファイルを編集する

app/Jobs/TestJob.php

<?php
use Illuminate\Support\Facades\Log;

class TestJob implements ShouldQueue
{
  use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

  protected $str;

  public function __construct($str)
  {
    $this->str = $str;
  }

  public function handle()
  {
    Log::debug($this->str);
  }
}
5. キューワーカを起動する
php artisan queue:work --tries=3
6. テスト用のプログラムを書く

routes/api.php

<?php
use App\Jobs\TestJob;

Route::get('/test', function (Request $request) {
  TestJob::dispatch('hello world');
});

実行結果

storage/logs/laravel.log
f:id:kagasu:20210207004109p:plain

その他

systemdを利用してキューワーカを常駐させる方法

/etc/systemd/system/LaravelQueueWorker.service

[Unit]
Description = LaravelQueueWorker
After = network-online.target, mysql.service

[Service]
User = www-data
Type = simple
WorkingDirectory=/var/www/html/MyProject
ExecStart = /usr/bin/php /var/www/html/MyProject/artisan queue:work --tries=3
Restart = on-failure
RestartSec=5s
RestartPreventExitStatus = 255

[Install]
WantedBy = multi-user.target
systemctl enable LaravelQueueWorker
systemctl start LaravelQueueWorker
systemctl status LaravelQueueWorker

留意点

app/Jobs/*.php に修正を加えた時は必ずキューワーカを再起動する事。
※再起動しないと反映されない

キーボード、マウスの状態を取得する方法

Ⅰ. はじめに

タイトルの通り「キーボード、マウスの状態を取得する方法」です。

f:id:kagasu:20210206232941p:plain:h100
この記事では KeyboardStateView を利用する方法を紹介します

以下のようなケースで便利です

  • 特定キーが「VK_…」の形式だと何か調べる時
  • キーボード、マウスのキーコードを知りたい時

ProxmoxでIntel GVT-gを利用してiGPUを仮想化して使用する方法

Ⅰ. はじめに

タイトルの通り「ProxmoxでIntel GVT-gを利用してiGPUを仮想化して使用する方法」です。

Ⅱ. やり方

1. 以下記事の1~6までを実行する

https://kagasu.hatenablog.com/entry/2021/01/05/201126

2. Proxmox管理画面でPCIバイスを追加する

f:id:kagasu:20210129111604p:plain

3. ゲストを再起動する

実行結果

仮想マシンでiGPUの認識に成功した
f:id:kagasu:20210105200835p:plain

Proxmoxでプライベートネットワークを利用する方法

Ⅰ. はじめに

タイトルの通り「Proxmoxでプライベートネットワークを利用する方法」です。


f:id:kagasu:20210129104221p:plain

Ⅱ. やり方

1. vmbr1 を追加する
$ vim /etc/network/interfaces

auto vmbr1
iface vmbr1 inet static
        address  10.0.0.0/24
        bridge_ports none
        bridge_stp off
        bridge_fd 0

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
2. ネットワークを再起動する
/etc/init.d/networking restart
3. vmbr1が追加された事を確認する
ip a
ip route
4. DHCPサーバ(dnsmasq)をインストールする
apt install dnsmasq
systemctl stop systemd-resolved
systemctl disable systemd-resolved
5. dnsmasqの設定を変更する
$ vim /etc/dnsmasq.d/vnet

dhcp-range=10.0.0.1,10.0.0.255,12h
# 固定IP
dhcp-host=BA:96:46:A6:E0:97,10.0.0.1
6. dnsmasqを起動する
systemctl restart dnsmasq
systemctl enable dnsmasq

実行結果

f:id:kagasu:20210129104734p:plain