Win32API質問箱 Build ..
116:デフォルトの名無しさん
07/06/17 16:42:48
>>113
>NT系OS用はuni.使わないとかっこわるいじゃない
なんとなく気持ちは解るけど、それはミスディレクション
基本は keep it simple、だよ
NT系以外もターゲットにするなら、Unicodeは極力利用しないのがベター
無用な複雑性こそ憎むべきだよ
117:デフォルトの名無しさん
07/06/17 16:46:55
Windows Vista にて
普通のサーバープログラムを sexe でサービスに入れたのですが
通知領域(タスクトレイ)にアイコンが表示されません。
サーバー機能は問題なく動作しているようです。
もちろん「ディスクトップとの対話をサービスに許可」していますし
Shell_NotifyIcon のタイムアウト処理も行い
msgTaskBarRestart によるタスクトレイ再登録も行っています。
直接の原因は Shell_NotifyIcon が ERROR_FILE_NOT_FOUND に
なってしまっていることのようです。
何のファイルが見つからないんだ??? さっぱりわからん。
対応策はあるのでしょうか?
やはり サービスプロジェクトで書き換えるしかない?
118:デフォルトの名無しさん
07/06/17 16:47:59
sex ではチンポ入れるんだよ
119:デフォルトの名無しさん
07/06/17 16:49:42
↑のコメントをした者ですが、
ちなみにサービス起動しない場合はちゃんとアイコンは表示されます。
120:デフォルトの名無しさん
07/06/17 16:51:53
119のコメントは117のコメントに対するものです。
121:デフォルトの名無しさん
07/06/17 16:54:55
>116
NT以外って何?CEのこと?3.1のこと?
122:デフォルトの名無しさん
07/06/17 16:57:15
>>120
Vista以外だとどうなの?
それからVistaでの変更の影響は調べたの?
セッション0の分離とか大規模な変更が行われたので、
互換性に関する資料がMSから大量に出されてたと思うけど。
123:デフォルトの名無しさん
07/06/17 16:57:46
>>121
いや、流れからすると95系だろ
124:デフォルトの名無しさん
07/06/17 17:10:34
>>117
>何のファイルが見つからないんだ??? さっぱりわからん。
URLリンク(msdn2.microsoft.com)
>The most common cause of failure is that the taskbar window doesn't exist or is unresponsive.
>GetLastError in that case returns E_FILE_NOT_FOUND.
125:デフォルトの名無しさん
07/06/17 17:34:33
>>122
WindowsXP の場合は、タスクバーにアイコンは表示されて
サーバー機能も問題なく動作します。
ただ、何故かサービスのくせにひとたびログインしてログオフすると
プロセスが死にます。この辺はまだ未調査です。
>>124
ありがとうございます。調査します。
126:デフォルトの名無しさん
07/06/17 17:41:44
>>WindowsXP の場合は、タスクバーにアイコンは表示されて
タスクバー→タスクトレイの間違いです。すみません。
127:デフォルトの名無しさん
07/06/17 19:12:54
ボロ出し過ぎ
128:デフォルトの名無しさん
07/06/17 19:43:20
整理すると、sexe でサービス登録した場合、以下の現象になっている。
1)Windows XP の場合は、ログオフでサービス停止になる。
タスクトレイアイコンは表示される。
2)Windows Vistaの場合は、タスクトレイにアイコンが出ない。
ログオフしてもサービス停止にはならない。
129:デフォルトの名無しさん
07/06/17 20:17:28
>>113
MSDNライブラリでprintfの書式化文字列のところくらい見ろヨ
>>116
バイナリもテストも2重になっちゃうものね。
130:デフォルトの名無しさん
07/06/17 20:22:19
>>125
プロセスが死ぬのは、お前の書いたコードのバグで、例外か何かで落ちてるんだろ。
Drワトソンとか使ってチェックしる!
そもそも、
ユーザーのデスクトップのタスクトレイに、サービスが直接アイコンを出す
というのは、あんまりよくないと思う。
サービスのプロセスとは別に、
タスクトレイにアイコンを表示したりする、サービスのクライアントのプロセスを用意したほうがいい。
それをAll Usersのスタートアップに突っ込んでおけばいい。
131:デフォルトの名無しさん
07/06/17 21:24:08
>>95
どうせVB6.EXEのほうの設定(してない)が適用されてるとかいうオチだろ
132:デフォルトの名無しさん
07/06/17 21:36:37
>>130
>プロセスが死ぬのは、お前の書いたコードのバグで、例外か何かで落ちてるんだろ。
>Drワトソンとか使ってチェックしる!
バグかもしれないが、CFrameWnd::OnDestroy() が呼び出されて正常終了している
ところまでは解っている。
>そもそも、
>ユーザーのデスクトップのタスクトレイに、サービスが直接アイコンを出す
>というのは、あんまりよくないと思う。
そうなのですか。了解。
133:デフォルトの名無しさん
07/06/17 21:39:51
>CFrameWnd::OnDestroy() が呼び出されて正常終了している
そりゃログアウトしたらウィンドウはクローズするよ
サービスなんだからウィンドウが無くても動き続けるように作らなくちゃ
134:デフォルトの名無しさん
07/06/17 21:48:36
>そりゃログアウトしたらウィンドウはクローズするよ
>サービスなんだからウィンドウが無くても動き続けるように作らなくちゃ
ウインドウは通常 ShowWindow( SW_HIDE ) していて、タスクトレイの
アイコンからのメニューで表示できるようなプログラムになっています。
それでどうしてもタスクトレイにアイコン表示したかった。
ウインドウがあるから当然なのかなとも思ったのですが、Vista では
サービス停止にならなかったので???と思ったしだいです。
135:デフォルトの名無しさん
07/06/17 21:56:28
セッション0隔離でググれ
136:デフォルトの名無しさん
07/06/17 21:59:22
>>セッション0隔離でググれ
了解。ありがとうございます。
137:デフォルトの名無しさん
07/06/17 22:19:38
>>131
>>98が指摘しているけど、違うらしいぞ。
何を指摘されているのか理解していないのかもしれないが。
>>132
トップレベル・ウィンドウに終了しる! っていうメッセージが来て、
はいはい、わかりました
といって終了するようにプログラムしたのは、おまえ自身だろ?
そりゃぁ終了するわな、当然。
サービスなんだから、そういうメッセージが来てもシカトしろよ。
サービスとして起動されている場合だけシカトするのでもいいよ。
ていうか、
ただのアプリとして作ったものをsexeを使ってサービスとして走らせるのに、
タスクトレイにアイコンだしたり、ユーザとの対話をするというのが、おかしい。
138:デフォルトの名無しさん
07/06/17 22:24:11
そもそも、sexeを使おうという時点で、間違ってるよ。
自分でサービスのためのAPIを使おうとすれば、自ずと理解することが、すっぱり抜けてる。
139:デフォルトの名無しさん
07/06/17 22:24:48
サービスにすると嫌われるよ
140:デフォルトの名無しさん
07/06/17 22:33:12
sexe はちょっと試してみただけです。
いろいろと勉強になりました。
ありがとうございました。
141:デフォルトの名無しさん
07/06/17 22:34:40
sex はちょっと試してみただけです。
いろいろと勉強になりました。
ありがとうございました。
142:デフォルトの名無しさん
07/06/17 23:04:34
>>139
sexeに比べたらマシだろ。
143:デフォルトの名無しさん
07/06/17 23:41:45
ついでにさらに教えてほしいのですが、
サーバープログラムもサーバーとしての機能設定を行ったり、
クライアントの情報をリアルタイムで確認したりという
GUIがあった方が良いケースもあると思いますが、
こういうプログラムはサービスにする必要はありますでしょうか?
144:デフォルトの名無しさん
07/06/17 23:45:33
>>143
普通はサーバプログロムのみをサービスにしてGUI系は別プロセスにするんじゃないか?
145:デフォルトの名無しさん
07/06/17 23:55:06
>>144
そうするとリアルタイムという部分が若干のタイムラグとなりますが、
やっぱりその実装ですかね...
146:デフォルトの名無しさん
07/06/17 23:58:49
>>144
そうするとリアルタイムという部分が若干のタイムラグとなりますが、
やはりその実装ですかね...
147:デフォルトの名無しさん
07/06/18 00:01:24
>>145
143の文章も意味が不明瞭だが、
もうちょっと、他人にわかりやすく、端折らずに書いてよ。
タイムラグを気にしているけど、
サービスと、
稼働状況をモニターするクライアントとの間は、
どうやって情報を受け渡ししようと考えてるの?
148:デフォルトの名無しさん
07/06/18 00:09:45
>タイムラグを気にしているけど、
>サービスと、
>稼働状況をモニターするクライアントとの間は、
>どうやって情報を受け渡ししようと考えてるの?
TCP/IP による通信です。
タイムラグはさほど気にすることはありませんが...
149:デフォルトの名無しさん
07/06/18 00:12:10
じゃあ解決だね
150:デフォルトの名無しさん
07/06/18 00:13:10
解決です。ありがとうございます。
151:デフォルトの名無しさん
07/06/18 00:17:33
>>148
なんだよ。
気にしないものを、気にしてたのかよ。
馬鹿馬鹿しい。
で、
同一プロセスの次が、いきなりTCP/IPかよ。
タイムラグを気にしてるから、共有メモリと同期を使うのかと思ったぞ。
152:デフォルトの名無しさん
07/06/18 00:25:42
>>151
TCP/IPはクライアントとの通信です。
モニターはサーバーPCのみでOKということです。
同一プロセスならばリアルタイムですが、プロセスを分けると
共有メモリにしろ周期的にチェックする必要があるので
タイムラグが若干発生するけどまあ気にするほどでもないかと
いうことです。失礼しました。
153:デフォルトの名無しさん
07/06/18 00:41:19
>>152
文章が不明瞭だと思ってたけど、日本語が通じなんだな、おい。
154:デフォルトの名無しさん
07/06/18 00:49:50
>>153
単なる誤解でしょ。
>>稼働状況をモニターするクライアント
をモニター=クライアントと解釈するかどうかですよね。
そうだとすると通じてなかった。
155:デフォルトの名無しさん
07/06/18 00:55:50
>>154
それ以外の解釈は、ないだろ。
誤解するかもしれないので、
「稼働状況をモニターする」
と書いたのに。
だいたい、お前が作っているサービスが何をする代物なのか、言ってないだろ。
156:デフォルトの名無しさん
07/06/18 00:59:21
>>155
>お前が作っているサービスが何をする代物なのか、言ってないだろ。
ここで議論することでもないですので、これで終わりにしましょう。
ありがとうございました。
157:デフォルトの名無しさん
07/06/18 00:59:22
> 同一プロセスならばリアルタイムですが、プロセスを分けると
> 共有メモリにしろ周期的にチェックする必要がある
同一プロセスだからといってリアルタイムとは限らないし、
プロセスを分けることで、周期的にチェックするしか出来ないわけでもない。
158:デフォルトの名無しさん
07/06/18 12:48:34
>>134
・Vistaではサービスは別のセッションで動くように変更された
・あるセッションで動いているウィンドウは別セッションでは表示されない
・Windowsが終了(ログオフ含む)時に閉じようとするのは、ログオンしているセッションに属しているウィンドウのみ
・WM_DESTROYの応答でPostQuitMessageしていたらウィンドウ閉じるときにプロセスが終わってしまう
この4点で「なぜVistaではトレイアイコンが出ないか」「なぜXPではログオフでプロセスが終わってしまうか」
の両者の理由が理解できるかと。
159:デフォルトの名無しさん
07/06/18 13:03:07
まあ、サービスをシステム権限で動かしてデスクトップとの対話を有効にすると
大きな穴になる可能性があるからなあ。
昔、その場限りでアドミン権限で実行させるためだけのサービスとか作って遊んでたっけ・・・
160:デフォルトの名無しさん
07/06/18 13:24:10
>>159
>昔、その場限りでアドミン権限で実行させるためだけのサービスとか作って遊んでたっけ・・・
まあ実際RunAsってサービス使って実装されてるしね。
URLリンク(www.atmarkit.co.jp)
>なおこの機能は、Windows 2000では「RunAs」というサービス、
>Windows XPでは「Secondary Logon」というサービスを使って実現されている。
>Windows 2000/XPでは、デフォルトでこのサービスが組み込まれ、
>システム起動時に自動的に起動されるようになっているが、
>何らかの理由からこのサービスが起動されていないと、
>[別ユーザーとして実行]は利用できない。
161:デフォルトの名無しさん
07/06/18 15:58:38
>>159
そんなサービス作らずとも、
標準のatコマンドで直近の時間を指定するか、soonコマンドを入れるかすれば、
管理者権限をもったプロセスを普通のユーザが起動できたぞ。
>>160
話が唐突に飛んでる
162:デフォルトの名無しさん
07/06/18 16:07:33
>>161
>話が唐突に飛んでる
スマソ。
>>159 が作っていたのが「いわゆるデスクトップでその場限りでアドミン権限で実行させるため」
のものだと誤解していたようだ。
しかしあれだけの文章から>>159 が作っていたのが
「別のウィンドウステーションでその場限りでアドミン権限で実行させるため」のものと
よく確信できたね。
じつは>>159==>>161?
163:161
07/06/18 16:43:49
>>162
NT4.0時代では常套手段だったから。
164:デフォルトの名無しさん
07/06/18 18:48:49
>>158への対策として「別セッション上のデスクトップのウィンドウを操作したい」ってのは可能なの?
別セッションのHDESKに接続できれば何とかなりそうな気もするけどAPIが見あたらない・・・
165:デフォルトの名無しさん
07/06/18 18:58:04
>>163
それはatを実行する権限を持ったやつが必要だしなあ
fileman.exeをadminで実行してしまえばそこから起動するやつはみなadminだったっけな
166:デフォルトの名無しさん
07/06/18 21:48:52
VSのインテリセンスのような小窓?はどうやって実装しているんでしょうか。
解説しているサイトか取っ掛かりになるようなキーワードを教えてください。
167:デフォルトの名無しさん
07/06/18 21:54:26
ToolTipじゃねーの?
168:デフォルトの名無しさん
07/06/18 22:05:26
アクティブにしないフラグつっこんでShowWindowとかSetWindowPosしてるだけじゃね?
と考えるおれは素人
しかしToolTipを間違ってクリックするとフォアグラウンド奪う実装は
なんとかしてほしい
169:デフォルトの名無しさん
07/06/18 22:16:49
CD-Rソフトのように、アプリケーションの起動中のみ、
CDやUSBメモリのようなメディアを接続しても
オートランを働かせないようにするにはどうしたら良いでしょうか?
170:デフォルトの名無しさん
07/06/18 22:28:10
>>169
おちつけ
kwsk
171:デフォルトの名無しさん
07/06/18 22:37:30
R焼きソフトを起動中にオートランが起動しないのは、
CDドライブを握ってる副作用みたいなもん。
USBメモリは差し込む前にデバイスを握ることができないので
機能として実装するのは難しかったはず。
172:デフォルトの名無しさん
07/06/18 22:58:21
一時的にオートランの設定をOFFにする。
問題はアプリが異常終了したとき、OFFのままになる。
173:デフォルトの名無しさん
07/06/19 01:29:37
プログラムが異常終了していないか監視するプログラムを作る。
174:デフォルトの名無しさん
07/06/19 01:33:09
OSが終了しないとも限らない
OSの監視も必要だ
175:デフォルトの名無しさん
07/06/19 01:56:01
OSごと異常終了することへの対策は、
アプリが起動したら、
レジストリの自動実行に、オートランの設定を元に戻すプログラムを登録し、
アプリが正常終了したら、その登録を消すようにすればいい。
元に戻すプログラムは実行されたら、自分で自動実行の登録を消すのも忘れずに。
176:デフォルトの名無しさん
07/06/19 02:26:48
autoun関係のレジストリって、変更後再起動しないと
explorerが認識してくれないこと無い?
177:デフォルトの名無しさん
07/06/19 02:28:36
Win95を無視するなら
RegisterWindowMessage(TEXT("QueryCancelAutoPlay"))
をどうぞ
178:デフォルトの名無しさん
07/06/19 10:24:04
マルチポストあんましたくないんですが、すみません、このスレでいいのか迷うんですが、
Windows2000やXP、Vistaで、アプリからサービスを一時的に停止したり
開始したりする方法を教えて下さい。
宜しくお願いします。
179:デフォルトの名無しさん
07/06/19 10:27:58
やばい機能に使えそうだから教えない
180:デフォルトの名無しさん
07/06/19 10:28:46
net start/stop呼んどけ
181:デフォルトの名無しさん
07/06/19 10:32:23
マルチは嫌い。
182:デフォルトの名無しさん
07/06/19 10:34:02
>>178
>マルチポストあんましたくないんですが
ふざけんな阿呆。
PC一般板にでも逝け。
そして二度と来るな。
183:デフォルトの名無しさん
07/06/19 13:57:40
静的ライブラリにリソースファイル (.res) を入れました。
このライブラリを別のプログラムからリンクした場合、
リソースがリンクされないようなのですが、どうしてでしょうか。
解決策はないでしょうか。
184:デフォルトの名無しさん
07/06/19 14:14:56
.libにリソースは入れられない
185:デフォルトの名無しさん
07/06/19 15:52:58
ええ?でも VC8 でビルドすると自然に入りますよ。
186:デフォルトの名無しさん
07/06/19 16:00:40
入る?DLLとかじゃなくて?
libってのは、objファイルを集めたもので、リンク時に使われてる関数が含まれてる
objファイルを取り出してリンクするためのものだから、resが入ってても困ると思うんだが。
187:デフォルトの名無しさん
07/06/19 16:12:27
>>186
入るよ。 lib.exe /LIST Some.lib とかコマンド打つと、.res が入っている。
.obj も .res も link.exe への入力になるんだから、
そのまま .res もリンクしてくれればいいのだけど、
どうもしてくれないみたい。何かオプションがいるのかな。
188:デフォルトの名無しさん
07/06/19 16:16:31
いや、、そのresは名前をつけられるの?
189:デフォルトの名無しさん
07/06/19 16:22:04
そりゃ、静的ライブラリを作るプロジェクトの
リソースコンパイラの設定でできるよ。
190:デフォルトの名無しさん
07/06/19 18:36:56
borlandなりgccなりvcなりしかるべき処理系のスレにいったほうが幸せになれると思うよ
191:デフォルトの名無しさん
07/06/19 18:54:28
VC8じゃstaticライブラリのプロジェクト設定にはリソースコンパイラ用のページが現れないな。
ファイルを混入させることはできても、リソースとしてリンクさせることはできないんだろう。
192:デフォルトの名無しさん
07/06/19 22:04:46
>>164
SetThreadDesktop
193:デフォルトの名無しさん
07/06/20 01:03:05
>>192
別セッション上のデスクトップのハンドルって取得できるの?
194:デフォルトの名無しさん
07/06/20 03:11:36
ライブラリにリソースを入れるのはいいとして、
ライブラリの中身全てがリンクされるわけじゃないぞ。
参照しているものだけがリンクされるんだ。
だから、リソースをライブラリに入れただけでは、リンクされないぞ。
ちゃんと、そのリソースを参照しないとな。
195:SEX
07/06/20 04:21:18
WNDCLAS"SEX"
INITCOMMONCONTROL"SEX"
196:デフォルトの名無しさん
07/06/20 07:04:20
こういう事って可能でしょうか?
A.EXEからB.DLLのエクスポート関数を呼び出したのを監視するプログラムを作る。
可能であれば方法を教えて下さい。
197:デフォルトの名無しさん
07/06/20 07:20:58
Bの方に通知機能を入れておけ
198:196
07/06/20 08:06:04
それがA.EXE、B.DLLともソース閲覧のみで変更は許されてないんです。
関数はB.DLLのリストビューウィンドウを呼び出すもので負荷の少ない通知メッセージを探しているんですけど。
199:デフォルトの名無しさん
07/06/20 08:29:19
つ[Spy++]
200:20
07/06/20 08:30:59
>>196
APIフック。AdvancedWindowsの弟4部 DLL を読めば解決すると思います。
201:196
07/06/20 09:08:51
>>199
とりあえず、WM_CREATEで作れました。
>>200
アッー!APIフックですかぁ。確かにできますね。
AdvancedWindows買うつもりですが高いですね。
ありがとうございました。
202:デフォルトの名無しさん
07/06/20 09:13:54
>>191
> VC8じゃstaticライブラリのプロジェクト設定にはリソースコンパイラ用のページが現れないな。
> ファイルを混入させることはできても、リソースとしてリンクさせることはできないんだろう。
ページはあるよ。ちゃんとやってみた?
リソースはデフォルトでライブラリに含まれるようになっている。
>>194
> ちゃんと、そのリソースを参照しないとな
どうやって参照するの?
リソースIDで参照しても参照したことにならないよね?
203:デフォルトの名無しさん
07/06/20 09:36:25
>>202
>どうやって参照するの?
だから名前付けられるのかって聞いたんだよ
意味が無いということを説明したいのに反論ばかりして
人の言うこと聞く気も無いだろ、キミ
204:デフォルトの名無しさん
07/06/20 09:57:53
それ以前にスレ違いだ
205:デフォルトの名無しさん
07/06/20 10:10:17
>>203
ああ、そういことね。了解。すんません。
206:デフォルトの名無しさん
07/06/20 17:51:12
workgroup の 自分のマシン名を得るのはどのようにすればよいのでしょうか?
207:デフォルトの名無しさん
07/06/20 17:57:41
>>206
Windowsの正規の呼び方ではない、
「マシン名」なんていう言い方をするから、
わからんのですよ。
正しい呼び方は、コンピュータ名。
MSDNライブラリで、GetComupterまで入力すれば、候補のリストに
GetComputerName
GetComputerNameEx
あたりが見つかるでしょう。
208:206
07/06/20 18:08:49
>>207 ありがとうございます。できました。
ついでに環境変数にもいっぱいあったのでそれも参考にします。
209:デフォルトの名無しさん
07/06/20 21:03:58
>>207
× コンピュータ名
○ NetBIOS名
210:デフォルトの名無しさん
07/06/20 21:53:59
>>193
調べてないけどターミナルサービス関係のAPIで何とかなったりしない?
Vistaでは常にセッションが分かれるけどXPでも高速ユーザー切り替えや
リモートデスクトップ使っているときは意識する必要があるはずだから
211:デフォルトの名無しさん
07/06/20 23:41:09
>>209
マイコンピュータのプロパティを開いて、タブの一覧を見よ。
「コンピュータ名」と書かれているから。
212:209
07/06/21 00:08:15
>>211
スレ違いだけど↓
URLリンク(www.monyo.com)
213:デフォルトの名無しさん
07/06/21 00:16:13
>>212
GetComputerNameをMSDNライブラリで引いてみなよ。
NetBIOS名を取得するって書いてある。
とはいえ、
GetNetBIOSなんとか
ではないんだよ。
あくまでも、
GetComputerNameなの。
214:デフォルトの名無しさん
07/06/21 00:18:28
どうでもいい
215:209
07/06/21 00:36:58
>>213
APIの名称については文句をいっていない。
問題にしているのは「正しい呼び方は、コンピュータ名」<この部分
URLリンク(msdn2.microsoft.com)
>Retrieves a NetBIOS or DNS name associated with the local computer. The names are established at system startup, when the system reads them from the registry.
216:デフォルトの名無しさん
07/06/21 01:01:26
もうバカはほっとけよ
217:デフォルトの名無しさん
07/06/21 01:29:03
>>215
コンピュータ名 = NetBIOS名もしくはDNS名
ドメインコントローラがActiveDirectoryの場合は、NetBIOS名にならない。
218:デフォルトの名無しさん
07/06/21 04:34:48
>>215
その英文から「NetBIOS名」という超訳をひねりだせる脳味噌に感激
219:デフォルトの名無しさん
07/06/21 07:15:33
NetBIOS or DNS name
だからNetBIOS名かDNS名だろ
220:デフォルトの名無しさん
07/06/21 09:55:18
NetBIOS無くてもFQDNでアクセスできるからなあ
221:デフォルトの名無しさん
07/06/21 10:15:04
>>217 その内容については知っている
>>206に「workgroupの〜」って付けて発言しているから
DNS HOST名を包括しているコンピュータ名という用語を>>207
で
使用するのは正しくないと>>209でいいたかっただけ
222:デフォルトの名無しさん
07/06/21 10:23:54
FDQN
223:デフォルトの名無しさん
07/06/22 13:44:36
特定のプロセスIDの所有するすべてのスレッドIDを取得したいんだけどどのAPIでやりますか?
スレッドIDで過去ログGrepしたけどないんで教えてください。
後、フックを入れてフォアグラウンドになったときをつかまえてスレッドID取得というのは無しの方向で。
224:デフォルトの名無しさん
07/06/22 14:14:18
Tool Helpでも使えば
225:デフォルトの名無しさん
07/06/22 14:16:05
Tool Helpだな
226:デフォルトの名無しさん
07/06/22 14:27:17
>>224
>>225
ありがとう。AdvancedWindowsのProcessInfoアプリケーションがサンプルになりました。
227:デフォルトの名無しさん
07/06/22 15:10:41
SystemParametersInfo()の電力管理フラグ、
スクリーンの低消費電力モードとスクリーンの電力停止モードはどう違うのでしょうか?
どちらも同じ値が返ってきますが。
228:デフォルトの名無しさん
07/06/22 17:33:28
文字通りなんじゃねーか?
コンパネの電源管理には電源を切る時間しか出てないから実際には使われてないのかも
229:デフォルトの名無しさん
07/06/22 18:17:32
マウスとキーボードが10分間放置されたときに自動的に終了するアプリを作りたいんだけど、
マウスのほうは定期的に座標を調べれば動いてるかどうかわかるが、
キーボードの無操作を検知するにはどうしたらいい?
自プロセスはタスクトレイに入っているのみ。
230:デフォルトの名無しさん
07/06/22 18:21:54
スクリーンセーバーにしろw
231:デフォルトの名無しさん
07/06/22 18:28:58
普通に考えたらジャーナルフックとかじゃないのか
232:デフォルトの名無しさん
07/06/22 18:58:09
>>229
普通にKEY_DOWN捕まえるだけじゃねぇか
バカじゃねぇのプtゥtw
フックが嫌ならGetAsyncKeyStateとかで
233:デフォルトの名無しさん
07/06/22 20:51:04
無操作を検知するのにKEY_DOWNとな!
234:デフォルトの名無しさん
07/06/22 21:14:34
>>233
はいはいアホアホ
235:デフォルトの名無しさん
07/06/23 00:05:34
>定期的に座標を調べれば動いてるかどうかわかるが
そもそもなんでこれでマウスが操作されてないかどうか解るんだ?
走査頻度にもよるが、同じ位置に戻ってたら動いてるかどうか解らないのでは?
移動せずにボタンだけ使ってるとかも解らない気がするし
236:デフォルトの名無しさん
07/06/23 00:15:12
フックでキーとマウスのイベントを取得して、
イベント発生ごとにタイマーをリセットすればいい。
237:デフォルトの名無しさん
07/06/23 01:45:52
なんという頭の良さ
まるで天才ではないか
238:デフォルトの名無しさん
07/06/23 01:50:08
初めからそう言ってるじゃねぇか
239:デフォルトの名無しさん
07/06/23 01:58:32
最初の質問からして初心者過ぎるAPI以前の問題
下手なアプリ作ってPC壊さないようにね
240:229
07/06/23 02:03:56
フック限定ですか?
アッパーとかでは無理でしょうか?
241:デフォルトの名無しさん
07/06/23 02:17:28
ハートブレイクショットならいけるかも
242:デフォルトの名無しさん
07/06/23 02:50:08
瞬獄殺ならおk
243:デフォルトの名無しさん
07/06/23 02:59:57
>>240
フックもできないお前にアッパーは無理だろ
ドライバ書いた事有るのか?
244:デフォルトの名無しさん
07/06/23 12:17:51
ブルースクリーン直行が落ちだろうな。
悪いこと言わないから、スタンバイか休止状態で妥協しとけ。
245:デフォルトの名無しさん
07/06/23 13:19:25
WindowsでおよそのLoad Averageを計算したいのですが、処理待ちのプロセス数はどうやって求められますか?
246:229
07/06/23 14:12:18
KEY_DOWNを使ったのですが
自分のウィンドウがアクティブじゃなかったので
取れませんでした
騙したわね!!
247:デフォルトの名無しさん
07/06/23 14:23:18
自分のウインドウしかとらないように作れば当たり前だろ。
なんでそんなに頭が悪いんだ?
248:デフォルトの名無しさん
07/06/23 14:35:01
だから教えるだけ無駄
親切に教えてやっても騙されたと思うんだぜ
249:デフォルトの名無しさん
07/06/23 14:42:45
マウスカーソルの下にある文字列を取得する方法ってない?
250:デフォルトの名無しさん
07/06/23 14:50:58
ある
251:デフォルトの名無しさん
07/06/23 15:05:14
ないあるよ
252:デフォルトの名無しさん
07/06/23 17:07:40
>>245
パフォーマンスカウンタ。
ThreadオブジェクトのThread Stateカウンタにスレッドの状態が出るから、
自分で全スレッドのインスタンスに対して状態をチェックして集計しる!
253:デフォルトの名無しさん
07/06/23 17:09:12
LISTBOXにADDSTRINGする場合、文字列のデータはWindowsがコピーして管理してくれるんですか?
254:デフォルトの名無しさん
07/06/23 17:19:15
MSDN見ろよ…
255:デフォルトの名無しさん
07/06/23 17:19:44
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ >>253
( \ / _ノ | |
.\ “ /__| |
\ /___ /
256:249
07/06/23 17:26:03
>>250
サンクス
257:デフォルトの名無しさん
07/06/23 17:51:25
>>253
そう
258:デフォルトの名無しさん
07/06/23 18:45:37
HWND既知のあるウィンドウが閉じられるときそのWM_DESTROYを取得するために、
サブクラス化というのを使えば出来そうだという所までは分かりましたが書式が分からないので
このページのサンプル
URLリンク(www.wisdomsoft.jp)
LRESULT CALLBACK WndProc()内 の rect_box = CreateWindow{......}; の部分を
rect_box = FindWindow("Notepad",NULL); //メモ帳のハンドル
と書き換え
LRESULT CALLBACK StaticProc() のswitch内に case WM_DESTROY: と追加しても
メモ帳終了時のWM_DESTROYが取得できていないようです。
どのようにすれば正常に動くのでしょうか?
259:デフォルトの名無しさん
07/06/23 18:57:12
それ別プロセスのは無理よ
260:デフォルトの名無しさん
07/06/23 20:24:50
ファイルにNTFS圧縮かけるAPIってある?
EFS暗号化ならあるのに、こっちがわからん。
261:258
07/06/23 21:08:59
>>259
あのサンプルでは出来ないんですか。
サブクラス化するという手段自体が間違ってますか?
262:デフォルトの名無しさん
07/06/23 21:13:37
間違ってはない
フック使えばサブクラス化でもできる
263:デフォルトの名無しさん
07/06/23 21:17:12
>>260
FSCTL_SET_COMPRESSION しらべれ
264:デフォルトの名無しさん
07/06/24 12:10:05
ねーねー
ほかのプロセスが開いてロックしているファイルを
横から開くにはどうすればいいのん?
265:デフォルトの名無しさん
07/06/24 12:10:58
それ可能なのか?そんなことできるならロックの意味がないような・・
266:デフォルトの名無しさん
07/06/24 12:14:25
プロセスを終了させる
267:デフォルトの名無しさん
07/06/24 12:20:55
リードだけなら出来たりしないのかな?
試しにエディタで開いてみたら
書き込めませんよーってエラー出たけど開くのだけは出来たよ
268:デフォルトの名無しさん
07/06/24 12:26:45
そのプロセスが FILE_SHARE_READ でファイルを開いてたんだろ。
0 だと読み取りも書きこみも禁止される。
269:デフォルトの名無しさん
07/06/24 12:42:07
つかCreateFileの引数の解説読んでれば想像付くけどな
270:デフォルトの名無しさん
07/06/24 13:09:39
それようのモードがあったのか
ありがと^^
271:デフォルトの名無しさん
07/06/24 15:05:41
ちょい質問。
Win2000、XPで Windows+M押下時と違って
Windows+Dを押した時何かのフラグが立ったみたいで
なんとかforeground();関数で
ウィンドウを最前面にもってこれないんだけど
方法わかる方いたら教えてください。。
よろしくです。
272:デフォルトの名無しさん
07/06/24 16:04:38
せっかくしまったのに余計なことをしないでください。
273:デフォルトの名無しさん
07/06/24 18:15:36
ウィンドウズ乙
274:デフォルトの名無しさん
07/06/24 18:23:40
WinXPにおけるメモリマップドファイルについて質問なのですが、
・HDDのファイルがメモリに複写されているわけではなく、あくまで仮想的なアドレスをファイルに割り振っているだけ。
よって、メモリにマッピングした直後はメモリはそれほど消費しない。
・マッピングされたファイルを書き換えた情報は一端メモリに蓄積され、マッピング終了時にHDDのファイルへ反映される。
なので、マッピングされたファイルにデータを書き込めば書き込むほどメモリの使用量が増えていく。
という解釈であっているのでしょうか?
275:デフォルトの名無しさん
07/06/24 19:24:30
読み込むだけでも消費した気がする
276:デフォルトの名無しさん
07/06/24 19:39:01
>>274
基本的にはそんな理解でいいと思う
細かい動作はページングファイルと同じように考えればいいはず
メモリが足りなくなってくればHDDへ書き出される(読み取りしか行っていないなら捨てられる)
メモリが余ってくれば読み込まれてゆく
277:デフォルトの名無しさん
07/06/24 20:46:24
自前のコンソール画面を作りたいのですが、
APIで簡単に作る方法ってありますか?
278:デフォルトの名無しさん
07/06/24 20:49:39
AllocConsoleじゃなくて自前で一から作りたいって事?
279:デフォルトの名無しさん
07/06/24 20:54:58
eclipseのコンソール見たいのが作りたいです
280:デフォルトの名無しさん
07/06/24 20:57:27
エディットコントロールにでも流せばいいじゃない
281:デフォルトの名無しさん
07/06/24 21:09:19
WM_SETTEXTですか?
282:デフォルトの名無しさん
07/06/24 21:32:17
エディットコントロールの追記なら最後尾にカーソル移動してEM_REPLACESELを投げる
背景を変えたければ親でWM_CTLCOLOREDITを受ける
283:デフォルトの名無しさん
07/06/24 21:36:59
printfでエディットコントロールに書き込めるようにはできませんか?
284:デフォルトの名無しさん
07/06/24 21:40:06
stdoutを受け取って回送させるか、バッファに入れてから再度送りつけるか好きなようにやれ。
285:デフォルトの名無しさん
07/06/24 21:42:19
できますがスレ違いですね。
汎用化でも目指しているんですか?
それともコーディング能力不足ですか。
286:デフォルトの名無しさん
07/06/24 22:07:41
printf使いたいってのはコーディングする側の問題だろ
sprintfした文字列をエディットコントロールに追加すればいいじゃん
287:デフォルトの名無しさん
07/06/24 22:15:44
printfの出力先を変えられればコンソール・ウィンドウ両対応が簡単かなと思ったんですが
やっぱりそこまでは無理ですか…
288:デフォルトの名無しさん
07/06/24 22:30:17
だから無理じゃないってば
API以前に言語の勉強をしなさい。
289:デフォルトの名無しさん
07/06/24 22:35:08
その(頭の)現状では無理だな
290:デフォルトの名無しさん
07/06/24 22:49:46
>>288
stdoutをAllocConsole使う時見たく変えるってことですか?
何を指定すればエディットに流せるか分からないのはやっぱ知識不足なのかorz
291:デフォルトの名無しさん
07/06/24 22:56:41
もしかしてEM_STREAMOUTが関係ありですか?
292:デフォルトの名無しさん
07/06/24 23:06:08
Windowsプログラミングなんてバッドノウハウの数が技量に直結するから
「これかっ?」っと思ったことは片っ端から試してみるのも自分のためになると思うぜ
293:デフォルトの名無しさん
07/06/24 23:19:11
と言ってもfreopen以外に変える方法知らないんですけど…
294:デフォルトの名無しさん
07/06/24 23:21:37
メモリマップファイルは使いにくいね。
1つは、
SetProcessWorkingSetSize()で最大ワーキングセットサイズを設定しても、多量にメモリを食って、他のプロセスに優しくない。
かといって、SetProcessWorkingSetSize(,-1,-1)を頻繁に呼ぶのも美しくなく、
かといって、リンカに/WS:AGGRESSIVE付けても、なんだかなぁ、と。
もう1つは、
いまどきのハードディスクはシーケンシャルにアクセスしないと速度が出ないため、
メモリマップして任意にメモリアクセスすると、ランダムアクセスになってしまうこと。
結局、シーケンシャルスキャンのヒント付けて、各ページの先頭を触って、
予めメモリに読みこんでおくという作業が必要になってしまう。
295:デフォルトの名無しさん
07/06/24 23:22:26
>>293
知らなければ調べろよ。
296:デフォルトの名無しさん
07/06/24 23:31:46
今時メモリの消費量とかHDDの消費量を考えるのは不毛な気がする
リークで不安定になるとかだったら分かるが
297:デフォルトの名無しさん
07/06/24 23:35:49
勘違いしてる人がもう一人
298:デフォルトの名無しさん
07/06/24 23:44:15
>>294
とりあえずそのあたりを調べてみます
299:デフォルトの名無しさん
07/06/24 23:51:42
ぐぐっても6件…
MSDN引くか…
俺のチラ裏にしちゃってもいいけどAPI一つでできることならそれだけ教えてくれるとありがたい
300:デフォルトの名無しさん
07/06/24 23:55:11
誰お前
301:デフォルトの名無しさん
07/06/25 00:02:02
SetStdHandleか!
302:デフォルトの名無しさん
07/06/25 00:57:11
>>299
ここは、お前のための、チャット会議室じゃないんだぞ。
303:デフォルトの名無しさん
07/06/25 01:04:56
>>296
> 今時メモリの消費量とかHDDの消費量を考えるのは不毛な気がする
そう思っていた時期も(AA略
パフォーマンスに無頓着なプログラムは、ハードウェアがどんどん速くなっても、その恩恵を受けられないことが多い。
というのも、ハードウェアの速くならない部分の性能に依存してるから。
304:デフォルトの名無しさん
07/06/25 05:57:13
MSDNにVistaのAPIが続々追加されてる
ほとんどVista専用で邪魔だ
言語フィルタみたいにOSでフィルタリングしてくれないかな
305:デフォルトの名無しさん
07/06/25 05:57:59
Vista以前のOSにしがみついてる奴らをフィルタリングすればいいんじゃね?
306:デフォルトの名無しさん
07/06/25 07:15:15
そんな子としたら儲からない
307:デフォルトの名無しさん
07/06/25 08:27:20
SetWindowsHookExでとれるHHOOKをGetWindowsHookExみたいなのでとれないですか。
ThreadIdから自分にかけられているHOOKとか人にかかっているHOOKとかを知りたいです。
308:デフォルトの名無しさん
07/06/25 08:38:26
SetWindowssHookExをAPI-Hookしろ
309:デフォルトの名無しさん
07/06/25 09:17:51
お前ら、フック大好きなんだな。
310:デフォルトの名無しさん
07/06/25 11:00:23
彼女フック出来ないからAPIフックして憂さ晴らしてると思われ。
311:デフォルトの名無しさん
07/06/25 11:50:00
>>310
彼女とするのはファックだろ
312:デフォルトの名無しさん
07/06/25 12:49:05
>>311
鼻フックの間違いじゃね?
313:デフォルトの名無しさん
07/06/25 12:53:51
何この流れ。これが月曜の流れか
314:229
07/06/25 16:40:07
229です。
ちなみに240は僕じゃありませんがそれはさておき。
ご意見参考になりました、ありがとうございます。
グローバルフックでWH_MOUSEとWH_KEYBOARDを定期的にチェックし、
システムタイマを取得して更新するみたいな感じですかね。
OSがスクリーンセーバを起動するのには同様の処理をしてるのかな。
それに使ってる「最終操作時刻」みたいのがどっかから取得できれば、
グローバルフック使わなくて済むんですが。
無いかなあ。。。
315:デフォルトの名無しさん
07/06/25 16:52:10
だから「最終操作時刻」を提供する側になれ
それとは別に、試しにスクリーンセーバー作ってみ
316:229
07/06/25 16:57:01
>>315
なんか勝手に初心者扱いされてますが、システムフックを書こうと思えば書けますよ。
ただ、OSが知ってるはずの「最終操作時刻」をとる方法、
もしくは無操作タイムアウトイベントみたいのを取得する方法が無かろうかと思って
最初に書いたようなプリミティヴな質問をしたわけです。
317:デフォルトの名無しさん
07/06/25 16:57:48
>>314
GetLastInputInfo
318:デフォルトの名無しさん
07/06/25 17:09:48
>>316
初心者ではないのなら、
最初から適切な質問のしかたをしろよ!
319:デフォルトの名無しさん
07/06/25 17:10:28
相変わらずノイズの多いスレだな。
初心者は回答しなくていいんだぞ。
320:デフォルトの名無しさん
07/06/25 17:15:50
ていうかさ、MSDNライブラリ(またはPlatformSDK)のヘルプ見てから質問してるんか?
ちょっと古い版で恐縮だが、
Platform SDKドキュメント
→User Interface Services
→Windows User Interface
→User Input
→Keyboard Input
→Keyboard Input Reference
→Keyboard Input Functions
→GetLastInputInfo
ここまで、迷うところは、ないぞ。
321:デフォルトの名無しさん
07/06/25 17:17:01
途中で俺が229の振りしてなごませたのに
やっぱりこうなったか
まさかアッパーなんて専門用語があるとは思わなかったがw
322:229
07/06/25 17:18:22
>>317
>>320
探してたのはそれです。僕が初心者でしたすいませんでした。
本当にありがとうございます。
323:デフォルトの名無しさん
07/06/25 17:35:02
これにて一件落着めでたしめでたし。
なんか逆転裁判おもいだした
324:デフォルトの名無しさん
07/06/25 17:37:13
アッパーワロタ
325:デフォルトの名無しさん
07/06/25 21:18:16
>>316システムフックなんか書けて当たり前
>>322初心者なんじゃんw
326:デフォルトの名無しさん
07/06/25 22:25:16
鬼の首を取ったかの様に
327:デフォルトの名無しさん
07/06/25 23:34:54
しかしおまえら、
ママンとフックが好きだなw
328:デフォルトの名無しさん
07/06/25 23:39:39
初歩的な質問させてください。
クライアント領域のサイズが640*480のウィンドウを作る場合、
WindowCreate関数の第6、第7引数を
640 + GetSystemMetrics(SM_CXDLGFRAME)*2
480 + GetSystemMetrics(SM_CYDLGFRAME)*2 + GetSystemMetrics(CYCAPTION)
とすればいいんですか?(メニューやステータスバーはないものとする)
というか、GetSystemMetricsの引数に
SM_CXBORDERをいれた場合とSM_CXEDGEを入れた場合とSM_CXDLGFRAMEを入れた場合で
ウィンドウのどの部分のサイズを指しているのかよくわかりません。
MSDNみても違いがわかりません。教えてください・・・
329:デフォルトの名無しさん
07/06/25 23:41:43
そういう用途では、AdjustWindowRectを使え、と昔
どっかで誰かが言ってたのを聞いた希ガス
330:デフォルトの名無しさん
07/06/26 00:19:57
状況によってサイズが異なるので、適正なサイズになるまでリサイズを繰り返すしかない。
一発で計算するのは無理。
331:デフォルトの名無しさん
07/06/26 00:21:43
いや普通にAdjustWindowRect使えよ
332:デフォルトの名無しさん
07/06/26 00:36:14
AdjustWindowRectはメニューが2段になると縦のサイズが
合わなくなるが、縦を調節し直せば無問題。
333:デフォルトの名無しさん
07/06/26 00:37:09
AdjustWindowRectを使っても、メニューバーの折り返しの分までは
面倒を見てくれないとかそういう話かな?
334:328
07/06/26 01:16:09
なるほど、素直にAdjustWindowRect使えばよかったんですね。
無理してGetSystemMetrics関数を使うのはやめます。
ありがとうございました。
335:デフォルトの名無しさん
07/06/26 01:43:07
>>322
調節し直す必要があるかどうか判断できないんとちゃう?
判断するにはメニューに表示される文字列が必要だけどAdjustWindowRectは
MENUの有無をBOOL型で渡すだけでHMENUを渡す設計になってない
336:デフォルトの名無しさん
07/06/26 03:28:12
>>335
AdjustWindowRectで使ったクライアント領域(A)
サイズ調整後にGetClientRectで取得したクライアント領域(B)
A>Bならメニューが複数行って判定できるんじゃね?
思いつきだが
337:307
07/06/26 08:21:21
>>308
回答、ありがとうございます。
SetWindowsHookExとSetWindowsHookにAPIHOOKをかける方法だとすでにフックがかけられている場合、みつけられないです。
338:デフォルトの名無しさん
07/06/26 09:39:02
フックを見つけてどうするの?
339:307
07/06/26 10:42:24
UnHookするとか情報を表示するとか。。。etc。
勉強中です。具体的には、dwThreadId = 0でフックをかけて、仕込んだHookDLLのアタッチで別のDLLを呼んで、
呼んだDLLにフックした処理を渡したりしてるんですが、
UnHookしてもなんでかデタッチが実行されておらず、デスクトップをフリーズみたいな状態にしてしまうんで、
Hookを仕掛けた状態とかを見たいとかいろいろです。
dwThreadIdに特定のスレッドを渡すとデタッチが起こるんで、調べる参考にしたいと。
340:デフォルトの名無しさん
07/06/26 12:24:25
グローバルフック登録時に
SetWindowHookEx完了時から帰り値のHHOOKを共有メモリに格納する一瞬の間に
コンテクストスイッチが発生しHHOOK格納前にフック関数が呼び出されるという可能性に対して
とういった対策が可能でしょうか
現在のPSDKのドキュメントだとCallNextHookExの第一引数は無視される仕様に変わったようなので気にしなくてもいいのでしょうか?
341:デフォルトの名無しさん
07/06/26 14:22:47
ハンドルからリストボックスなのかコンボボックスなのか
判断するには、、どうやるのですか?
342:デフォルトの名無しさん
07/06/26 14:27:38
GetClassName
343:デフォルトの名無しさん
07/06/26 14:46:01
>>340
Mutexで排他制御。
344:デフォルトの名無しさん
07/06/26 14:56:41
>>342
ありがとうございました。
345:デフォルトの名無しさん
07/06/26 16:20:24
>>340>>343
そのタイミングって排他制御する必要があるほどのものなのかね?
346:デフォルトの名無しさん
07/06/26 17:00:22
>>345みたいな馬鹿は迷惑だからプログラムを書くな。
347:デフォルトの名無しさん
07/06/26 17:57:00
>>340
第一引数が無視になってるとは知らなかった・・・
確かに
>>Windows NT/XP/2003: Ignored.
となってる。
ってことはNT系限定なら別に共有領域にハンドル置いといたりしなくてもいいのか?
348:デフォルトの名無しさん
07/06/26 18:08:52
>>345-346
「そんな事態は滅多に起こらないから無視していい」とかいうなら論外だが、実際MSの
ドキュメントやサンプルでもそのような排他制御を組み込んでいないから、「そのタイミ
ングでフック割り込みが発生することはない」という仕様になっているということは?
SetWindowsHookExでWH_CALLWNDPROCをインストールした次の行でSendMessage
してもフックは呼ばれるから、ほんとに一瞬しか待たないとは思うけど。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4319日前に更新/179 KB
担当:undef