[ラズパイ]一旦RAMディスクを解除する方法

急にSSL対応が気になりました。
証明書はお金がかかってしまうのですけど、
Let’s Encryptというのを使えば3ヶ月更新ではありますが無料で使えるそうです。
しかも、さくらインターネットのようなレンタルサーバーだと更新が面倒ですが、
ラズパイの場合はコマンド一発で更新までできるそうです。
これは使わない手はありません。

$ sudo git clone https://github.com/letsencrypt/letsencrypt
こうするとletsencryptというディレクトリにすべてコピーされてきます。

この中にある

  • letsencrypt-auto
  • certbot-auto

を使うのですけど、使ってみた感じどちらも同じようでした。
実際にはletsencryptがcertbotに変更になっているということで、letsencryptが名残なのでしょう。

sudo ./certbot-auto

のように実行しますと、必要なモジュールがインストールされます。

ところが・・・/tmpがいっぱいになってしまいどうしてもインストールが完了しませんでした。

RAMディスクを一旦無効にする

実はSDカードの延命の為に、tmpはRAMディスクに変更してあります。
ところがそのせいで容量が足りずエラーになっていました。

$ df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/root 59388044 43522796 12825404 78% /
devtmpfs 468148 0 468148 0% /dev
tmpfs 472756 0 472756 0% /dev/shm
tmpfs 472756 6460 466296 2% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 472756 0 472756 0% /sys/fs/cgroup
tmpfs 32768 168 32600 1% /var/log
tmpfs 16384 0 16384 0% /var/tmp
tmpfs 32768 8 32760 1% /tmp
/dev/mmcblk0p1 57288 22288 35000 39% /boot
tmpfs 94552 4 94548 1% /run/user/1000
tmpfs 94552 0 94552 0% /run/user/1001

/tmpがtmpfsになっています。
以下のような確認方法でもいいです。

$ cd /tmp
$ df -k .
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
tmpfs 32768 8 32760 1% /tmp

これを変更するには/etc/fstabを編集します。

proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
# 一時フォルダをRAMディスクにマウント
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
# /var/log をRAMディスクにマウント
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0

とりあえず、tmpfsの行をコメントしてしまいます。
そうしたら、一旦再起動します。

$ df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/root 59388044 43480152 12868048 78% /
devtmpfs 468148 0 468148 0% /dev
tmpfs 472756 0 472756 0% /dev/shm
tmpfs 472756 6448 466308 2% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 472756 0 472756 0% /sys/fs/cgroup
/dev/mmcblk0p1 57288 22288 35000 39% /boot
tmpfs 94552 4 94548 1% /run/user/1000
tmpfs 94552 0 94552 0% /run/user/1001

/tmpのマウントが消えました。
実際には1行目の/dev/rootに含まれるようになります。

$ cd /tmp
$ df -k .
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/root 59388044 43510900 12837300 78% /

この状態で

sudo ./certbot-auto

でやっとインストールが通りました。

インストールできたら、fstabを戻してまた再起動します。

ちゃんとRAMディスクに戻ったことも確認することを忘れることなく。

Dungeon Soulsを遊んでみた(3 – 未完成なのか?と思える部分

はじめ、アイテムの使い方がまったくわかりませんでした。
それもそのはずです。
なぜなら、キーコンフィグに古い設定が残ってしまっていて、そのキーを押しても何も起こらないからです。これははっきり言ってひどいです。

アイテムを使用?

武器は左の3マスなんですけど、アイテムはこの右の3マスとなります。
どうやって使うかというと、、、
”1” , ”2” , ”3” のキーが対応しています。
つまりいま3個のポーションがあるんですけど、これを全部使うには

[1] → [1] → [2] とおすということです。

うーむ・・・今のところ、何のために3つに分けているのか意味がわかりません。
1マスにつき2個しかもてませんので、6個が上限のますが一つあればいいはずです。
あと、真ん中の空欄は・・・?もうデザインがわけわかりません。

しかもキーコンフィグではアイテムを使うは「F」になっています。
Fを押しても何も起こりません・・・・だってそうじゃなくて”1” , ”2” , ”3” のキーが対応しているのですから・・・。ここは酷いミスですね。これくらい治してほしいですね・・・。

クリア方法

紋章をすべて踏むとスタート地点の光っていない紋章が光ります。

個々に行ってスペースキーを押せばクリアとなります。
というかスペースキーなしでも行ってほしい・・・。
すべての紋章を踏むと、追い出しキャラが襲ってきます。急いでクリアしましょう。

レベルアップ

雑魚を倒しているとレベルが上がります。

tabを押して任意に強化したいステータスを選ばねばなりません。

個人的には、めんどくさい・・・。

ボスキャラ

ボスキャラは結構面白いです。

操作性は少し悪いですけど、武器を切り替えて攻撃して、回復して・・・
それだけです。

 

キャラ選択

私はこの斧の人以外だとあっという間に死んでしまいます><
とにかくこの人以外体力がなさすぎるんです。
でも、このキャラだけだとつまらない感じがします。

Dungeon Soulsを遊んでみた(2 – 練り込みが足りないシステム

スタートするとまずはこんな画面です。
REVIVEの横の三角をマウスで押すとキャラを変えられます。
でもはじめはこの斧の人(?)が体力も多いので楽だと思います。

DIFFICULTY難易度はマウスでクリックして変更できます。
Nomalかeasyだけです。何が変わるのかよくわかりません。
ここのそうさコントローラーだとどうすればいいのかさっぱりわかりませんでした。コントローラーはやめましょう!

左中程のPASSIVESを押すと、持ってるお金で強化ができるようです。

うっかりクリックしてもキャンセルできません・・・。不親切・・・!

REVIVEの部分をクリックするとスタートします。

 

スタートすると紋章みたいなのがあると思います。上に乗ると

「0/4 marks activated」

とか出ます。4箇所紋章をタッチしてこいよ、って言う意味です。

紋章というのはこの右にある光ってるやつです。
実はこの下の赤いやつだと思って一生懸命踏んでました。これは単なる罠です。踏まなくて良いです。

紋章を踏むとモンスターが出てくるので、基本的に左クリックで倒します。
斧をブンブン降ってくれます。押しっぱなしでOKです。振り続けます。方向だけマウスで指定します。

cキーを押すと下にゲージ?が出ます。(と言うかデフォルトで出てる)
もう一度押すと消えます。なんのために消えるのか謎です。意味不明です。

左に↑↑↑となっていて意味が不明ですね。。。
これって実は攻撃方法になっていて3種類ってことなんですね。

一番左が左クリック、右の2つが右クリックです。
右クリックで出せる技はQキーで真ん中、Eキーで右側が選択されるので、選択してから右クリックすると使えます・・・。

てか、ここ操作性悪すぎます・・・。なぜわざわざ選択してからクリックする必要があるのでしょう?Q及びEキーで技は発動してくれていいような気がします。この右2つの技は1度使うと数十秒使えないため連射は不能です。なのだから、選択してからクリックなんて面倒な操作は意味不明です。
それにこの2つの技はどちらかしか選べないのだからトグルでもいいはずです。つまりは一つのキーで切り替えでも良かったはず。

あ、それから、この↑↑↑の真ん中か右をクリックして選ばねばなりません。
スタートしてしばらくはこの真ん中か右のどちらかしか使えません。このあたりもなんでこうしたのか意味不明と思いました。

続きます?

Dungeon Soulsを遊んでみた(1

HumbleBundleで1ドルで3つの格安ゲームを買ってみました。
その中の一番評判の悪い(3つの中ではです)DungeonSoulsを遊んでみました。

一番評判の悪いものから始める天邪鬼です^^;

少しだけレビュー記事がありましたがあまりないようなのでレビューしてみます。

結論を申しますが、「意外と面白いと思う!」です。
セールで300円位なら損ではないと思います。

ただ、Windows10でうまく起動しないとかブラック・アウトするというような不具合があるようです。

ただ、私の環境ではWin10であるもののふつうに遊べています。私はWindowモードとフルスクリーンいずれも遊べますが、フルスクリーンで動かない場合はWindowモードなら動くかも・・・・とはいえそのメニュー自体フルスクリーンモードで選択せねばならず・・・。何か方法はありませんかね・・・?

ゲームパッドはおすすめできない

このゲームはXBOXコントローラーに対応しています。
ところが、キーボードでのプレイにした方がいいです。このゲームジョイスティックでの操作性が異常に悪いです。

というのも
自機の操作は本体の移動と照準の移動をしないとならないのですが、
コントローラーだと照準が右スティックであり、照準を動かすごとに画面がガクッガクッと震えて気色が悪いのです。
キーボード操作の場合は照準はマウスになるのですが、マウスが感覚的に照準をあてられるのに対してコントローラーだと8方向にしか向けられません。

コントローラーをさしているとマウスが効かなくなってしまうので、無効にする必要があります。optionからenable gamepad をdisable gamepadに変更すれば、抜かなくても無効になります。
しかし、一度ゲームを終えてまた起動するとここが勝手にenableになってしまいます。なのでプレイするたびにここを変更しないとなりません。ここはバグですかね。

左下にうっすら「w?up」と書いてあります。
こう書いてあればキーボードモードになってます。

ここが「LS-up」となっているとコントローラーモードです。

実はDisableなのに起動時はコントローラーモードになるみたいです。
で、オプションから変えるんですが、1回だと変化がないので2回変更します。

Disabele→Enable→Disable ってな感じです。

色々言いたいことがあるので続きます。。。

Humblebundleでゲームを買ってみた

Steamでゲームをするようになって、色んな所で「Humblebundle」というのを目にするようになりました。
バンドルって・・・?何?という感じでしたが、
幾つかのゲームを纏めて売ってる?ということかなあ、と思っていました。

なんと最低価格は1$

まだよくわからないのですが、バンドルは常に2セット出ているようです。

https://www.humblebundle.com/stardock-bundle

https://www.humblebundle.com/gems-bundle-2

どちらでもいいので、アクセスするとこんな感じになってます。内容は異なっているので両方見ましょう。

で、ちょっとびっくりしたのですが、一番左のセットは1$です。1$の支払いで全部手にはいります。

それぞれの下のLearn Moreを押すとどんな内容なのかがわかります。
で、上のPay What You Wantを押します。

するとこんな画面になります。

デフォルトは25$払う場合になってます。
Custom Amountを押して1$の支払いにします。

そうするとこうなります。高いセットはグレーアウトします。

ところでこの1$と言うのは、寄付という扱いになるみたいです。

Stardock Entertainment ディベロッパー(開発者)
Action Against Hunger  チャリティ
Humble Tip       ハンブル

こんな感じで割合を決められます。
たった1$ですけど、私は開発者に多くが行くように設定しました。

ここまで設定したら、左下のPaypalボタンから支払いをするだけです。

今の為替レートが112?3円程度でしたが、支払いは118円になりました。5円が手数料かな?

支払いが済めばマイページにゲームが追加されます。

Steamコードが表示されるのでSteamから追加するだけです。
驚いたのはサントラも含まれているゲームが有ったことです。

私が買ったのは以下の3つのセットです。
Dungeon Soulsだけうまく起動できない問題があるらしくて、不評になっています。ゲームそのものの評価は良いようです。



英語のコメントスパムが増えてきたので対策しました

はじめのうちは「あ!コメントがきてる!」と少し嬉しかったりしたのですが、
英語のコメント、しかもスパムでがっかりなんてことが続いています。

私の様な弱小ブログでも一日に10件とか来るようになってしまって処理が面倒になってきたので対策をすることにしました。

Throws spam away

Throws SPAM Away

これをインストールしました。
ここからアーカイブを落としたりしなくても、プラグインから検索すればヒットしてインストールできます。

単純に日本語が書かれてないコメントを削除してくれればいいや、というニーズにぴったりでした!

設定も何もなく、導入は簡単でした。

画像認証も良いかも?

よくある、画像を読み取って入力しないと駄目、っていうやつですね。
探したらやっぱりありました。

SI CAPTCHA Anti-Spam

こちらも公式プラグインのようですので、検索すればインストールできます。
こちらは設定項目が若干ありますので、ちょっとだけ面倒ですね。

どちらのほうがいいか・・?は、日本語のスパムが来るようになったらSI CAPTCHA Anti-Spamが良いですね。

日本語以外ののスパムだけをなんとかしたいならThrows spam awayが簡単で良いです。

私のサイトのアクセス、スパムだけかも・・・

ちょっと悲しいですけど、サイトに来てくれてるのはスパムだけかもしれません 泣

まあ、ラズパイで動作させているっていう実験みたいなところもあるので仕方ないですけど、
ちょっと更新が大変なこともあるので、少し何か考えて軌道修正をした方がいいかもしれないですね・・・。

amazonAPIの仕様変更(2017/10/3)海外で使うにはアソシエイト登録が必要に

アマゾンからのお知らせとして以下のようなものが来ていました。

Product Advertising API のご利用条件について

Product Advertising API (以下PA-API) をご利用のお客様に重要なお知らせです。

PA-APIはAmazonアソシエイト・プログラムにご登録いただくことで利用可能になりますが、複数の国のPA-APIを使用する場合、それぞれにおいてアソシエイトアカウントの作成が必要になります。お客様のアカウントは日本以外のPA-APIのEndpointにアクセスした記録がありましたが、当該国ではアソシエイトアカウントが存在しない可能性があります。今後も引き続き当該国のPA-APIをご利用になる場合は、当該国においてもAmazonアソシエイト・プログラムへのご参加をお願いいたします。なお、日本のPA-APIのみをご利用になる場合は、対応の必要はございません。
日本のPA-API Endpoint: https://aws.amazonaws.jp/onca/xml

下記の方式でのご対応を推奨いたします。

PA-APIを利用したいそれぞれの国でAmazonアソシエイト・プログラムに参加してください
PA-APIのページで認証キーを取得してください(アクセスキー、シークレットキー)
PA-APIを呼び出す国ごとに、それぞれで取得した認証キーを使い分けてください

FAQ

Q1. 日本以外の国のAmazonアソシエイト・プログラムに参加するにはどうすれば良いですか?

A1. 各国でのAmazonアソシエイト・プログラムへの参加方法は、こちらの資料(英語)を参照してください。

Q2. 私はすでに日本以外の国でも
Amazonアソシエイト・プログラムに参加していますが、別のメールアドレスで登録しています。どのようにすれば引き続き利用できますか?

A2. 日本以外の国ですでにAmazonアソシエイト・プログラムに参加している場合は、PA-APIのページにて認証キーを取得いただき、当該国のAPIコール時にはその認証キーを使うようにして下さい。また、このメールを送付させていただいているメールアドレスを、日本以外の国のアソシエイトアカウントのメインユーザー(Primary
User)、またはサブユーザーとして設定をする形でもご利用を継続いただくことができます。メインユーザーの詳しい切り替え手順はこちらの資料(英語)をご参照ください。

Q3. 私はすでにAmazonアソシエイト・プログラムのアカウントとPA-APIのアカウントを持っています。どのようにすればアソシエイトアカウントとPA-APIアカウントが同じ国に関連付けされているか確認することができますか?

A3. PA-APIアカウントの登録に利用したメールアドレスがそれぞれの国のAmazonアソシエイト・プログラムのアカウントのメインユーザー(Primary
User)、またはサブユーザーになっていることをご確認ください。メインユーザー、またはサブユーザーになっている場合は問題ございません。

Q4. いつまでに対応を終える必要がありますか?

A4. 2017年10月03日までに日本以外の国にて有効なAmazonアソシエイトのアカウントを設定し、取得した認証キーを利用するか(推奨)、PA-APIアカウントの登録に利用したメールアドレスをアソシエイトアカウントのメインユーザー(Primary
User)、またはサブユーザーに設定することで関連付けを完了させて下さい。

Q5. 2017年10月03日までに対応しなかった場合、どうなりますか?

A5. PA-APIのアクセスが制限され、下記の内容がレスポンスされるようになります。対応としてはメッセージにあるように日本以外の国のAmazonアソシエイト・プログラムへのアカウント登録を行い、関連付けを完了させる必要があります。
エラーコード : AWS.InvalidAssociate
メッセージ:“Your [[access key]] is not registered as an Amazon Associate.
Please register as an Amazon Associates at [[affiliate program link]]"

 

2017/10/3以降はPAAPIを海外で使うにはアソシエイト登録しないと駄目だよ、ってなことが長々と書いてあります。

しかし、実際にはずっと以前からこのようになっていました。なぜいまさらアナウンスするのか謎なのですが、10/3に更に何か変わるかもしれないので、10/2のうちに少し試しておきました。

実はアメリカ(com)についてはアソシエイト登録済みなので正常に検索できます。

ところがイギリス(uo.ck)ではこのような表示が出ます。

<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2011-10-26/">
<Error>
<Code>AWS.InvalidAssociate</Code>
<Message>
Your AKIXXXXXXXXXXXX is not registered as an Amazon Associate. Please register as an associate at https://affiliate-program.amazon.co.uk/assoc_credentials/home.
</Message>
</Error>
<RequestID>XXXX-XXXXX-XXXX</RequestID>
</ItemSearchErrorResponse>

いま10/2ですけど、出ます 笑
そして、ずっと以前からですけどね。

何か変わるか、明日も試してみたいと思います。

mp4からaacを抜き出して編集する方法

ラジコの録音に失敗するとなんとか保管したくなります。
そうするとラジオ音声がMP4でしか手に入らないです。
そのままMP4で聞いてもいいのですが、映像分が無駄なファイルなので、音声だけ抜き出したくなります。
ところが今のMP4に含まれる音声は高圧縮なAACだったりして古のMP3を抜き出すツールはうまく動作しません。
まったくできないこともないのですが、音質の低いMP3になってしまい、かつ、ファイルサイズがもとより大きくなったりします。
というわけで、私がうまく行った方法を書いておこうと思います。単なるメモです。

まずは聞いてみる。そしてカット

手に入れたMP4はお尻や先頭に無駄な部分(CM)がそのままになっている場合があります。
なので、せめてその部分を除去します。
今は無料動画編集ソフトもなかなかいいのがないのでここで困ってしまうのですが、少し古い簡単なツールが使えました。

UniteMovie

これはもともとUnite(結合)するためのツールなのですが、おまけでカットするツールが付属しています。cutmovie.exeというのがそうです。

一度ムービープレイヤーで再生して切り取りたい時間をメモしておかないといけません。

例えば元が2時間10分ではじめの5分、最後の5分をカットしたい場合は

0時間5分 ? 2時間5分

みたいに設定します。
そうすると「切り取り」で2時間きっかりのMP4が出力されます。
ただし何故かエクスプローラ上での動画時間が変わらないことがあります。でも再生するとわかるのですが、ちゃんとカットされていました。もしかしたら駄目なケースもあるかも・・・?

 

音声だけ抜き出す(FFMPEG)

音声だけのファイルにするためにFFMPEGを使います。コマンドラインのツールです。

そのまま抜き出すだけで良ければこのようにします。

ffmpeg.exe -i test.mp4 -acodec copy test.aac

しかしやってみるとわかるのですが、いつもラジコで録音しているのに比べてファイルサイズが大きくなってしまいます。

そこで私は48kでエンコードをしています。このくらいなら音質もそれほど落ちないと思います。

ffmpeg.exe -i test.mp4 -acodec aac -ab 48k test_48k.aac

 

こうしてaacとして抜き出すと、今度はちゃんとエクスプローラーで時間が正確に認識されたともおいます。
どうしてもおかしい場合には一度Wavかmp3に変換しないと駄目かもしれません・・・。

ただ、これをやってしまうと、どうしてもファイルサイズが小さくならなかったです。
聞き苦しくならないようにファイルサイズを節約するというのも結構難しいものですね。

 

スリープ抑止VB.NET版

VB.NETに変換してどう変わるか試してみました。

0xは&hに置き換わるんですね。

変換機能を使っただけですが、問題なく起動しました。

 

Imports?System.Collections.Generic
Imports?System.Drawing
Imports?System.Windows.Forms
Imports?System.Runtime.InteropServices

Public?Partial?Class?MainForm
Inherits?Form
<FlagsAttribute> _
Public?Enum?ExecutionState?As?UInteger
    ' 関数が失敗した時の戻り値
    Null = 0
    ' スタンバイを抑止
    SystemRequired = 1
    ' 画面OFFを抑止
    DisplayRequired = 2
    ' 効果を永続させる。ほかオプションと併用する。
    Continuous = &H80000000UI
End?Enum

<DllImport("kernel32.dll")> _
Private?Shared?Function?SetThreadExecutionState(esFlags?As?ExecutionState)?As?ExecutionState
End?Function
<DllImport("user32.dll")> _
Private?Shared?Function?SendInput(nInputs?As?UInteger, pInputs?As?INPUT(), cbSize?As?Integer)?As?UInteger
End?Function
' アンマネージ DLL 対応用 struct 記述宣言
<StructLayout(LayoutKind.Sequential)> _
Private?Structure?INPUT
    Public?type?As?Integer
    ' 0 = INPUT_MOUSE(デフォルト), 1 = INPUT_KEYBOARD
    Public?mi?As?MOUSEINPUT
End?Structure
' アンマネージ DLL 対応用 struct 記述宣言
<StructLayout(LayoutKind.Sequential)> _
  Private?Structure?MOUSEINPUT
  Public?dx?As?Integer
  Public?dy?As?Integer
  Public?mouseData?As?Integer
  Public?dwFlags?As?Integer
  Public?time?As?Integer

  Public?dwExtraInfo?As?IntPtr
End?Structure

' dwFlags
Const?MOUSEEVENTF_MOVED?As?Integer?= &H1
Const?MOUSEEVENTF_LEFTDOWN?As?Integer?= &H2' 左ボタン Down
Const?MOUSEEVENTF_LEFTUP?As?Integer?= &H4' 左ボタン Up
Const?MOUSEEVENTF_RIGHTDOWN?As?Integer?= &H8' 右ボタン Down
Const?MOUSEEVENTF_RIGHTUP?As?Integer?= &H10' 右ボタン Up
Const?MOUSEEVENTF_MIDDLEDOWN?As?Integer?= &H20' 中ボタン Down
Const?MOUSEEVENTF_MIDDLEUP?As?Integer?= &H40' 中ボタン Up
Const?MOUSEEVENTF_WHEEL?As?Integer?= &H80
Const?MOUSEEVENTF_XDOWN?As?Integer?= &H100
Const?MOUSEEVENTF_XUP?As?Integer?= &H200
Const?MOUSEEVENTF_ABSOLUTE?As?Integer?= &H8000
Const?screen_length?As?Integer?= &H10000' for MOUSEEVENTF_ABSOLUTE (この値は固定)

Public?Sub?New()
    InitializeComponent()
End?Sub

Private?Sub?Timer1Tick(sender?As?Object, e?As?EventArgs)
    '画面暗転阻止
    SetThreadExecutionState(ExecutionState.DisplayRequired)

    ' ドラッグ操作の準備 (struct 配列の宣言)
    Dim?input?As?INPUT() =?New?INPUT(0) {}
    ' イベントを格納
    ' ドラッグ操作の準備 (イベントの定義 = 相対座標へ移動)
    input(0).mi.dx = 0
    ' 相対座標で0 つまり動かさない
    input(0).mi.dy = 0
    ' 相対座標で0 つまり動かさない
    input(0).mi.dwFlags = MOUSEEVENTF_MOVED

    ' ドラッグ操作の実行 (イベントの生成)
   SendInput(1, input, Marshal.SizeOf(input(0)))
End?Sub
End?Class

スリープ抑止C#版

丸写しではあるけど、一度動作させてみます。

元はこちらなんですけど、このままじゃ動かなくて、ハマったので・・・。

http://variedtastefinder.jp/blog/?p=1567

 

まず
using?System.Runtime.InteropServices;

が必要で、これを入れないとDllImportでエラーになってしまいます。

また暗転防止でSetThreadExecutionStateを使っているのですが宣言がありません。

[DllImport(“kernel32.dll”)]
extern?static?ExecutionState?SetThreadExecutionState(ExecutionState esFlags);

このように書くことでOKでした。

using?System;
using?System.Collections.Generic;
using?System.Drawing;
using?System.Windows.Forms;
using?System.Runtime.InteropServices;

namespace?c_nosleep{
  public?partial?class?MainForm : Form{
    [FlagsAttribute]
    public?enum?ExecutionState :?uint{
        // 関数が失敗した時の戻り値
        Null =?0,
        // スタンバイを抑止
        SystemRequired =?1,
        // 画面OFFを抑止
        DisplayRequired =?2,
        // 効果を永続させる。ほかオプションと併用する。
        Continuous =?0x80000000,
    }
    [DllImport("kernel32.dll")]
    extern?static?ExecutionState?SetThreadExecutionState(ExecutionState esFlags);
    [DllImport("user32.dll")]
    extern?static?uint?SendInput(
        uint?nInputs,???// INPUT 構造体の数(イベント数)
        INPUT[]?pInputs,???// INPUT 構造体
        int?cbSize?????// INPUT 構造体のサイズ
    );
    [StructLayout(LayoutKind.Sequential)]
        struct?INPUT{
            public?int?type;??// 0 = INPUT_MOUSE(デフォルト), 1 = INPUT_KEYBOARD
            public?MOUSEINPUT mi;
        }
    [StructLayout(LayoutKind.Sequential)]
        struct?MOUSEINPUT{
            public?int?dx;
            public?int?dy;
            public?int?mouseData;??// amount of wheel movement
            public?int?dwFlags;
            public?int?time;??// time stamp for the event
            public?IntPtr dwExtraInfo;
        }

    // dwFlags
    const?int?MOUSEEVENTF_MOVED =?0x0001;
    const?int?MOUSEEVENTF_LEFTDOWN =?0x0002;??// 左ボタン Down
    const?int?MOUSEEVENTF_LEFTUP =?0x0004;??// 左ボタン Up
    const?int?MOUSEEVENTF_RIGHTDOWN =?0x0008;??// 右ボタン Down
    const?int?MOUSEEVENTF_RIGHTUP =?0x0010;??// 右ボタン Up
    const?int?MOUSEEVENTF_MIDDLEDOWN =?0x0020;??// 中ボタン Down
    const?int?MOUSEEVENTF_MIDDLEUP =?0x0040;??// 中ボタン Up
    const?int?MOUSEEVENTF_WHEEL =?0x0080;
    const?int?MOUSEEVENTF_XDOWN =?0x0100;
    const?int?MOUSEEVENTF_XUP =?0x0200;
    const?int?MOUSEEVENTF_ABSOLUTE =?0x8000;
    const?int?screen_length =?0x10000;??// for MOUSEEVENTF_ABSOLUTE (この値は固定)

    public?MainForm(){
        InitializeComponent();
    }

    void?Timer1Tick(object?sender,?EventArgs e){
        //画面暗転阻止
        SetThreadExecutionState(ExecutionState.DisplayRequired);
        // ドラッグ操作の準備 (struct 配列の宣言)
        INPUT[]?input =?new?INPUT[1];??// イベントを格納
        // ドラッグ操作の準備 (イベントの定義 = 相対座標へ移動)
        input[0].mi.dx =?0;??// 相対座標で0 つまり動かさない
        input[0].mi.dy =?0;??// 相対座標で0 つまり動かさない
        input[0].mi.dwFlags = MOUSEEVENTF_MOVED;
        // ドラッグ操作の実行 (イベントの生成)
        SendInput(1,?input,?Marshal.SizeOf(input[0]));
    }
  }
}

 

これを実行している間は自動スリープにはならないことを確認しました。

ところが操作してスリープを実行した際には流石にスリープしてしまいます。
これも拒否できたらすごかったのですが・・・。
でもちょっと考えてみたいですね。