1 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 23:23:58 ] スレ立てるまでもない、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質問箱 Build68 pc11.2ch.net/test/read.cgi/tech/1215348804/
262 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:57:36 ] つ【俺の知恵】
263 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:57:54 ] うるちえ
264 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:59:29 ] www.atmarkit.co.jp/fdotnet/dotnettips/211startmail/startmail.html こっちの方法でやればいいじゃんていうか.NETじゃん
265 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:59:46 ] >>261 ShellExecute
266 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:04:39 ] >>261 #include<windows.h> int main(){ ShellExecute(NULL, "open", "www.google.co.jp/search?hl=ja&q=%E3%81%AC%E3%82%8B%E3%81%BD+%E3%82%AC%E3%83%83&btnG=Google+%E6%A4%9C%E7%B4%A2&lr= ", NULL, "", SW_SHOWNORMAL); return 0; }
267 名前:デフォルトの名無しさん [2008/08/09(土) 22:06:16 ] >>264 参考ページが.NETでしたね。 私の言語はPASCALです。 >>265 function ShellExecute(hWnd: HWND; // 親ウィンドウのハンドル Operation : PChar // 操作 FileName : PChar // 操作対象のファイル Parameters: PChar // 操作のパラメータ Directory : PChar; // 作業ディレクトリ ShowCmd : Integer)// 表示状態 : HINST; ここでは操作がopen、ファイルがレジストリから取得したブラウザファイル、どこにそのアドレスを入れるのでしょう?
268 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:06:32 ] >>266 クエリストリングのbtnGとか要らないんじゃね?
269 名前:デフォルトの名無しさん [2008/08/09(土) 22:07:13 ] >>266 っと私が打ち込んでいる間に・・・具体的なコードありがとうございます。 さっそく解決してしまいました。 ありがとうございました。
270 名前:デフォルトの名無しさん [2008/08/10(日) 09:23:59 ] .NET に PictureBox というコントロールがあるのですが これを VC++ で表現するならば コントロール上にビットマップイメージを貼ってるだけに相当するんでしょうか? よろしくお願いします
271 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 10:03:23 ] >>270 Win32だとStatic Controlに相当するな。 IDEのダイアログエディタだと「Picture Control」と表記されているが、 これはダイアログリソース上の表現で、結局はStatic Controlが生成される。
272 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 11:24:30 ] >>271 ありがとうございます Static Control にスタイルが SS_BITMAP って感じですね
273 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:19:38 ] SendMessageTimeoutの引数であるpdwResultと SendMessageTimeout関数自体の戻り値に違いは出るのでしょうか? お願いします。
274 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:21:46 ] 違いは出ます。意味が違いますから。
275 名前:273 mailto:sage [2008/08/10(日) 21:24:47 ] >>274 具体的にどういった違いなのでしょうか? MSDNなどの資料には同じようなことしか書かれてなくて・・・ 参考URLの掲示でもかまわないのでお願いします
276 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:29:03 ] >>275 lpdwResultはSendMessageの戻り値相当じゃないか。 MSDNより lpdwResult 1 個の DWORD 型変数へのポインタを指定します。関数から制御が返ると、この変数に、メッセージの処理結果が格納されます。意味は、送信したメッセージにより異なります。 戻り値 関数が成功すると、0 以外の値が返ります。 関数が失敗した場合や、タイムアウトが発生した場合は、0 が返ります。
277 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:29:13 ] >>275 SendMessageTimeout の hwnd に無効なハンドルを入れた場合など
278 名前:273 mailto:sage [2008/08/10(日) 21:31:23 ] >>.276-277 なるほど納得がいきました ありがとうございます
279 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:32:13 ] >>275 pdwResultは送ったメッセージに対する戻り値。 メッセージを送った先のプロシージャが返した値。 SendMessageTimeoutの戻り値は、SendMessageTimeoutそのものの結果。
280 名前:デフォルトの名無しさん [2008/08/11(月) 11:06:58 ] RegisterClassExで作ったウィンドウクラスが有効かどうかを判定するAPIを教えてください
281 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 11:19:08 ] つ RegisterClass(Ex) の戻り値 つ GetClassInfo(Ex) で取得
282 名前:デフォルトの名無しさん [2008/08/11(月) 13:52:41 ] 直接画面DCには描画せずにバックグランドのDCを介して描画する. 1行または複数行,描画する場合はバックグランドDCに必要な文字を描画してから 画面を無効にしてWM_PAINTでBitBltを使い描画させる. のバックグラウンドDCとは何を指してるのでしょうか? 直接画面DCに描画するのと、バックグラウンドDCを介して描画するのとでは どのような違いがあるのでしょうか?
283 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 13:57:47 ] それを書いた奴に聞けよ
284 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:08:40 ] メモリDC
285 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:34:55 ] >>283 掲示板の過去ログに載っていたので聞きようがありません。 >>284 今から調べてきます
286 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 15:54:00 ] ダブルバッファ とかそういう話か? ちらつき防止でやってるだけ 直接DCに描画だと 消しているトコロ も目に見えちゃうからチラツク
287 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 19:45:18 ] GdiSetBatchLimitを上げればいいんでねーの?
288 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 21:36:18 ] >287 全然違うんじゃね? GDI関数呼び出しをまとめて性能を上げるのと、一連の描きかけの絵を バックバッファに描画しておいて描き終わったら前面をInvalidateRect して(=WM_PAINT発生)からバックバッファから一気に転送(BitBlt) するのでは見え方が違う。 >286 の言ってることが正解。さらに描画を1シーケンスで完了できない場合、 描画中の絵が見えないと言うメリットもある。 性能向上の方式ではないので性能あげたいならInvalidateRectの 範囲を描画更新したい場所に限定する必要があるし、そういうの やりたいならGDIでなくDirectXで物理サーフィス×2面のFlipで やるのが普通。
289 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 22:15:07 ] てか消してるところが見えるって何世代前のPCだよw
290 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 22:17:56 ] 最新のPC
291 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 22:32:57 ] >289 最新のPCであっても、GDI関数で描画する時間は人間の一生のような 長い時間ってことが分からない素人かw 消しているトコロがリアルに人間に分からないように処理するには 液晶とグラボの垂直同期周期が60Hzとして、16.6666...msec 以内に 一連の描画処理を完了する必要があるけど? もちろん一度もVSYNC跨がずに、だ。
292 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:24:41 ] 一連の描画処理が16ms以上かかるってどんだけ重い描画なんだよ
293 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:30:17 ] でも、次の画面更新タイミングまでが偶々1msだったら・・・?
294 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:40:15 ] そんなの気にしなくていいよ、今時GDIなんてせいぜいコントロールの描画ぐらいしか使わないんだから Windows標準のコントロールだって物によってはダブルバッファリングされてなくてちらつくけど誰もそんなの気にしてないし
295 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:42:13 ] >292 かかるでしょ。 ・そのプロセスのプライオリティより高いスレッドやカーネルでの より優先度の高い処理が行われる場合。 ・そのプロセスのプライオリティより低いスレッドが一定周期で ダイナミックブーストされる場合。 ・そのプロセス自身が描画処理中に、HDD等の単一リソースにアクセスした場合。 ・例えば1280x1024x32bit(フルカラー)の描画面(=5MBytes)をグラボに転送するのに、 DMA転送が使えなかった場合。 ・使えたとしても、メモリと他のデバイス間で先にDMA転送の帯域を食いつぶされていた場合。 いくらでもある。292がMS-DOSでシングルタスクのプログラマか、カーネルの設計者と いうなら謝るよ。ここWin32API質問箱なので勘違いしてた。 293は「もちろん一度もVSYNC跨がずに、だ。」を読み取ってくれたね。
296 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:44:45 ] もういいよ > 例えば1280x1024x32bit(フルカラー)の描画面(=5MBytes)をグラボに転送するのに 今時こんな描画にGDIなんて使わない アンタだって暗にそう言ってるじゃん > GDIでなくDirectXで物理サーフィス×2面のFlipでやるのが普通。
297 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:53:08 ] >>295 こういうKYがいるとテスト工程が無駄に増えるよなw
298 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:00:55 ] >>297 そうやってシステム見られない自称SEもいるね。 手戻り工数増えるんだよなw 後になって性能が出ない時に言い訳しないようにね。
299 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:09:35 ] 文章から加齢臭がものすごいんですが・・・
300 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:11:58 ] WPF使えばちらつきなんか無縁
301 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:21:40 ] とっととCからWPF使えるようにしろと
302 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:25:25 ] つ MC++
303 名前:デフォルトの名無しさん [2008/08/12(火) 00:25:46 ] ListViewのレポート形式で、表示領域が足りなくて 省略されて表示されているとき(例えば、あいう...)に、 その文字の上にカーソルを持っていくとツールチップが 表示されますが、これを無効に設定することはできない のでしょうか?
304 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:36:49 ] >>303 出来る。
305 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:46:45 ] LVS_EX_INFOTIP,LVS_EX_LABELTIPあたりじゃない?
306 名前:デフォルトの名無しさん [2008/08/12(火) 01:26:44 ] >>305 だと思うのですが、参考になるプログラムが 見つからなくて...
307 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:27:28 ] フラグの説明読んで書いてみりゃいいだろ なんで自分から動こうとしないんだよ
308 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 01:28:02 ] >>306 普通にググれば見つかるのだが
309 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 10:19:12 ] LVS_EX_LABELTIP Version 5.80. If a partially hidden label in any list view mode lacks ToolTip text, the list-view control will unfold the label. If this style is not set, the list-view control will unfold partly hidden labels only for the large icon mode. 別に複雑な操作がいる訳でもなし このくらい試してみようぜ
310 名前:デフォルトの名無しさん [2008/08/12(火) 10:57:03 ] CS_OWNDCにしたときに増えるメモリってどれくらい? 猫でもをみたらちょっとだけメモリを消費するって書いてあったけど タスクマネージャを見たけどあんまり変わってないっぽいけど
311 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 11:38:05 ] 見たまんまだ 確認したならそれを受け入れろ
312 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 13:35:46 ] 640KBで動く時代からあるAPIdsと説明がそういう風になることもあるw
313 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 13:40:12 ] TextOut関数で背景を部分的に変える関数等ありますでしょうか?
314 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:00:59 ] たかだが背景色だけ変えるなら SetBkMode で OPAQUE 指定 { SetBkColor して TextOut } を変えたい単位で分割呼び出し 複雑な背景をどうこうしたいなら SetBkMode で TRANSPARENT 指定 先に背景を描画しきって TextOut
315 名前:デフォルトの名無しさん [2008/08/12(火) 15:58:29 ] ShowWindowをAdvancedWindowsのやつでAPIフックしたらアドレス違反になるんだけどなんで?? 全プロセスにDLLにして注入ではなく、自プロセスのフックのみでやってる。適当なexeにDLLにして注入してもやっぱり違反。 他のAPIはフックできてる。環境はBCBなんだけど。
316 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 19:08:36 ] WriteProcessMemoryでやれ。権限もクリアしていて、それでできなきゃアドレス間違っている。メモリ覗いて確認しろ。
317 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:00:27 ] >>316 俺VirtualProtectでやってるんだけど WriteProcessMemoryのほうがいいわけ?
318 名前:317 mailto:sage [2008/08/12(火) 20:01:46 ] >>315 その事象で俺が経験した事といえばスタックオーバーフロー
319 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:38:48 ] どうせエラー値確認していないんだろ
320 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:30:16 ] アドレス違反で落ちてたらエラー値も何も無いだろ
321 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:58:43 ] だから何でVirtualProtectのエラーチェックしないの?ゆとり?
322 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 22:01:10 ] 書き込みでAVになるか、書き換えた関数が呼ばれた時例外発生するか質問者ははっきりさせないといかんな。
323 名前:317 mailto:sage [2008/08/12(火) 22:09:50 ] >>321 俺別にエラーチェックしてないとは一言も言ってないんだがwwwww >>320 の言ってる通りアドレス違反で落ちてるんだから・・・・・ 多分だけどやっぱ>>315 はスタックオーバーフローしてるんじゃない? GetProcAddressもあわせてAPIフックしてるならその辺を睨んだ方がよさげ つーかコード掲示するかAdvancedWindowsのページがわからないと これ以上なんともいえない
324 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 22:27:47 ] 呼び出し規約かw
325 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 10:19:47 ] Ollyか何かで追跡してみれば
326 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 11:24:58 ] エディットコントロールの文字列選択の処理ってどうなっているのですか? どうやって選択範囲を計算してるのですか?
327 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 11:37:19 ] GetTextExtentPoint
328 名前:315 mailto:sage [2008/08/13(水) 12:55:18 ] コードも例外発生の場所も書いてなくてスマン。 なのに原因を見抜けるってのはもうすげぇな、感謝!例外は置き換えた関数が呼ばれたときにおきてた。 きちんとstdcallだってのを置き換え関数で宣言したら、うまく動くようになった。 BCBとかdelphiは標準だとcdeclとかfastcallとかだったっけ。 とにかくみんなサンクス!!
329 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 15:10:46 ] >>327 キャレット位置をどうやって計算しているかわかりますか?
330 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 15:26:17 ] 一文字ずつ幅を足していく
331 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 15:34:53 ] WM_LBUTTONDOWN クリック位置x.y座標取得 GetTextExtentPoint32関数で得られた文字列のサイズと比較していく、って事ですか?
332 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 19:09:19 ] GetTextExtentExPointを流用してもいいけど
333 名前:デフォルトの名無しさん [2008/08/13(水) 20:11:50 ] あるアプリのタブコントロールを別のプロセスから変化させたいのですが 別プロセスからTCM_SETCURSELをSendMessageすると、タブの位置は 変化するものの、TCN_SELCHANGEなどの通知メッセージがアプリ側で 発生しないので、肝心の内容が置き換わりません。 仕方なく、別プロセスから続けてWM_NOTIFYを発生させる事を考えたのですが、 別プロセスからでは構造体(NMHDR)を渡すようなメッセージは 伝わらない様です。 別プロセスからうまくタブが変化した事を通知する方法はないでしょうか。 該当コード SendMessage(htab, TCM_SETCURSEL, 3, 0); { NMHDR nmhdr; nmhdr.hwndFrom = htab; nmhdr.idFrom = GetDlgCtrlID(htab); nmhdr.code = TCN_SELCHANGE; SendMessage(hmain, WM_NOTIFY, GetDlgCtrlID(htab), (LPARAM)&nmhdr); }
334 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 20:29:33 ] VirtualAllocEx WriteProcessMemory
335 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 20:41:43 ] sendinputを使おうと思って検索したらこんな2種類の書き方が出てきました。 lpKey->type = INPUT_KEYBOARD; inputKey[cnt].type = INPUT_KEYBOARD; この -> と [ ].type はどう違うんですか?
336 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 20:53:59 ] >>335 C言語スレ池
337 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:30:56 ] ステータスバーの文字の色を変えるにはどうすればよいですか?
338 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:38:25 ] MSDN読め
339 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:56:25 ] >>336 分かりました。
340 名前:デフォルトの名無しさん [2008/08/13(水) 22:14:10 ] >>334 ありがとうございます。 できました。 かなり泥臭いですね・・
341 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 07:25:29 ] BitBltする大きさが少し違っただけで、いきなり速度が変わるんですが、なんか理由があるんですか。 あとディスプレイを2つつないでる環境でも、速度が結構落ちるんですが。
342 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 07:31:47 ] そりゃそうでしょうね
343 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 07:54:37 ] ヒントでもいいから教えて
344 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 08:11:23 ] おっ 典型的ゆとり発言
345 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 09:15:43 ] 知らないならレスしないでください
346 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 09:52:15 ] 自己解決しました ありがとうございました
347 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 11:19:44 ] 間違ってました やっぱり教えてください
348 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 14:55:53 ] 教えてもいいが 気に入らない態度がお前の
349 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:50:41 ] 知らないならレスしないでください
350 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:42:44 ] 自己解決しました ありがとうございました
351 名前:デフォルトの名無しさん mailto:質問age [2008/08/14(木) 18:46:37 ] 標準入力にデータが存在するかを調べるにはどうすれば良いでしょうか。 _kbhitやPeekConsoleInputを試してみたのですが、リダイレクトされた場合に機能しないようです。 CreateFileでOVERLAPPEDが使えるかとも思ったのですが、Consoleでは無視されると説明されていて 実際試してもうまくいきませんでした。
352 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 19:22:58 ] そういうときには実際に読んでみればいいんだよ。
353 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 19:41:47 ] DialogBoxやCreateDialogから行くcallback関数に変数等を渡す場合 はグローバルで宣言しておくしかないですか?
354 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 19:48:42 ] >>353 DialogBoxParam・CreateDialogParamの初期値で適当な構造体のポインタでも渡しとけ
355 名前:デフォルトの名無しさん [2008/08/14(木) 20:00:22 ] >>352 申し訳ありません、情報が足りませんでした。 入力がない間は他のことをしたいのです。
356 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:04:00 ] スレッド分けれ
357 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:05:00 ] >>354 出来ました。ありがとうございます
358 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:20:26 ] >>356 元が*nixなコンソールプログラムの処理中に、 出来るだけ手を加えずにほんのちょっと通信したかっただけなんで スレッド分けとかソケットは遠慮していたのですが、やはりそこまでやらないと駄目ですかね。 シグナルとかあればそれでもいいのですが。
359 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:40:50 ] Win32APIをC++でラッパしたフリーのライブラリ でお勧めのものがありましたら教えて下さい.
360 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:44:41 ] Boost
361 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:53:10 ] msdn.microsoft.com/ja-jp/magazine/cc534994.aspx これとか?
362 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 21:08:18 ] WTLを勧める