ちゃっぴの監禁部屋

ガチガチに締めすぎて動きがとれなくなる。。。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  405  : 記事  5  : コメント  12114  : トラックバック  134

ニュース

記事カテゴリ

書庫

日記カテゴリ

Communities

Personal Information

とっちゃんさんから commnet をいただきました件について。

Windows プログラミングは、例外なくすべてGUIですよ。
コンソールと呼ばれるものもです。
あれも、Windowが出るでしょw

はい、console application を実行した場合、実行する user が interactive logon していれば結果が window で表示されますね。

以前、CreateProcess を調査していたとき、STARTUPINFO なるものがあるのに気づきました。Reference によると window の size を変更できるのでは?と試行錯誤していたのですが、そのとき console application と GUI (Windows) application で全く動きが違うわけで。具体的には、console application は STARTUPINFO で与えてやった size が利用されますが、GUI (Windows) application は STARTUPINFO で与えた size が適用されません。

なんでか?というとちゃんと reference に書いてあります。

For GUI processes, the specified position is used the first time the new process calls CreateWindow to create an overlapped window if the x parameter of CreateWindow is CW_USEDEFAULT.

ということで、GUI application の場合には CreateWindow に CW_USEDEFAULT を指定して起動するような application の場合には、 STARTUPINFO で与えられた値が上書きされるとのこと。なるへそ。

ここだけとっても、console application と GUI application では window を生成するしくみが違うような気がする。

ところで、batch, service, network logon の場合はどうでしょう?

当然ですが、表示されるわけがないですね。表示するにも、対象の window station がありませんから。

Process は起動されると自動的に window station を探しにいきます。その後で Thread と Desktop を関連付けるらしい。

う~む。収拾がつかなくたってきたww

とっちゃんさんからの指摘を受け window station が存在しない部分を削除

投稿日時 : 2007年12月24日 1:11

コメント

# re: Console application も GUI application? 2007/12/24 13:58 シャノン
というか、「UIがあるからGUI」なのであれば、ウィンドウを出さないWindowsアプリケーションやDLLは? となるわけで。
「そのアプリケーションが実際にどういう挙動をするのか」と「NTヘッダのサブシステム指定がどうなっているのか」は別でしょう。

# re: Console application も GUI application? 2007/12/26 10:26 とっちゃん
>interactive logon していれば結果が window で表示されますね。
違います。現在アクティブな Window Station に所属しているウィンドウなら見えますね。

です。
アクティブじゃないWindow Station(サービスの所属するものなど)は、見えないだけで、表示されていないわけではありません。
この違いがわからないとWindowsの深いところのプログラミングの違いを意識するのは難しいですよ。
#意図的に非表示にしていない限り、ウィンドウは表示されています。ただし、それがモニタに移るかどうかは別の問題。
Station が同じでも、座標がモニタ上になければモニタ上では見えませんが、表示はされています。

>表示するにも、対象の window station がありませんから
対象の Windows Station はありますよ。
表示対象となりうるではありませんがねw

根幹でいえば、コンソールウィンドウと、CUI-OS とでは、その画面表示が大きく異なります。
コンソールウィンドウ(Windowsに限らず)の場合、どこかでメッセージポンプが動いています。
ただ、それがアプリケーションサイド(バイナリレベル)からは見えないというだけです。

GUI-OS な環境でのプログラミングは見えない存在(ソースも画面も)を意識して行えないと、初級の域を脱することはできませんよw

見えなくても存在するものがあるのはわかりますよね?w

# re: Console application も GUI application? 2007/12/27 0:24 ちゃっぴ
> 対象の Windows Station はありますよ。
> 表示対象となりうるではありませんがねw

そのようですね。Terminal service とかまで考えると、active というのが難しいと思いますが。

とりあえず、お手軽に batch logon した process の window station の名前を取得してみましたが、"SAWinSta" が返ってきました。

# re: Console application も GUI application? 2007/12/27 0:40 ちゃっぴ
現在起動している process の window station の名前を取得
http://blogs.wankuma.com/tyappi/archive/2007/12/27/114733.aspx

# jwvYlUrjvTsV 2012/01/07 13:47 http://www.luckyvitamin.com/p-21773-doctors-best-b
I`m so grateful that you enlightened me and the most important thing that it happened in time. Just think, I have been using the internet for six years already but it`s the first time I`ve ever heard about it!...

Post Feedback

タイトル
名前
Url:
コメント