ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

Windows10でバッチファイルをスタート画面にピン留めする

Windows10のスタート画面に拡張子が.batの所謂バッチファイルをピン留めしようとして苦戦したので、メモ。

セキュリティ的な理由からか、Windows10ではバッチファイルをスタート画面にピン留め出来ない。

f:id:donadonasan:20160822174926p:plain

図:バッチファイルを右クリックした時のメニュー。「スタート画面にピン留めする」が無い。

バッチファイルへのショートカットも同様にピン留めできない。なんてこった。

でも、なんとかする方法はある。バッチファイルを実際に実行しているcmd.exeへのショートカットにしてしまうのだ。これなら、実行ファイルへのショートカットとなり、ピン留め可能となる。以下に手順を示す。

  1. バッチファイルへのショートカットを作成する。
  2. ショートカットのプロパティを表示する。
  3. リンク先の先頭に、「cmd /c」を挿入する。

それぞれの手順を、以下に図入りで説明する。

続きを読む

サムスン Galaxy SC-04E 工場テストモード

手元のスマホを照明のリモコンにしようと思いたったのだが、赤外線でどんなコードを出せばいいのか分からない。「スマホに赤外線通信機能があればデコードできるかな?」と思ったけど、残念ながら手元のスマホサムスン製。送信機能しかないようだ。となると、解決策は3つ。

  1. 赤外線通信機能を持つガラケーで解析
  2. 赤外線を受光可能な装置を自作
  3. スマホの照度センサを使って解析

ハードウェアが揃っているという点では1.がベストだが、はたして自作プログラムは載せれるのか疑問である。3.の照度センサは時間応答性に疑問が。何しろ、赤外線通信は2kbpsぐらいの速度が出てるのだ。せいぜい1Hz程度の応答性があればいい照度センサで解析できるのか、やはり疑問である。となると、ソフトと回路にハードルがある2.か・・・。

しかし、3.はちょっと捨てがたい。そこで、照度センサの値を見てみることにした。

自分が使っているサムスンのGalaxy SC-04Eには工場テストモードがあり、このモードに入ることで各センサの値をリアルタイムに見ることができる。

テストモードへは、標準の電話をかけるアプリで「*#0*#」と入力すればよい。電話をかける必要は無い。なお、この情報は以下のサイトから入手。

All Secret Codes of Samsung Galaxy S4 | Tutorials

以下、工場テストモードにして様子を見た結果。

 

f:id:donadonasan:20160326193937p:plain

図:入力イメージ。このあと#を打つと自動的に次の図の状態になる。

 

f:id:donadonasan:20160326193944p:plain

図:工場テストモード。色々見れる。

 

f:id:donadonasan:20160326193947p:plain

図:"Sensor"を押した場合、このようなセンサ状態表示・テスト画面に遷移する。

 

f:id:donadonasan:20160326193951p:plain

図:Lights sensorを押すと、このような画面に遷移する。

 

見た感じ、10Hz以上の速度で値が更新されているように見えるけどどうだろう・・・。期待薄ではある。

バグフィックス祭り

片道9時間の長距離飛行中、ReadMeを更新するために艦むすリストメーカーを動かしていたら、バグを5個も見つけてしまった。久しぶりにプログラミングする時間も確保できたので、さくさく修正。そろそろver.2.0を名乗ってもいいかな?

2017/05/07追記:肝心のソフト入手ページを書き忘れていた。

公開ページ:

github.com

 

ソフトへの直接リンク:

https://github.com/nibasya/KanmusuListMaker/blob/master/%E9%85%8D%E5%B8%83%E7%94%A8/KanmusuListMaker2.0.zip?raw=true

続きを読む

CListBoxのスクロール制御

CListBoxに、垂直スクロールバーが表示される程度にアイテムが表示されている状態でAddStringやDeleteStringを実行すると、スクロールバーの位置がリセットされ最上位に戻ってしまうことがある。これは、リストボックスの操作をするときに困る挙動だ。

f:id:donadonasan:20160209013102p:plain

これを解決するには、AddStringやDeleteStringをする前にスクロールバーの位置を保存し、処理後にスクロールバーの位置を再設定すれば良い。スクロールバーの位置は、以下の関数で取得・設定できる。これらは、正確には一番上に表示されているアイテムの番号を取得・設定する関数である。

int CListBox::GetTopIndex();

int CListBox::SetTopIndex(int nIndex);

なお、余計なスクロールを抑制するため、以下も併用する。

void CWnd::SetRedraw(BOOL bRedraw = 1);

以下、サンプルコード。

Visual Studioの出力ウィンドウにデバッグ文字列を出力する(ATLTRACE, AtlTrace, _RPTn)

Visual Studioを使ってWIndowsプログラムのデバッグ中に、プログラムや変数の状態を表示したい・残したいと思う人や、なんでstderrが使えないんじゃああ!という人向けメモ。

C/C++でこれをするには、OutputDebugStringや_RPTNという関数が便利。他にもATLTRACE, AtlTraceという関数がある。いずれも、Visual Studioの出力ウィンドウにメッセージを残す。

f:id:donadonasan:20160207171040p:plain

  • OutputDebugString
  • _RPT0, _RPTN, _RPTW0, _RPTWN
  • _RPTF0, _RPTFN, _RPTFW0, _RPTFWN
  • _RPTT0, _RPTTN, _RPTTF0, _RPTTFN
  • ATLTRACE
  • AtlTrace

 

続きを読む