private void ShutdownWindows()
{
try
{
ManagementClass managementClass = new ManagementClass("Win32_OperatingSystem");
managementClass.Get();
// 権限を有効化する
managementClass.Scope.Options.EnablePrivileges = true;
ManagementObjectCollection managementObjectCollection = managementClass.GetInstances();
foreach (ManagementObject managementObject in managementObjectCollection)
{
// InvokeMethodでWMIのメソッドを実行する
managementObject.InvokeMethod(
"Win32Shutdown",
// 強制シャットダウン指定
new object[] { 5, 0 }
);
managementObject.Dispose();
}
managementObjectCollection.Dispose();
managementClass.Dispose();
}
catch (Exception ex)
{
//なんかエラーログを出力する
}
}
2022年10月16日日曜日
[C#,サンプルコード]Windowsをシャットダウンするのサンプルコード
[C#,サンプルコード]HogeHogeをkillするのサンプルコード
private void TerminateHogeHoge()
{
//ローカルコンピュータ上で実行されている"HogeHoge"という名前のすべてのプロセスを取得
Process[] processes = Process.GetProcessesByName("HogeHoge");
foreach (Process process in processes)
{
// メイン ウィンドウにクローズ メッセージを送信する
bool isCloseMainWindow = process.CloseMainWindow();
if (! isCloseMainWindow)
{
// 終了しなかった場合は強制終了する
process.Kill();
}
// プロセスが終了するまで60秒間に待機する
// TODO:何秒待機するのが適正化?暫定的に60秒。
bool isExit = process.WaitForExit(60000);
if (isExit)
{
return;
}
throw new HogeHogeException("一定時間内にHogeHogeが終了しませんでした。");
}
}
2022年10月12日水曜日
[typescript,WebAPI,サンプルコード]DeepLのWebAPIを呼び出すTypeScriptのサンプルコード
import fetch from "node-fetch";
// DeepL WebAPI URL
const URL_API = "https://api-free.deepl.com/v2/translate?auth_key=";
//DeepLのAPIキーを設定 ※各自のAPIキーで書き換え
const apiKey = "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx:fx";
// 翻訳対象言語
enum TARGET_LANG {
Ja = "JA", // 日本語に翻訳
En = "EN", // 英語に翻訳
}
// DeepLのWepAPIにRESTで翻訳依頼する
const executeTranslation = async (
targetText: string,
targetLang: TARGET_LANG
) => {
//APIリクエストのGET時に必要なパラメータを設定
const requestUrl =
URL_API + apiKey + "&text=" + targetText + "&target_lang=" + targetLang;
const response = await fetch(requestUrl);
console.log("response", response);
const json = await response.json();
console.log("json", json);
return json;
};
// WebAPIの返り値(JSON)をこっち側のクラスに変換する変換するためのType
type Translation = {
detected_source_language: string;
text: string;
};
type TranslationResult = {
translations: Translation[];
};
const main = async () => {
const result: TranslationResult = await executeTranslation(
"This is translation test.",
TARGET_LANG.Ja
);
console.log("英語から日本語への翻訳:result", result);
console.log(
"英語から日本語への翻訳:detected_source_language",
result.translations[0].detected_source_language
);
console.log("英語から日本語への翻訳:text", result.translations[0].text);
const result2: TranslationResult = await executeTranslation(
"これは翻訳テストです。",
TARGET_LANG.En
);
console.log("日本語から英語への翻訳:result", result2);
console.log(
"日本語から英語への翻訳:detected_source_language",
result2.translations[0].detected_source_language
);
console.log("日本語から英語への翻訳:text", result2.translations[0].text);
};
main();
2022年10月11日火曜日
[npm, typescript]TypeScriptのインストールから実行まで
■前提条件
VSCodeをインストールする
■手順
1.npm init
2.npm install typescript
3.npx tsc --init
4.npx tsc
2022年10月7日金曜日
Windowsでプロセスのメモリ使用量を記録する方法
参考サイト
https://www.clear-code.com/blog/2022/3/1/windows-performance-log.html
■PDF化
https://drive.google.com/file/d/1XT0BuMsxcEBuJL2WWnWcB4MByPblSXU-/view?usp=sharing
2022年8月1日月曜日
[react-native,react-navigation/drawer]createDrawerNavigator()を使用した時のエラー:Error: Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin"
■エラーメッセージ
"Error: Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin"
■対応手順
1.babel.config.jsに【plugins: ["react-native-reanimated/plugin"]】を追記する。
[babel.config.js]
-----
module.exports = function (api) {
api.cache(true);
return {
presets: ["babel-preset-expo"],
plugins: ["react-native-reanimated/plugin"],
};
};
2.[expo start -c]コマンドを実行する
■参考サイト
https://www.youtube.com/watch?v=Ad0LUwCytu4&ab_channel=LahoreGraphicsAcademy
2022年7月24日日曜日
[typescript, react native]React Native Expo でapkファイルを作成する
備忘録になる
■前提条件
React Native Expoアカウントを作成する
https://expo.dev/
■手順
1.Expo プロジェクトを作成する
>expo init build-sample
2. プログラミング言語を選択する
.blank (TypeScript)
3.「expo build:android」を実行する
> npx expo build:android
4.Androidパッケージ名を決める
> What would you like your Android package name to be?
> com.example.myapp
5.ビルドタイプを決める
> Choose the build type you would like:
> apk
6.KeyStoreを指定する
>? Would you like to upload a Keystore or have us generate one for you?
>If you don't know what this means, let us generate it! :) »
>Generate new keystore
7.expo-updatesのインストール
>In order to publish an update, expo-updates needs to be installed. Do you want to install it now?
>Y
8.ビルドが成功したことを確認する
>Successfully built standalone app
9.apkダウンロードのURLが通知される。
2022年6月23日木曜日
オブジェクト指向エクササイズ
オブジェクト指向エクササイズは、書籍「ThoughtWorksアンソロジー」に記載されている。
ソースコードを書くときに以下のルールを適用する。
- 1つのメソッドにつきインデントは1段階までにすること
- else句を使用しないこと
- すべてのプリミティブ型と文字列型をラップすること
- 1行につきドットは1つまでにすること
- 名前を省略しないこと
- すべてのエンティティを小さくすること
- 1つのクラスにつきインスタンス変数は2つまでにすること
- ファーストクラスコレクションを使用すること
- Getter、Setter、プロパティを使用しないこと
2022年2月17日木曜日
[TypeScript,JavaScript]Study項目
以下のTypeScript/JavaScriptについて、空き時間に学習する。
・ Symbol.for()
https://nextribe.co.jp/katayan/basic-of-symbol-js
・typeof X[keyof typeof X]
https://nishinatoshiharu.com/keyof-typeof/
2022年1月4日火曜日
[Node.js]Visual Studio CodeにNode.jsのテスト環境を構築
以下の拡張機能プラグインをインストールする
■拡張機能プラグイン
・Jest Runner
・Jest Snippets
・Jest Test Explorer
・Test Adapter Converter
・Test Explorer UI
2022年1月3日月曜日
[npm]プロジェクトの管理
npmのプロジェクト管理の備忘を記載する。
以下の3つだけ覚えておく。
1.npm init
2.npm install
3.npm run
■参考
https://www.webdesignleaves.com/pr/jquery/npm_basic.html
[npm] コマンド
npmコマンドを備忘する
■ローカルインストール(プロジェクトのディレクトリで実行)
npm install パッケージ名
■グローバルインストール
npm install -g パッケージ名
■参考
https://www.webdesignleaves.com/pr/jquery/npm_basic.html