Win32API 質問箱 Build10

このエントリーをはてなブックマークに追加
>>943
947と理屈は同じなんだが、大して多くないデータなら WM_COPYDATA が一番。
但しこっちは Send ね。
953(;´Д`):03/05/10 12:03
>>943
WM_SETTEXTという裏技もあるよ
954デフォルトの名無しさん:03/05/10 12:11
>>953
以前、WM_SETTEXTを使ってだめだったけど。
たぶんlParamの指しているポインタが無効だから。
SetWindowText()は使えた。
他プロセスのポインタ分かるんだから、
他プロセスのアドレス読めば良いじゃん。
956デフォルトの名無しさん:03/05/10 12:23
>>955
Win95以降は仮想アドレス空間を使っているから、他のプロセスのポインタ値は意味ないんじゃ?
http://www.bd.wakwak.com/~opapa/VC/System/Process.htm
http://yokohama.cool.ne.jp/yokohama/11147/win/memory.html
>>956
他プロセスのメモリを読み書きするAPIがあるという話だろ
正直使用はすすめられないが
ReadProcessMemoryか。デバッグ権限が要るんだよな、たしか。
959930:03/05/10 14:10
>>936
Postしたら無事にできました
レスありがとうございました
ご忠告にも多謝、ポインタやバッファ渡しには気を付けます
960945:03/05/10 16:08
>>947
>>951
Postで送ったあと渡したアドレスのメモリをいつ開放したらいいか
どうやって知るの
961デフォルトの名無しさん:03/05/10 16:30
リソースエディタで、タブ付きダイアログ作るの面倒だなと思い、
他の人はどうやっているのか調べているうちに、一つ疑問がわきました

例えばVC6の、ツール>カスタマイズで出てくる
ダイアログのタブっぽいものを調べてみると、
タブじゃ無いみたいなんです(クラスがSysTabControl32じゃない)

あれは一体なんなのでしょうか?
>>960
バッファが不要になったら向こうからなんかのメッセージ送ってもらうとか。
>>961
PropertySheet?
964943:03/05/10 19:11
レスありがとうございました。
いろいろと試してみます。(WM_COPYDATAに落ち着きそうですが)
965961:03/05/10 19:27
>>963
まさにこれみたいです。
おかげでコントロールが重なって、訳が分からなくなるような
タブ付きダイアログを作らずにすみそうです。

レスありがとうございました!
966929:03/05/10 22:51
>>950 >>951
実は自分のアプリケーションの中だけで実行したかったのですが、
よく考えてみると、それだとアプリケーションを切り替えるたびに
ランプの状態も切り替えなければならなくなり、かなり不自然に
なってしまうので、他の手段を模索してみようと思います。
レスしてくださった皆様、どうもありがとうございました。
967デフォルトの名無しさん:03/05/11 04:01
ビットマップの透過をしたいんですが、できるAPIありますか。
探してみてそれっぽいのにBitBltがあったのですが、引数がhdcで使い方が分かり
ません。コピー元、コピー先それぞれのlpBMP,BmpInfoを引数にするようなのが
あるとよいのですが。うまく質問できませんが教えてください。
どう透過したいのかわからんので答えようがないが。
hdcが分からないつー時点で、
「とりあえずまともな入門書読め」
としかいいようがない。
969967:03/05/11 06:01
>>968
>どう透過したいのか
ゲームでよくあるやつですが、草マップ16*16、人マップ16*16を予め
作っておいて、2つとも開いてメモリに記憶、草を土台にしてその上に
人の白の部分以外をコピー、てな感じです。1バイトずつ調べて自力で
やってしまう方法はわかるのですが。普通はどうやるんですか?
>hdcが分からない
ハンドル:ポインタみたいなのですよね。詳しい意味はわかっていませんが、
セットで使われるので使い方は知っていたのですが。BitBltの場合2つある
ので、普通は一つなので分からなくなりました。
>>937
普通にIJGかlibpng使えばいいと思うが……APIに拘るなら
出てない範囲だとSetDIBitsToDevice,StretchDIBitsなんかもある
971デフォルトの名無しさん:03/05/11 09:10
>>969
例えば、ファイルをコピーするときは"r"と"w"で2個のFILE*がいるだろ?
それと同様、BitBltするときも受け側と送り側で2個のHDCがいるんだよ
972デフォルトの名無しさん:03/05/11 09:15
>>969
>草と人
漏れならリージョンを使いそう
人を枠なしの子ウインドウにしておいてSetWindowRgn
データはPathToRegionで作るかも
973969:03/05/11 09:55
>>971
HDCってウインドウに対しての物ではないのですか?セットで覚えただけなので、
詳しい意味がわからなくて。
なお探してて見つけたのはこんな感じのですが。下のからヒントを下さい。
http://www.google.co.jp/search?q=cache:1zmYZKUQU-MC:www.ichigo-cafe.com/prog_tips/09_membmp/membmp.html++%22BitBlt%22+-VB&hl=ja&lr=lang_ja&ie=UTF-8
>>972
そういうやり方もあるんですか。始めて聞いたので分からないですが、少し調べて
見ると、関数より機能を限定した感じなんですかね。その描画領域を複数用意して
普通の処理よりやりやすくする。ってほんと始めて聞いたので分からないです。
>>972
リソース食いすぎ。
>>973
デバイスコンテキストってのは確か対象のデバイスが何であってもプログラマが意識しないで使えるように
作った共通のインターフェースのことだったと思うけど・・(うろおぼえ
だからもちろんウインドウも含むし、描画元のビットマップもデバイスコンテキストに関連づける。
SelectObject(hDC, hBitmap);とかやったことはないですか?

で、描画はそのURLの方法でいいんじゃない?
ヒントというかそのままのような気がするが・・
PlaySoundで50MBクラスの*.wavが再生できません。
これは、このAPIのしようでしようか?
977969:03/05/11 11:12
>>975
なるほど。それでわかりました。SelectObjectでHDCとBitMapが引数で、
HDCの方は参照渡しみたいにしてHDCを変化させる。その後ウインドウのHDC
とBitMapのHDCを比べて1段階ずつウインドウに透過描画する。それを繰り
返すんですね。ありがとうございました。
978名無し@沢村:03/05/11 12:51
>>969
MaskBlt()
979969:03/05/11 13:15
>>978
BitBltでもできましたがこれも透過ができそうです。使い方を勉強してみます。ありがとうございました。
次スレ作成時期か?
CreateThread() のタイミングだな
982980 ◆oqSJWu4Ch2 :03/05/11 20:06
そしたら、私が作ってこよう。

こっちは、誰か ExitThread() してくれ。
983980 ◆oqSJWu4Ch2 :03/05/11 20:18
次スレ

Win32API 質問箱 Build11
http://pc2.2ch.net/test/read.cgi/tech/1052651750/
TerminateThread(GetCurrentThread(), 0);
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
CloseHandle は新スレでやるの?
>>984
いきなり強制終了かよ !!
988デフォルトの名無しさん:03/05/11 22:33
すみません、質問させてください。
AプロセスとBプロセスで同期を取るために、
AプロセスがBプロセスをwaitさせたいとします。
その場合、Aプロセス内でWin32APIのSuspendThread関数を用いて、
Bプロセスをwaitさせる例が、
「Advanced Windows(Jeffrey Richter著・MicrosoftPress ASCII」
に記述されていました。
 この例の中ですでに起動されているスレッドのハンドルを取得するため、
OpenThread関数を用いたコーディングを行ってるのですが、
このOpenTread関数はWindows2000からのサポートのため、
WindowsNT4.0には対応していません。
 そこでWindowsNT上で、すでに起動されているプロセスをwaitさせるためには
どのような方法またはAPIが存在するでしょうか。
 ぜひお願いしますm(_ _)m
>>988
プロセスの同期を取るために、他のプロセスから SuspendThread でプロセスを停止させる...、最近はこう言うことができるようになったのか...。
Suspendしてもいいタイミングを伝えるとか、他の手段を併用しない限り、安全に同期できない気が
そういえば、自分のスレッドをSuspendして、他のスレッドからResumeしてもらうのはあり?
ありだけど、そういうスレッドのパターンはあまりみないね。

CreateThread時のパラメータでいきなりサスペンド状態にしておいて、
必要なときにResumeThreadするのはしたことあるけど。

普通ならセマフォかミューテックスで止まる側に明示的に待機させる。

動機オブジェクトの大気のコストが馬鹿にならないような場合
(待機スレッド数が多いときとか)は、Suspendってのもありかな。

パフォーマンスカウンタとか穿り返せばThreadIdからスレッドハンドルが
もらえるかも。

もらえても自プロセスにAttachしてないハンドルは使えないんだけどね。
993デフォルトの名無しさん:03/05/12 22:27
ゴミ箱のパスがほしいのですが、
SHGetSpecialFolderPath( hDlg, szRecycleBinPath, CSIDL_BITBUCKET, 0 );
とやると、空っぽで返ってきます。
どうすればいいのでしょうか?
俺は使うけどなぁ>自分でSuspend
>993
失敗するってヘルプに書かれているが、仮にパスを得たとして何も出来んだろ?
何するつもり?
(・∀・)ニヤニヤ 埋め
            ∧_∧
            ( ´_ゝ`)
       ___∬_(つ____と)___
      /\ 旦          \
     /+ \________ヽ  今だ!コタツの中ゲットォォォォ!!
     〈\ + + +    + + `、   ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     \ \__ノ⌒⌒⌒⌒⌒ヽ______ヽ      ∧∧   )      (´⌒(´
      `、___ノ⌒⌒⌒⌒ヽ_____〉  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
                                  ̄ ̄  (´⌒(´⌒;;
                               ズザーーーーーッ

            ∧_∧
            ( ´_ゝ`)
       ___∬_(つ____と)___
      /\ 旦          \
     /+ \________ヽ
     〈\ + + +    + + `、
     \ \__ノ⌒⌒⌒⌒⌒ヽ______ヽ  (´⌒(´
      `、___ノ⌒`つ⌒≡≡≡≡≡(´⌒;;
             ̄ ̄  ズポッ
            ∧_∧
            ( ´_ゝ`)
       ___∬_(つ____と)___
      /\ 旦          \
     /+ \________ヽ
     〈\ + + +    + + `、
     \ \________________ヽ
      `、_____________〉


      \ぷ  | ∧_∧
        \ぅ | ( ´_ゝ`)
       ___∬__(つ____と)__
      /\ 旦          \
     /+ \________ヽ
     〈\ + + +    + + `、
     \ \________________ヽ
      `、_____________〉
       ;⌒`)  ∧_∧  (´⌒;;
      ;; `).`), ( ´_ゝ`) (´ ("
       ___∬_(つ____と)___(´(´⌒)
      /\ 旦          \
     /+ \________ヽ
     〈\ + + +    + + `、
     \ \________________ヽ
      `、_____________〉


                 ∧             ∧
                  / ヽ            ./ .ヽ
               /   `、______/   ヽ           (⌒;:)
              /'"                  "'ヽ.
              /"                     "ヽ,('';:⌒⌒ヽ丶,..
            i   ○     | ̄ ̄|  ○        へ        ;;:: j   (⌒::;
            |         |  ...::|     。   ;:::/  ::::: : ::⌒ ̄""⌒ヾ
             !.       丿 ::::::::| _ _。  ::::::::: /::: ; ": ̄       ::)
             ヽ       l  :::::::┴┐   ,,..:;::::::::::/:'(: : : ;;:;:      ⌒ ⌒)
              \     しw / .......::::::;;:;::::::/;:/:::::::::ノ;;::::::; :  .....   .....  ::::ノ
                ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄' ̄"" ̄" "  ̄ ̄ ̄"'""  ̄ ̄ ̄" '''' ̄'' ̄
           ∧⊂ヽ
           (゚Д゚)ノ
   ____/ |⊃ |\____
   \ 叩 / ̄ |   | ̄\ 氏 /
     \/    ⊂ ノ〜  \/
     /\ ((⊂∪⊃)) /\
   / 逝 \____/ 煽 \
     ̄ ̄ ̄ ̄\. 騙 ./ ̄ ̄ ̄ ̄
              \/

   1000ゲット生贄で召還!
    ゴゴゴゴゴゴゴゴゴ・・・・・・・・
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。