Windows立ち上げ時に動作!!!


kido  2002-09-27 16:36:34  No: 50420  IP: [192.*.*.*]

お聞きしたい事があります。パソコンの電源を入れOSが立ち上がって、VCで作成したアプリケーションが画面いっぱいに起動し、そのときにはVCのアプリケーションだけしかマウスで操作できなくし、そのアプリケーションを終了したときには、windowsの終了画面に飛ぶ方法というのはどうしたらよいのでしょうか?
VCが起動してるときにはパソコンの機能を操作させてくないのです。お願いですが、教えてください。m(_ _)m

編集 削除
YuO  2002-09-27 20:10:03  No: 50421  IP: [192.*.*.*]

たぶん,無理ですね。
それっぽく見せるのが限界だと思います。

一応,キーボードを引っこ抜いてしまえば状況はだいぶ改善されます。
最大化状態で最前面表示状態にして,
WM_SIZEとかWM_MOVEとかを拾ってサイズと場所の修正かければ,
マウスだけなら他の操作をすることは難しいでしょう。

キーボードがあると,タスクマネージャやらなんやらを起動させられて,手のうちようが無くなります。
グローバルフックでWindowsキーとかCtrl+Alt+Delとかを潰すことができればいいのですが……。


Windowsの起動時に実行するのは,
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
とか
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
を利用すれば実現できます。

Windowsを終了させるのは,(NT系では特権取得後)ExitWindowsEx APIです。

編集 削除
jmel  2002-09-28 16:56:48  No: 50422  IP: [192.*.*.*]

jmelと言います。

YoUさんいつも貴重な情報ありがとうございます。
横槍で申し訳ないのですが、kidoさんと同じようなことを考えています。
キーボードの入力を全て横取りして、何かのキーを押しながら特定のボタンをクリックするとキーボードの制御がノーマルに戻ると言う仕組はやはり難しいでしょうか?

編集 削除
YuO  2002-09-29 21:45:03  No: 50423  IP: [192.*.*.*]

キーボードの入力はグローバルフック(システムフック)を使えば,簡単に奪い取ることができます。

ただし,システムのキーを奪い取ることができるかどうかはやったことがないのでわかりません。
特に,NT系でのCtrl + Alt + Delによる「Windows NTのセキュリティ」ダイアログの表示が恐らく抑制できないので,全てを奪うのは厳しいかと。

編集 削除
kido  2002-09-30 08:47:49  No: 50424  IP: [192.*.*.*]

解答ありがとうございます。
やはりそうですかぁ〜実は只今、GPIBなどの通信をするアプリケショーンを
作成をしてるのですが、これが厄介なことに通信をしてるときにタスクバーとか
メッセージボックスなどがでると通信が止まってしまうのです。そこでそれ以外の
処理ができないように、画面をふるに使い、他のアプリケーションを起動できなくし、またキー操作をしたいと考えたのです。しかしながら他社の製品をみたときに
今、考えたいたことをやっていたのでどうやってやったのかがすごくしりたくて
掲示板に出させていただきました。やっぱりモドキぐらしかできないのですかねぇ〜  がんばってトライしてみます。

編集 削除
Mnow  2002-10-17 17:44:55  No: 50425  IP: [192.*.*.*]

>厄介なことに通信をしてるときにタスクバーとか
>メッセージボックスなどがでると通信が止まってしまうのです。

こちらをスレッドを使って何とかしたほうがいいように思います。

編集 削除
kido  2002-10-24 20:55:29  No: 50426  IP: [192.*.*.*]

Mnowさん、まだ初心者のもので聞きたいのですが、スレッドとは?
その使うと通信は何とかなるのですか?

編集 削除
YuO  2002-10-25 01:22:02  No: 50427  IP: [192.*.*.*]

スレッドというのは,プロセス内での複数の実行単位のことです。
複数のスレッドを生成すると,同時に実行されます。
#実際には細切れになって実行されていますが。

実行に関する事項(レジスタなど)はスレッドごとに独立で用意されますが(contextと言います),
メモリ空間はプロセス内の全てのスレッドで共有されます。

通信プログラムだと,
・GUI担当のメインスレッド (User Interface Thread)
・通信担当のスレッド (Worker Thread)
と分担することが多いです。
Worker Threadが重い処理を行っても,User Interface Threadに影響が及ばないためです。
#逆も成り立ちますが,普通UI側で重い処理は行いません。

ただし,同期などの問題が起こるので,それなりの知識が必要になります。
とりあえず,マルチスレッドプログラムに関して勉強するのが先決だと思います。


ところで,
>タスクバーとかメッセージボックスなどがでると通信が止まってしまうのです。

タスクバーがでるとは……?

編集 削除
mokudo  2002-10-25 09:12:31  No: 50428  IP: [192.*.*.*]

Youさんへ

>タスクバーとかメッセージボックスなどがでると通信が止まってしまうのです。

あっ失礼しました。タスクバーをクリックした状態になると通信がとまってしまうという意味です。すいません。m(__)m

それとこのメモリ空間のスレッドなどの参考書とかはないのでしょうか?
どうもMSDNとかのHpで内容は難しくてうまく理解できないのです。この辺のわかりやすい参考書というものがありましたら教えてください。お願いします。

編集 削除
kido  2002-10-25 09:13:30  No: 50429  IP: [192.*.*.*]

あっ失礼、上記の内容のmokudoはkidoです。

編集 削除
YuO  2002-10-25 12:19:29  No: 50430  IP: [192.*.*.*]

なんで名前をよく間違えられるかなぁ……。
「You」と呼ばれて平気になった自分が悲しい……。


>それとこのメモリ空間のスレッドなどの参考書とかはないのでしょうか?

一応,私は『WIn32 API散歩道』(きた あきら著/ソフトバンク)で最初に勉強しましたが……。
http://www.vwalker.com/publishing/ISBN/0598/
なにせ1998年の本ですからね……。

基本は大きな書店やコンピュータ専門店などでとにかく立ち読みすることです。
で,読みやすいと思った本数冊に関してさらに読んでみて,
自分のレベルに一番合っていると思う本を一冊にしぼる,
ということをやった方がよいかと。

マルチスレッドに関してなら,Javaの本でもある程度は役に立つとは思いますよ。
#同期の話とか。

編集 削除
jmel  2002-10-25 12:53:31  No: 50431  IP: [192.*.*.*]

YuO さん
すみません、YoUと書いてしまったことに今ごろ気が付きました。

編集 削除
kido  2002-10-25 13:20:46  No: 50432  IP: [192.*.*.*]

YuOさん。ありがとうございます。
名前を間違えて申し訳ありません。すごく反省してます。m(__)m
ちょっくら書店まで週末を使ってみてきます。

編集 削除