1 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:51:24 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-10 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build64 pc11.2ch.net/test/read.cgi/tech/1207099291/
175 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:52:39 ] 試してるだけじゃないのか
176 名前:153 mailto:sage [2008/04/24(木) 21:58:44 ] >>173 わかりました >>174 CreateProcessしたプログラムで処理してる時に 別のプログラムの処理も必要になった時のために メインのプログラムから起動するようにしました どうせやるなら終了もメインのプログラムからした方が 使いやすい(手間がかからない)と思ったからです
177 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:08:04 ] >>153 FindWindowの第一引数はクラス名だぼけ
178 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:10:04 ] HWND FindWindow( LPCTSTR lpClassName, // クラス名 LPCTSTR lpWindowName // ウィンドウ名 ); ここまで誰も気付かなかったな すげぇw
179 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:12:44 ] LPCTSTR型のクラス?
180 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:13:19 ] ごめん なんでもない
181 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:13:54 ] ウィンドウクラスというのはだな・・・(ry
182 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:14:10 ] >>176 > どうせやるなら終了もメインのプログラムからした方が > 使いやすい(手間がかからない)と思ったからです なるほど。 その子プロセスは、どういったものなの? また、 その子プロセスの正規の終了条件もしくは終了手順は、 どういったものなの?
183 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:18:49 ] なんという盲点
184 名前:153 mailto:sage [2008/04/24(木) 22:22:46 ] >>182 1、ある時刻になったらBEEP鳴らして終了 2、文字列をある規則で別の文字列へ変換して待機(別ファイルを読み込む可能性があるため) 3、文字列から特定の文字を削除(同上) etc 2と3はexit入力で終了です
185 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:49:39 ] >>184 えーと、対話的に入力を受付けてるわけね。 で、exitとタイプしてリターンキーを押すと終了、と。 ならば、 WaitForInputIdle() で入力待ち状態になるまで待ち、 コンソールに"exit\n"を送るのが、 正規の終了手段だと思う。
186 名前:153 mailto:sage [2008/04/24(木) 23:18:25 ] >>185 sampleがSleep中でもWaitForInputIdle()の次の行へ進んでしまいました >プロセスがコンソールアプリケーションである場合〜中略〜WaitForInputIdle 関数は即座に制御を返します。 とmsdnに書いてありました
187 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:25:47 ] あーごめん、じゃぁ、ちょっと面倒だな。 そのsampleも自分で作っていて変更可能なら、 入力待ちするところで、イベントオブジェクトの状態をチェックして、シグナル状態なら終了するようにして、 親プロセスが子プロセスに終了してほしいときに、イベントをシグナル状態にしたらどうよ。
188 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 00:08:10 ] WaitForInputIdleって対象プロセスが最初にGetMessageを呼ぶまで待機するとかそんな感じだったような >>186 STARTUPINFO::hStdInput/hStdOutputあたりにMailslotのハンドルを渡せばできた気がする
189 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:48:31 ] 質問です う
190 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:49:53 ] なんすかwwwwwwwwww
191 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:39:07 ] FileMonで"FASTIO_QUERY_OPEN"ってなるやつって、具体的にはどうやってファイルオープンしてるんでしょうか NtCreateProcess()とNtOpenProcess()とNtCreateSection()の3つに フックをかけて監視してるんだけどどれにも引っかからない
192 名前:デフォルトの名無しさん [2008/04/25(金) 12:06:41 ] またネイティブAPIか
193 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 12:31:15 ] xmlとかYAMLとかをhttpで送受信するのに便利な通信モジュールないかな。 WININETとMFCは試したけど、通信の待ち時間とかを有効に使おうとするととても書きづらい。
194 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 13:05:12 ] 本当に必要なのは通信の待ち時間とかを有効に使うための知識か
195 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 14:00:56 ] 通信の待ち時間を使って本を読んでます!
196 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 14:52:13 ] ワロタ COMでもいいのかな
197 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 14:57:53 ] >>172 検索して見つかったコードを自分なりに書き換えるのもまたイイ
198 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 15:43:03 ] boost::asio
199 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 20:14:40 ] マルチスレッド化して、その内のあるスレッドで同期系のものによって通信するのも1つの手ではある。
200 名前:デフォルトの名無しさん [2008/04/25(金) 21:05:53 ] TCP通信ってさ、勝手に同期とって転送してくれるんじゃないの? 俺、TCPで同期とか考えたことないんだけど。。考えが間違ってたらご指摘plz
201 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:16:26 ] じっと待ってられないせっかちさんと、途中でキャンセルしたくなる優柔不断さんのため
202 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:26:36 ] WinInetには非同期モードあるぞ、一応。
203 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:33:35 ] DLLでエクスポートされたデータ変数について、 ちょっとお聞きしたいことがあります。 例えば、変数をエクスポートする際 __declspec(dllexport) int *dll_val; と宣言すれば、メイン側からこの変数は __declspec(dllimport) int **_imp__dll_val = &dll_val; と同じように扱われると、最近msdnで知りました。 なので、メイン側からのこの変数への参照が、アセンブラレベルでは DWORD PTR [_imp__dll_val] のようになると予想していました。 VC2005のデバッグモードでは、確かにそうなっていました。 しかし、リリースモードでは、なぜかそうなっていませんでした。 これに対応する個所が offset _imp__dll_val のように書き換えられていたのです。 これを行うためには、_imp__dll_valのアドレスが事前に決まってなければならないと思うのですが、 ベースアドレスが固定のwindows dllで、このようなことは可能なのでしょうか?
204 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:51:41 ] リロケート情報あるんじゃないのかな
205 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:01:45 ] ベースアドレス固定ってntdllとkernel32ぐらいじゃね?(Vistaは知らん)
206 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:46:14 ] >>191 おそらくは各ドライバ(ntfs.sysとかかな)のFastI/Oディスパッチルーチンの呼び出し _FAST_IO_DISPATCH構造体でぐぐれば情報はでる あくまで推測だけど
207 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:10:38 ] >>204 dllでリロケートする場合って、必要な全アドレスを書き換えますよね。 この場合、間接ポインタではなく'offset _imp__dll_val'で変数を使うことは可能なのでしょうか? >>205 すいません。ベースアドレス固定ではなく、 「dllごとにベースアドレス固定」が正しい表現でした。
208 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:26:48 ] ねぇ、もうWinFXみたいなのって作らないの?
209 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:29:19 ] WinFXって.NET3.0だろ
210 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:34:25 ] 既に完成したものをまた作ってどうすんだろうね
211 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 00:06:16 ] >>200 それ同期違う。 ここでの同期は、転送が完了してから制御を返すこと。 逆に、転送が完了するのを確認せずに制御を返す関数が非同期。
212 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:12:23 ] 入力されたパスのフォルダに入っているファイルを リストコントロールに表示させているのですが、 この時のパスを格納するための配列は256バイトあれば大丈夫ですか?
213 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:13:54 ] せめてMAX_PATH。
214 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:16:08 ] 成る程260バイトですか、ありがとうございます。
215 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:23:25 ] >>214 そのレスだと平気で p = (LPTSTR)malloc(260); とか書きそうな雰囲気だな まあ俺には関係ないからどうでもいいが
216 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 07:40:27 ] >>215 そのように書く事によって何か問題が起こるとは予想がつかないのですが、 相応しくない書き方、という事ですね、 すみませんが、理由を知りたいです。
217 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 07:58:57 ] 261あったらどうするの?
218 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 08:30:11 ] 必要なだけ確保する それが動的メモリ 逆に無駄な分は確保しない
219 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 08:35:13 ] ちょっとまて、お前ら答えを教えてやれよw まあ、自分で探すのも大切ではあるが。
220 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 09:13:07 ] 知らないならレスしないでください
221 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 09:52:51 ] >>216 ヒント #ifdef _UNICODE typedef wchat_t * LPTSTR; #else typedef char * LPTSTR; #endif
222 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:14:36 ] >>212 んな事ぁ手前で好きに決めるもんだ。
223 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:35:43 ] MAX_PATH * sizeof(TCHAR)
224 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:10:27 ] 知ってるならレスしないでください
225 名前:デフォルトの名無しさん [2008/04/26(土) 11:15:52 ] ↑話を理解してない馬鹿
226 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:17:17 ] ↑自演馬鹿
227 名前:デフォルトの名無しさん [2008/04/26(土) 11:20:41 ] ↑正解
228 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:39:27 ] _、_ ヽ( ,_ノ`)ノ チッ、乗り遅れたか・・・ へノ / ┌→ ω へ │ │ │
229 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:15:23 ] まだ誰も言っていないが、260じゃなくてMAX_PATHって定数使えよ。
230 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:24:36 ] >>229 >>223
231 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:36:15 ] MAX_PATHはかなり前に出てる 質問者が勝手に260に変換しただけ
232 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:06:42 ] この中に、「MAX_PATH を超えるパス名など存在しない」と思ってる人が!
233 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:11:35 ] そんなのexplorerだっていい加減だから気にしなくていい
234 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:15:23 ] www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D+%E6%9C%80%E5%A4%A7 嘘書いてるのも多いしなあ(FAT32の話をしてるのかも知れんが)
235 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:20:11 ] ↑話を理解してない馬鹿
236 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:26:07 ] double型の数値を表示するのに、 double dbl=1.23; char res[32]; wsprintf(res,"%f",dbl) SetWindowText(hWnd, res); とするとfと表示されるだけです。 どこがおかしいでしょうか?
237 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:47:49 ] >>236 L"%f"
238 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:49:19 ] wsprintfは実数使えないよ
239 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 15:05:48 ] せめてMSDNでAPIの説明を読んでから質問しろよ
240 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 15:06:22 ] StringCchPrintf
241 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 19:45:36 ] >>237-240 超亀ですが、ありがとうございました。 もっとちゃんと勉強しなおします。。
242 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 23:13:13 ] >>191 ttp://web.archive.org/web/20030625222552/www.osr.com/ntinsider/1996/fastio.htm
243 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:14:39 ] wsprintf の 'w' って "Windows" のことだよね? lstrcpy の 'l' はさっぱり分からん
244 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:19:29 ] 同じように95時代のソースみてると _lopen とかつかってて _l ってなによって思う
245 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:38:55 ] LPSTRと同じようにlong pointerじゃないの?
246 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:39:42 ] 指定の他のソフトにきているメッセージを調べる方法ってありませんか?
247 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:48:22 ] グローバルフック
248 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:58:24 ] lsprintfでも良かったのにwsprintfなのが謎 kernel32.dllじゃなくてuser32.dllにあるのも謎 しかもWin9x系だと実体はkernel32.dll内にあってuser32!w(v)sprintfは実体にjmpしてるだけだし
249 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 03:00:35 ] swprintf と wsprintf があるからややこしいんだよな。 しかもそれでいて wsprintf は %f がないという大きな仕様の差があるし。
250 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 03:07:23 ] CRT: sprintf, swprintf Win32: wsprintf CRT: vsprintf, vswprintf Win32: wvsprintf CRT: _snprintf, _snwprintf Win32: wnsprintf CRT: _vsnprintf, _vsnwprintf Win32: wvnsprintf >>249 それだけじゃないぞ。 wsnprintf じゃなくて wnsprintf とか、もうアホかと。
251 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 04:42:39 ] >>250 こういうの、1〜2回/年くらいしか趣味でWinアプリをつくらない ハード屋のおいらにはつらい
252 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 05:07:35 ] シーケンシャルで読み捨てるんだったら メモリマップトファイル使っても効率落ちるだけですかね?
253 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 06:03:19 ] 読み捨てるのに明示的にマップする必要なんてあんのか
254 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 08:03:24 ] ReadDirectoryChangesW() を同期モードでワーカースレッドで使用した場合に, メインスレッドから制御を変えさせる(中断させる)方法ってありますか?
255 名前:デフォルトの名無しさん [2008/04/27(日) 11:04:31 ] multimedia timerとhigh-resolution timerの使い分けはどのようにすればいいのでしょうか?
256 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:09:24 ] 気分しだい
257 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:17:27 ] 同期用のディレクトリハンドルを閉じてみるとか
258 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:38:51 ] >>252 数MBくらいのファイルだが、 シーケンシャルな読み取りしかしないときにメモリマップしたら、 バッファリングありで普通に読み取るよりは速かった覚えがある。
259 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:41:45 ] バッファリングぐらい自前でしろよ
260 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:43:18 ] >>257 今やってみたけど制御帰らなかった…(´・ω・`)
261 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:36:16 ] 1.clやgccでコンパイル・リンクして出来上がった*.exeファイルは、 CPU(ペンティアム等)が直接理解できる形式のファイルなのでしょうか? 2.上記の答えが「直接理解できないファイル」の場合。 CPUが直接理解できるファイルを、clやgccで作成することは出来ますか? 質問の意図。 出来るだけ速く動作させたいとか直接的な理由はありません、 知識として知っておきたいのが質問の意図です。
262 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:37:42 ] ほぼ直接理解できる形式になっている。 ほぼってのは、プログラムをメモリ上にロードする際に OS が少し手を加えるから。
263 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:44:42 ] そもそもCPUは命令をデコードしてから実行してるからCPUが直接理解できるなんて有り得ない訳だが
264 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:51:20 ] デコーダも CPU 内にあるし
265 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:57:23 ] いや、IntelやAMDが配ってる命令リストに記述されてるもんであれば 直接解釈しているとみなして良いと思うが
266 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:15:32 ] >>261 exeやdllは必ずしもCPUネイティブなマシン語とは限らんぞ。 /clrでコンパイルしたらMSILになるからな。
267 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:17:04 ] そうか cl だとそれがあったか
268 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:11:29 ] マイクロプログラムってソフトウェアなのかハードウェアなのかよくわからんよな。
269 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 02:47:55 ] Win32APIで.NETのexeからリソースを取り出すのってどうすればいいの? FindResourceじゃ取れないし
270 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 03:06:49 ] アンマネージホスト用のインタフェース・関数がmscoree.dllとかから出ているから、 それを使ってやればいいんじゃないかな? CLRを読み込んで、アセンブリ (EXE)を読み込んだら、 あとはCOMインタフェースで.NET Frameworkクラスライブラリを使う。 実際できるかどうかわからないけど、100%ネイティブでやれるとしたらこんな感じのはず。
271 名前:デフォルトの名無しさん [2008/04/28(月) 04:50:39 ] >>270 それネイティブじゃないだろw
272 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:36:29 ] GetGlyphOutline で TrueType font の情報を取ってきているんですが、 OUTLINETEXTMETRIC 構造体の otmsCapEmHeight って何の値が入っているか 知っている方いらっしゃいますか。 MSのヘルプ系には Not supported.ってしか書いてないんですよね そのわりにはしっかり値入ってるし、どうもほしい値っぽいし・・・
273 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:46:02 ] Caption Embed Height キャプションに配置した時の高さ 勘で言った。気にしないでくれ
274 名前:デフォルトの名無しさん [2008/04/28(月) 15:46:22 ] 32bitOS上で、32bitアプリは特別なことしないとユーザー2GB、 カーネル2GBですよね。 64bitOS上だと、この2GB&2GBは変わらないのでしょうか? ちとスレ違いかも知れんけどWin32アプリの仕様に関してなので、 ここで質問してみました。 ググっても資料見つかんなかったです。検索下手ですね。すみません
275 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:03:00 ] >>274 これがそれっぽい? msdn2.microsoft.com/en-us/library/aa384219 (VS.85).aspx >On the x64 processor, each 32-bit application receives 4 GB virtual address space in the WOW64 environment, >if the application has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in the image header. >If this flag is not set, the 32-bit application receives 2 GB virtual address space.