とっちゃんさんから 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 が存在しない部分を削除