VC++つかってます。
バックグラウンドで動作するプログラムをつくりたのですが、どうはじめればいいかわ
かりません。
たとえばあるキーを入力したら、画面を真っ黒にするといったようなものです。真っ黒
にするプログラムはすでに出来ています。(ダイアログのボタンを押せば黒くなるとい
うような。)
これをウィンドウ無しでつくるにはどういった手法をすればいいでしょう。
>VC++つかってます。
ってただの総称でしょう どんな技術で実現出来ているんでしょうかね?
>画面を真っ黒にする
と言っても
スクリーンセーバー起動、ディスプレイパワー制御、
ダイアログウィンドウペインのみのブラック表示
ブラックメモ帳の貼り付け
どれ
復帰しなくても良い、復帰したい どっち
ウィンドウズ、ショートカットキー割り当てで実現不可能な物なんですか?
プログラムはすでに出来ているんですよね?
>ウィンドウ無しでつくる
とはどんなことイメージしてるの
osは何
>発言される前に「使用上の注意」を必ずお読み下さい。
読んでくれていればこんなアホな質問されなくなるよ
>読んでくれていればこんなアホな質問されなくなるよ
この発言は
>発言される前に「使用上の注意」を必ずお読み下さい。
>>個人への批判、失礼になるような発言、不快にさせるような発言は行わないで下さい。
これに該当しないんですかね?
でも、woodさんの仰るようにMFCの使用の有無などがわからないと
適切な回答もできません。
なので、当たり障りのないところだけ・・・
SW_HIDE, ホットキー, (タスクトレイ)
これらを使用すれば実現できるかと思います。
なるほど、ありがとうございます。
思わぬ洗礼を受けたようで。。
VC++の方もこちらに投稿したのもはじめたばかりなので、よく用語はわかりませんでし
た。
これを機に以後気をつけます。
OS WINDOWS XP Visual C++ 6.0
>画面を真っ黒にする
>と言っても・・・
スクリーンセーバーですね。
>復帰しなくても・・・
復帰とはなんでしょう?
ウィンドウを復帰させるか否かということでしょうか。
もしそうであれば、このプログラム用のウィンドウははなっからない形にしたいとおも
ってます。つまり復帰は無しの方向で。
>MFCの有無
調べてみたのですが、MFCというのは使用しているようです。
ウィンドウは表示させたくないのですが、今はどうやるかわからないので、とりあえず
プロジェクト選ぶときに、MFC→SDI と進んでます。
>SW_HIDE
ShowWindow( SW_HIDE );
を使えばよいでしょうか。どこで使えばいいですか?
>ホットキー
ホットキーの方は、わかりやすいページを見つけたので、大丈夫だと思います。
単に画面を真っ黒にしたくて復帰はしないってどんな用途なんだか
想像つきませんが、単なるコンソールプログラムでOSのホットキー割付で
起動すると真っ黒では駄目なんですか?
復帰しないのであれば、それで十分な気がしますけれど。
(ウインドウを持ったプログラムである必要が無いような)
しかし復帰しないのであれば、後はPCを落とすだけですか?
すいません、まだ説明不足だったようです。
私が言った「復帰させない」とは「起動時、プログラム自体のウィンドウは表示させな
いし、あとあと表示させることもない。つまりウィンドウ無しで働くプログラム」とい
う意味です。上述の通り、質問をそう解釈して答えていました。。
PATIOさんの言うとおり、黒くして復帰しないのは意味無いので、特定のキーを押
すと、画面を真っ暗にするスクリーンセーバーのようなものを起動し、またあるキーを
押すと元に戻すようにしたいです。
まっ黒くする時点でウィンドウを表示しているような・・・
つまり、タイトルバーや枠が全くないウィンドウをつくって、それのクライアントエリア
を黒で塗りつぶせばOKなのでは。
デスクトップに直接描画してもやり方にもよりますが目的の動作はしないでしょう。
POPUPウィンドウを画面いっぱいに広げてShowWindowで表示・非表示を切り替えるっての
が一番簡単な気がします。
あるいは完全なスクリーンセーバーを作っちゃうとか。
これだと起動するタイミングが設定依存になっちゃうけど。
###-------------------(その1)-----------------------------------###
>またあるキーを押すと元に戻すようにしたいです。
「あるキー」を押したらプログラム終了ちゃえば良いんじゃないの?
プログラミングなしで実現できそうですけど
1.c:\windows\system32\logon.scr のショートカットをデスクトップに作成する
2.作成したショートカットのプロパティの
ショートカットキーへ適当なキーを割り当てる
3.割り当てたキーを押す(スクリーンセイバー 起動)
4.復帰(マウスやshiftキー押す)
これでだめですか?
###-------------------(その2)-----------------------------------###
>ウィンドウ無しでつくるには...
以下のサンプルは当てはまりますかね
非矩形ウィンドウの作成
(MFC)
/////////////////////////////////////////////////////////////////////////////
// WM_INITDIALOGハンドラ
BOOL CFooDialog::OnInitDialog()
{
CDialog::OnInitDialog();
:
:
CRect rcWindow;
GetWindowRect( rcWindow );
// 四隅の丸いリージョンを作成(丸い角の幅、高さを100)
// m_rgnはCRgn型のメンバ変数
m_rgn.CreateRoundRectRgn( 0, 0, rcWindow.Width(), rcWindow.Height(), 100,
100 );
// リージョンの設定
SetWindowRgn( m_rgn, TRUE );
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われませ
ん。
}
/////////////////////////////////////////////////////////////////////////////
###-------------------(その3)------------------------------------###
自分でスクリーンセーバー作れ
CUTT(カットシステム) 北山洋幸著
Visual C++.NETではじめる Win32API システムプログラミング
¥3,800
にサンプルがあります
###-------------------(その4)------------------------------------###
>バックグラウンドで動作する
サービスとして動作するプログラムをさしているのでしょうか?
俺は解説できないので
技術評論社の
「Visual C++ 6.0 ATLによる COM プログラミング 入門」
を参考にしてみてはいかがでしょうか?
###-------------------(その5)------------------------------------###
イヤミ
コンピュータを操作する人で「復帰」と言う言葉の意味を知らないと言うのは
プログラミング以前の問題があるのではないでしょうか?
>調べてみたのですが、MFCというのは使用しているようです。
他人事のような発言ですね
最後に注意
アクティブなアプリケーションがキーボードアクセラレータを使用している場合
キーアサインが重なっているとどの操作が優先されるか試したことが無いのですが
アクティブアプリケーションの物が優先されると思います
ありがとうございます。
とりあえず、糸口が見えてきたのでみなさんのアドバイスを元にしばらくがんばってみ
ます。
それと、
>コンピュータを操作する人で「復帰」と言う言葉の意味を知らないと言うのは
>プログラミング以前の問題があるのではないでしょうか?
教えてもらった立場ながら失礼しますが、何故知らなかったことでイヤミを言われなけ
ればいけないのでしょうか?
>他人事のような発言ですね
用語がまだあまりわからなく使ってる確証がなかったからそう言ったまでです。
そこだけ気になったので。
でも丁寧に解説ありがとございます。すごく参考になりました。
解決チェック忘れました。
今、また色々と調べてみて、購入した本を読んでみて、自分のあまりの無知さに気がつ
きました。
拍子抜けで生意気なことを言ってしまったことに気がつきました。
おまけにこれは自記事を削除できないのですね。。
woodさんすいません、上のコメントは聞き流してくださいませ。。