備忘録

備忘録

C++でjoinする方法

Ⅰ. はじめに

タイトルの通り「C++でjoinする方法」です。

Ⅱ. やり方

1. 必要なパッケージをインストールする
vcpkg install fmt
2. サンプルプログラムを書く
#include <fmt/format.h>
#include <iostream>

int main()
{
  auto delimiter = ",";
  auto items = { "a", "b", "c" };
  auto result = fmt::format("{}", fmt::join(items, delimiter));
  std::cout << result << std::endl;
  return 0;
}

実行結果

a,b,c

C++でクリップボードに文字列をコピーする方法

Ⅰ. はじめに

タイトルの通り「C++クリップボードに文字列をコピーする方法」です。

Ⅱ. やり方

1. サンプルプログラムを書く
#include <Windows.h>
#include <iostream>

void copy(const wchar_t *str)
{
  auto len = (wcslen(str) + 1) * 2;
  auto hMem = reinterpret_cast<HGLOBAL>(GlobalAlloc(GHND, len));
  if (hMem == nullptr)
  {
    return;
  }

  auto pMem = reinterpret_cast<wchar_t*>(GlobalLock(hMem));
  if (pMem == nullptr)
  {
    return;
  }

  wcscpy_s(pMem, len, str);
  GlobalUnlock(hMem);
  OpenClipboard(NULL);
  EmptyClipboard();

  if (SetClipboardData(CF_UNICODETEXT, hMem) == NULL)
  {
    GlobalFree(hMem);
  }

  CloseClipboard();
}

int main()
{
  copy(L"あいうえお😊");

  return 0;
}

実行結果

省略

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_…」の形式だと何か調べる時
  • キーボード、マウスのキーコードを知りたい時