■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API 質問箱 Build5
1 名前:デフォルトの名無しさん :02/08/06 05:46
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html

2 名前:デフォルトの名無しさん :02/08/06 05:50
早朝からお疲れ様です

3 名前:デフォルトの名無しさん :02/08/06 08:48
>>1


4 名前:デフォルトの名無しさん :02/08/06 10:17
隠しAPI 272個公開じゃー。

MS、和解案準拠で各種の通信プロトコルとAPI公開へ
http://www.zdnet.co.jp/news/0208/06/nebt_01.html

米マイクロソフト、ウィンドウズのコードを一部公開へ
http://www.cnn.co.jp/business/K2002080600088.html

5 名前:デフォルトの名無しさん :02/08/06 10:40
前スレの>>988
> やるなら、
> if (CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1) != '\\')
>   lstrcat(lpszPath, TEXT("\\"));
> とかだろ。
これは
if(lstrcmp(CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1), TEXT("\\")))
  lstrcat(lpszPath, TEXT("\\"));
ってことかな?
これも「も\\」になるのだけど。

6 名前:デフォルトの名無しさん :02/08/06 10:53
>>4
チョット(・∀・)ワクワク!!

7 名前:デフォルトの名無しさん :02/08/06 11:03
秘密のAPI!?
そんなのがあったのかー。MSならやりそうなこった。
だんだんWindowsで作るのが馬鹿らしくなるな・・・

8 名前:977 :02/08/06 11:06
> これは
> if(lstrcmp(CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1), TEXT("\\")))
>   lstrcat(lpszPath, TEXT("\\"));
> ってことかな?
if( *CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)) != TEXT('\\') )
  lstrcat(lpszPath, TEXT("\\"));
ってことではなかろうか。

9 名前:デフォルトの名無しさん :02/08/06 11:31
lstrlen使うなら、頭からCharNext適用していったほうがよくねーか?

10 名前:デフォルトの名無しさん :02/08/06 11:38
ここ読むまで API = システムコールだと思ってたから、
ただのライブラリだと知って愕然とした記憶が有るよ。
ファイル列挙するのに FindFileFirst&Next 使えって一体。
Open&ReadDirectory みたいな関数でさっくりと
ディレクトリハンドル開かせろ、読ませろ、とか思ってしまう。


11 名前:デフォルトの名無しさん :02/08/06 11:45
前スレつまんない埋め立て方だな・・・

12 名前:デフォルトの名無しさん :02/08/06 12:01
前スレの >>992
仮に OleLoadPicturePath() 関数を使って画像を展開したとしても
少なくとも GIF に関しては特許料を支払う必要がある(とユニシス社は主張している)
JPEG に付いては知らん

13 名前:デフォルトの名無しさん :02/08/06 12:13
>>10
スレ違いになるけど #include <dirent.h> でどうよ

14 名前:JPEG特許問題 :02/08/06 12:24
>>12

たしかに「GIF恐いからGIFだけ排除した」とか書いてる人見ますね。

でも、OleLoadPicturePathが勝手にGIF読んでるだけだから
折れは知らんと言うのはダメなのかな?

折れはJPEGを読みたいだけだ。文句はMSにすれ。なんて。
−−>訴えられたら負けデスか?

15 名前:デフォルトの名無しさん :02/08/06 12:55
>>14
少なくともMSも味方はしてくれんと思うけど。
http://www.microsoft.com/DEVONLY/Unisys.htm
> Although Microsoft is licensed under these patents, Microsoft's
> license does not extend to software developers or third parties
> who use Microsoft toolkit, language, development or operating
> system products to provide GIF read/write ...

# 誰か裁判に持ち込んではっきりした判例を作ってくれないかなぁ。

16 名前:デフォルトの名無しさん :02/08/06 13:30
>>14
これをコピーしてるのはコピー機なんだから著作権料はゼロックス社に請求しろ
と言ってるようなもんだ

少なくともユニシス社的には

17 名前:JPEG特許問題 :02/08/06 14:14
>>15
英語じゃよく分かりませんが、確かにMSは味方してくれそうにないですね。w
MS独自開発の画像フォーマットでも作ってもらいましょうか。
WMFは却下。

>>16

いやいや、折れはゼロックスのコピー機を売ってる立場であり、
客が紙幣をコピーしようがこっちの知ったこっちゃ無いって立場の
つもりです。

折れ自身は、JPEGの表示がしたいだけなのだから、マニュアルにJPEG以外は
表示させないで下さいとでも書いておけば、完璧だと思ふ。

いろんな意見モトム。
ちょっと板ずれかも。

18 名前:デフォルトの名無しさん :02/08/06 14:35
コンソールアプリをShellExecuteExで起動させているの。
そやつを終わらせたい場合ってTerminateProcessしかない?

19 名前:デフォルトの名無しさん :02/08/06 14:52
「アプリケーションの追加と削除」の「現在インストールされているプログラム」のリストをWindows2000+VC6で、
APIで取得するにはどうしたらいいでしょうか?名前やインストールフォルダ、日付などを取得したいのですが。。。

MSDNを眺めてみて、あてずっぽうでMsiEnumProducts→MsiGetProductInfoとやってみたら、
何故か一部のリストしか取得できませんでした。なんでこんな中途半端な結果が???

20 名前:デフォルトの名無しさん :02/08/06 14:56
>>17 マニュアルにJPEG以外は表示させないで下さいとでも書いておけば

GIFの場合はユニシスが「その手はダメだよ」と言っていたような覚えがあるけど
ソースが出てこない・・・誰か覚えている人ソースキボンヌ。勘違いだったらゴメンネ

21 名前:デフォルトの名無しさん :02/08/06 16:17
http://www.forest.impress.co.jp/article/2000/03/16/lzw_license.html
>IEコンポーネント利用のソフトは“消尽理論”で対象外
これかかげとけば十分なんじゃないの?

22 名前:デフォルトの名無しさん :02/08/06 16:29
>>8
それで「も」も「表」も上手くいきました。
これで大丈夫・・・ですよね?他に落とし穴は無いかなぁ・・

23 名前:JPEG特許問題 :02/08/06 16:31
>>21

これ見る限りでは全然問題無さそうですね。

たしかに、OleLoadPicture関連はMSが特許料を払っているはず
とは思ってましたが、”消尽理論”てのは知りませんでした。

皆さんありがとうございました。

24 名前:デフォルトの名無しさん :02/08/06 16:53
>>21のリンク先より引用
IEコンポーネント自身の正規の機能であり、こうした動作も了解した上でMicrosoft
とUnisysはライセンスを結んでいるはず。もし制限があるのならば、Microsoft側が
きちんと明示しておくべきで、それがないのであれば問題ないと解釈すべき。

逆にいえばMicrosoftが明示している場合は制限されてもしょうがない、
ということだが、KBのQ193543では、

However, this license does not extend to third-party developers using
Microsoft development products to develop applications. Third-party
developers must have a license from Unisys in the form of a written
agreement.

と明示している。

25 名前:JPEG特許問題 :02/08/06 17:19
な。逆に、特許料を払わねばならぬと明示されているのか・・?

26 名前:デフォルトの名無しさん :02/08/06 17:25
>>17
だからユニシス社的にはって言ってるじゃん
いくら「コピー機を売ってる立場であり〜」などと主張しようが
ユニシス社的には特許権使用者に当たるから無意味
>>23
消尽理論の記事は「そういう理論が世の中に存在する」だけであって
だから特許料を払わなくても訴えられないということにはならんだろ
ユニシス社のある米国でなく日本の、弁護士でなく一弁理士の発言を
支持するのは一向に構わんが相応のリスクを負うことにはなる

>>22
素直に GetFullPathName() 使った方が良いんじゃない?

27 名前:デフォルトの名無しさん :02/08/06 18:18
GIFが問題だったら、
数バイトだけチェックしてGIFだったら無視すれば。

28 名前:JPEG特許問題 :02/08/06 18:23
>>26殿
ラジャ サンクス

うーん。GIFって拡張子だけ排除しよ。
それ以上の努力が必要?
なら鬱。

JPEG特許問題でもっと鬱。

もはや板ずれ。スマソ 無意味じゃないけど。


29 名前:デフォルトの名無しさん :02/08/06 19:29
>>19
それはインストーラに MSIを使ってるやつだけでしょう。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の各キーの "DisplayName"と "UninstallString" を見てなんとかする
しかないんじゃないの?

30 名前:デフォルトの名無しさん :02/08/06 19:42
>>18
コンソールが接続されてないとGenerateConsoleCtrlEventは
使えないんだっけ?

31 名前:デフォルトの名無しさん :02/08/06 21:31
>>26
GetFullPathName()をどのように使うのですか?
これってカレントディレクトリをくっつけるんですよね?

32 名前:デフォルトの名無しさん :02/08/06 21:34
著作権総合スレ立てておきましょうか?

33 名前:. :02/08/06 21:45
>ファイル列挙するのに FindFileFirst&Next 使えって一体。

(;´Д`) ハゲシクドウイ。

34 名前:デフォルトの名無しさん :02/08/06 21:48
>>29
サンクス。その方法で逝っときます。

35 名前:デフォルトの名無しさん :02/08/06 21:52
>>32
それぞれスレが立っているから、使い終わってからにしてほしいけども。

ユニシス社のGIF問題についてマターリ語るスレ
http://pc3.2ch.net/test/read.cgi/tech/1012141575/
JPEG特許問題
http://pc3.2ch.net/test/read.cgi/tech/1027428839/

36 名前:デフォルトの名無しさん :02/08/07 06:40
ゲームで画面全体をゲーム画面にできるものがありますが、
あれはどうやれば実現できるのでしょうか?
ChangeDisplaySettingsで画面の解像度を変更することはできたのですが、
クライアント領域が画面を覆うようにはなりませんでした。
MoveWindowを使っているのかとも思いましたが、それだとマウスカーソルを
画面上部に持っていってもメニューが表示されません。
どなたか教えてください。

37 名前:JPEG特許問題 :02/08/07 09:00
GIFの判定にファイル拡張子を使用するのは糞だと思ったんで、
面倒でもヘッダを見て判定しようと思ったんですが、ファイルの先頭に
"GIF"って書いてたらGIFファイルだと判定しても可ですか?
"GIF"って書かれたテキストにも引っかかりますが、そんな鬱な
テキストも滅却。


38 名前:デフォルトの名無しさん :02/08/07 10:41
>>36
ChangeDisplaySettingsで一時的に画面の解像度を変えるのはご法度。
どんな解像度でも動くようにするか素直にDirectX使え。


39 名前:デフォルトの名無しさん :02/08/07 11:08
一時的に変えるのがご法度ならCDS_FULLSCREENとか
CDS_UPDATEREGISTRYとかわざわざフラグとして存在しないと思うのですが。
嘘ではないけど何か重要な説明をはしょったりしていませんか?

40 名前:デフォルトの名無しさん :02/08/07 11:09
>>36
枠線なしにしてウインドウのサイズを画面と同じにして
一番上に表示
ではいけないの?

41 名前:デフォルトの名無しさん :02/08/07 11:09
>>37
すべてデコードしてみて成功したらGIFファイルであるとみなす。
100%誤判定はないが判定した時点ですでに特許に抵触してるという罠

42 名前:デフォルトの名無しさん :02/08/07 11:35
>>40
ウィンドウスタイルをWS_POPUPにして、
クライアント領域が画面全体を覆うように、ウィンドウの位置・サイズを
変更してみたのですが、そうするとメニューが使用できませんでした。
(メニューは画面外に位置)

ゲームではよく、普段メニューは表示されていなくても、
マウスカーソルを画面上部に持っていくと、メニューが現れますよね?
ああいう風にしてみたいと思ったのですが。

43 名前:デフォルトの名無しさん :02/08/07 11:39
そのメニューってWindows標準のメニュー?

44 名前:デフォルトの名無しさん :02/08/07 11:39
>>42
そりゃそのままじゃ使えないでしょ。
WM_MOUSEMOVEを捕まえて、ウインドウ上部(つまりこの場合は画面上部)
にきたらメニュー表示するようにすればいいのでは?

45 名前:40=44 :02/08/07 11:45
補足
ウインドウごと動かすと、ウインドウの中身も動いちゃうので、
メインウインドウはメニューなしにして、
メニューだけのウインドウを別に持つのがいいかも。

46 名前:デフォルトの名無しさん :02/08/07 12:16
それって、非圧縮GIFが使えなくならね?

47 名前:デフォルトの名無しさん :02/08/07 13:15
>>45
なるほど。ありがとうございます。
その方法で試してみます。

48 名前:デフォルトの名無しさん :02/08/07 14:54
>>39
嘘だと思うなら、やってみれば。

確かに解像度は変えられるが、戻ったときに「うげ」となるから。

49 名前:デフォルトの名無しさん :02/08/07 15:20
フルスクリーンな話
http://home7.highway.ne.jp/nomura_y/prog000.htm

50 名前:デフォルトの名無しさん :02/08/07 16:22
Win2k系ではChangeDisplaySettingsを使うと、
各ウィンドウの位置・サイズがおかしくなるみたいですね。
ちなみにうちの98SEの場合は問題ありません。

51 名前:デフォルトの名無しさん :02/08/07 21:31
>>48
だからCDS_FULLSCREENがあるんだろ
環境次第だというならうちのWin2kではDirectX使っても
ウィンドウが勝手に移動しますが何か?

52 名前:デフォルトの名無しさん :02/08/07 22:34
>>51
> うちのWin2kではDirectX使ってもウィンドウが勝手に移動しますが
後始末はしっかりやってる? 俺の環境でも、後始末のタイミング次第で
ウィンドウサイズが復元されない場合があった。

53 名前:デフォルトの名無しさん :02/08/08 10:39
3D迷路のスクリーンセーバーってどうやって解像度切り替えてるの?
Dependency Walkerで見る限りでは明らかにChangeDisplaySettings
使ってるのにWin2kでもウィンドウサイズおかしくなったりしないんだけど

54 名前:デフォルトの名無しさん :02/08/08 11:40
どうしても自前のソート関数で並び替えをしたくて、
オーナー描画のコンボボックス(ドロップダウン)を作ったのですが、
リストから選択すると、テキストボックスに変な文字列が表示されます。
恐らくコンボボックスがテキストだと思ってアイテムデータのアドレスを
テキストボックスに渡しているのだと思うのですが、
CBS_HASSTRING をつけると WM_COMPAREITEM 飛んでこないし、
何かいい方法はないでしょうか?
というかそもそも作り方間違ってます?

55 名前:デフォルトの名無しさん :02/08/08 11:46
内部でソートして、全部挿入しなおしたらええんとちゃう?

56 名前:54 :02/08/08 13:14
>>55
うーん、できればリアルタイムにソートしたいんですよね。
表示のたびに挿入し直しは無駄が多いような気がするので。
でも何となく雰囲気的に無理っぽい感じですね。

とりあえずソートしつつ挿入という方式でやろうと思いますが、
もしいい方法があったら引き続き情報お待ちしておりますので
よろしくお願いします。

57 名前:デフォルトの名無しさん :02/08/08 15:08
あちしがListViewでやったときは、そんなに速度は変わらなかったけど?
(ただし、挿入ではなく上書きを使ったけどネ)

58 名前:デフォルトの名無しさん :02/08/08 20:40
質問。
かなりレベルの低い質問で恐縮なのですが
ウインドウの背景を青にして
そのウインドウにTEXTOUT関数で文字を出力すると
文字が白い四角の中に表示されてしまいます。
どうすれば青い背景の上に文字を表示できるでしょうか?
よろしかったらお教えください。

59 名前:デフォルトの名無しさん :02/08/08 21:16
>>58
SetBkMode( hDC, TRANSPARENT );

60 名前:デフォルトの名無しさん :02/08/08 21:21
レスありがとうございます。
なるほど、TRANSPARENTっていう指定が
背景をそのまま残すっていう指定になるんですね。
参考になりました。ありがとうございました。

61 名前:デフォルトの名無しさん :02/08/08 22:19
ListViewのエディット機能が非常に使いにくいのですが
(エクスプローラで名前の変更で使うみたいな)
エクセルみたいに軽快にEditを使いたいのですが
どうすればいいんでしょうか?

62 名前:デフォルトの名無しさん :02/08/09 06:49
SHPathFromIDList
の逆で
パスからIDListに変換するのに
使用するAPIって存在しますか?
あるなら教えていただきたいのですが。
IDListについていまいちきちんと理解していないので、
見当外れなら指摘してもらえると助かります。
よろしくでお願いします。


63 名前:デフォルトの名無しさん :02/08/09 10:29
起動している任意のアプリが、ダイアログかどうかを判断
するにはどうしたらよいのでしょうか?

64 名前:デフォルトの名無しさん :02/08/09 12:55
「アプリがダイアログかどうか」ってどういう意味よ。

65 名前:デフォルトの名無しさん :02/08/09 13:55
そのウインドウにWM_SIZEを送って大きさが変わるかどうか、ってのはどうだ?

66 名前:63 :02/08/09 14:09
>>64-65
表現が曖昧ですいません。
考え直してみたところ、判断したいのはダイアログではなくて
ウィンドウのサイズ変更ができないアプリであり、これはウィンドウスタイルに
WS_THICKFRAMEが含まれているかどうかを判定することにより解決しました。

67 名前:デフォルトの名無しさん :02/08/09 18:00
クラスのメンバ関数をウィンドウプロシージャにする方法はないでしょうか?
単純に、

WNDCLASSEX wcex;
wcex.lpfnWndProc = (WNDPROC)(this->WndProc);

とするとコンパイルエラーになってしまいます。(型変換できないと言われる)
(static関数にすればコンパイルできますが、thisを参照できないので
 困ってしまいます)

68 名前:デフォルトの名無しさん :02/08/09 18:08
>>67
SetProp()でウィンドウハンドルにthisを登録すれば何とか使えます
WM_CREATEの時点では使えませんけどね

69 名前:68 :02/08/09 18:11
>>67
捕捉、
http://techtips.belution.com/ja/vc/0009/
↑に詳しくのってた

70 名前:デフォルトの名無しさん :02/08/09 21:44
>>68-69
これでうまくいきそうです。
紹介いただいたサイトもお気に入りに追加しました。
ありがとうございます。

71 名前:デフォルトの名無しさん :02/08/09 22:08
OutputDebugString()の出力を表示するプログラムを作りたいんだけれど、
どこかにソース or 情報ありませんか。

(すれ立てるまでもない質問はここでに同じことを書きましたがスレ違い
でした。すんまそ。)

72 名前:ssssss :02/08/09 22:35
>>71


73 名前:ssssss :02/08/09 22:36
>>71
デバッガを作りたいということ?
VC++使ってりゃデバッグウインドウにそのまま表示されるけど、それじゃだめなの?

74 名前:デフォルトの名無しさん :02/08/09 22:40
>>73
その、表示が出るVC++のデバッグウィンドウの部分だけを
独立したソフトとして作りたいのです。

75 名前:デフォルトの名無しさん :02/08/09 22:50
>>71
MFCのソースで見たことあるな。
EditWindowを作って、新たに表示させる文字列を
REPLACEなんとかで文章の最後に置き換える形で追加していく。

76 名前:ssssss :02/08/09 22:55
>>74
ほれ
http://www.anticracking.sk/EliCZ/import/msdn_debug.htm
サンプルビルドしてみたけど、うまくいかん…
がんばってくれ。

77 名前:ssssss :02/08/09 22:57
>>76
これも
http://nps.vnet.ee/ftp/Docs/Asm/IczTutor/tut28.html

78 名前:デフォルトの名無しさん :02/08/09 23:13
>76-77
ありがとうございます。
そろそろ終電だからその資料印刷して帰ろう。。。

79 名前:78 :02/08/09 23:19
今本棚を漁ったら、日経BPのwindowsプログラマのためのデバッグテクニックという本
にもヒントがありました。


80 名前:ssssss :02/08/10 00:45
>>78
残業中かよ!

81 名前:デフォルトの名無しさん :02/08/10 01:28
>>62
IShellFolder::ParseDisplayName()

82 名前:62 :02/08/10 03:30
>81
ありがとうございます。
早速試してみますね。

83 名前:デフォルトの名無しさん :02/08/10 12:12
ツールバーをサブクラス化してもサブクラス化ルーチンにWM_COMMANDが飛んでこないのですが、そういうものなんでしょうか?


84 名前:デフォルトの名無しさん :02/08/10 12:30
ツールバーの親

85 名前:83 :02/08/10 15:07
>>84
ボタンコントロールとかをサブクラス化した場合はサブクラス化ルーチンにWM_COMMANDが飛んでくるのにと思ってました。
激しく勘違い。何をサブクラス化してもWM_COMMANDは来ないのですね。

ところで、なんでサブクラス化ルーチンにWM_COMMANDが来ないのでしょう?
サブクラス化の意味が違う?

86 名前:デフォルトの名無しさん :02/08/10 15:09
Win32APIってC言語で記述できるって聞いたけど、どうなの?

87 名前:デフォルトの名無しさん :02/08/10 15:11
>>86 DLLを呼び出す為の仕掛けがC言語自体にはありませんから
  その部分を別にリンクする事で可能になります。

世の中にはDelphiとか そういう機能を内在した言語もあります

88 名前:デフォルトの名無しさん :02/08/10 15:14
>>85
何でサブクラス化したいん?

89 名前:デフォルトの名無しさん :02/08/10 15:56
したいから

90 名前:83 :02/08/10 16:01
>>88
複数のアプリで同一のツールバーを使う場合、ツールバーをDLL化して、ツールバーが押された時の処理もDLL側で行った方がすっきりして良いかと思いまして。
EXE側もツールバーの事を意識しない方が楽ですし。

91 名前:ssssss :02/08/10 16:04
>>85
サブクラス化云々の問題よりも、
そもそもWM_COMMANDはボタンコントロール(のウインドウ)に送られるメッセージではなく、
ボタンが押された結果他のウインドウ(親ウインドウ)に送られるメッセージだからでしょ。
だから、ボタンにWM_COMMANDが送られるわけはない。

92 名前:デフォルトの名無しさん :02/08/10 16:06
どういうツールバーよ

93 名前:デフォルトの名無しさん :02/08/10 19:17
Windows2000のタスクマネージャのように、起動中のアプリケーションの
タイトル名とアイコンを取得しようと思ったのですが、Delphiなどで
作られた一部のアプリケーションは二つのウィンドウが取得されてしまいます。
(例えばクラス名TApplicationとTFormMainの二つ)
しかもこの二つのウィンドウのアイコンが別々です。

そこで、タスクマネージャのように一つだけ取得し、なおかつアプリケーションの
正しいアイコンを取得するにはどうすればよいのでしょうか。

94 名前:デフォルトの名無しさん :02/08/10 19:28
>>93
でそれらのウィンドウの関係は?

95 名前:83 :02/08/10 19:56
>>91
サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。
WM_COMMANDは仰る通り、考え方が違うのですね。

>>92
主にランチャー機能やタスク切換え機能ですね。
ヘルプ起動とかも行っていますが、これもランチャーに相当すると言えるかも。

あまり深く考えずに親ウィンドウ側でWM_COMMANDを処理してもいいんですが、各EXEに同じようなのを記述するのはいかがなものかと。
その部分だけ別ソースに書き出して工夫するのが良いのでしょうか?

96 名前:デフォルトの名無しさん :02/08/10 20:22
>>95
ランチャーの機能に関する一連の関数、又はクラスをDLLの方に閉じ込めて
親ウィンドウのProcedureから呼べば?


97 名前:デフォルトの名無しさん :02/08/10 20:30
そのためのREFLECT_NOTIFICATION()。
親から子にメッセージを投げ返せ。

98 名前:デフォルトの名無しさん :02/08/10 20:44
>>95=83
>サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。

きみはウィンドウ関数(プロシージャ)というものちゃんとを知らないんだね。

99 名前:デフォルトの名無しさん :02/08/10 20:46
>>93

GetWindow(hWnd,GW_OWNER) でゼロを返すほうが真のメインウィンドウ

100 名前:デフォルトの名無しさん :02/08/11 05:01
>>71
dbmonのソース。
Platform SDKに入ってると思う

101 名前:83 :02/08/11 08:49
>>96
親で受け取ったWM_COMMANDがツールバーのものなのか判定するというのがいかがなものかと思いまして。

>>97
REFLECT_NOTIFICATIONで解決かと思ったのですが、使い方が分かりません。
しかしプラットフォームSDKの標準ヘッダーでは定義されていないですね。
MSDNを見ていたらATLマクロだということは分かりましたが、SDKなプログラムにREFLECT_NOTIFICATIONのみを実行させることは可能なのでしょうか?

>>98
はい。残念ながら知らないようです。
私の抱える問題を解消出来るような方法は御存じないでしょうか?


102 名前:96 :02/08/11 10:15
>>101
はて、そのこころは?

103 名前:83 :02/08/11 10:40
>>102
複数のEXEで同様な判定処理を行う事になるからです。
大した事ではありませんが、見た目上、同じツールバーを備えるEXEでも、EXE側での処理如何ではツールバーの動作が異なる可能性が出てくるためです。
今回、私の作っているツールバーでは、主にランチャー機能を持たせる訳ですから、EXE側にとってはツールバーの処理は無関係な訳です。

今のところ、ツールバーをサブクラス化したルーチンで、WM_LBUTTONUPの処理時にTB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べる事が出来ましたので、他に良案が無ければこの方法でいこうかなと思います。


104 名前:83 :02/08/11 10:46
>>102
ちょっと書き方に不備がありましたね。すみません。

>複数のEXEで同様な判定処理を行う事になるからです。

つまり結局の所、[各EXEのWM_COMMANDでLOWORD(wparam)==ツールバーのボタンか?]の処理が必要になるのが如何なものか? ということです。


105 名前:102 :02/08/11 11:23
>>104
私個人としては、
「ウィンドウプロシージャに飛んで来るWM_COMMANDの振り分け」自体面倒な処理では無いと思うが..

case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:
OnToolBarMsg(hWnd, msg, wp, lp);
break;
....
とかじゃダメなの?

WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
でもイベントトリガーに...

106 名前:デフォルトの名無しさん :02/08/11 12:05
>101
だから、REFLECT_NOTIFICATIONマクロと
実質的に等価なコードをかけや。

107 名前:83 :02/08/11 13:02
>>105
case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:

この場合、LOWORD(wp)にはツールバーリソースIDではなくてボタンIDが入りますので、ボタンが複数あるとcase文を増やさねばなりません。
もちろん、面倒ではないですが。

>WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
>でもイベントトリガーに...

ある意味、そのような操作をすると無駄なイベントは発生してしまいますが、TB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べているので、実質的には問題は無いでしょう。

>>106
そのマクロと等価なコードがどんなものなのか分からないのです。
単にWM_COMMANDをツールバーに投げるだけですか?


108 名前: :02/08/11 14:11
>>103
DLLでツールバーとその親ウィンドウを作って、EXEには
親ウィンドウを張り付けりゃいいんでないの?

109 名前:83 :02/08/11 16:00
>>108
そういう手がありましたね。一番素直な組み方かも。
フローティングツールバーみたくする時も、この方が応用が効いて良さそうです。
ありがとうございます。

110 名前:デフォルトの名無しさん :02/08/11 16:27
変な設計

111 名前:83 :02/08/11 17:00
変ですか?

112 名前:デフォルトの名無しさん :02/08/12 04:25
普通親子が別ウィンドウになったりはしない

113 名前:112 :02/08/12 04:26
ごめん勘違い

114 名前:CRect :02/08/13 00:22
あのー超初心者質問でスマンす。VC6 win32アプリ作成,標準で

#include <windows.h>
#include "StdAfx.h" だけだと

CRect

が”定義されてません”のエラーになるんですが,
これは何をインクルードすれば使えるんでしょうか。

--------------------構成: a7 - Win32 Debug--------------------
コンパイル中...
a7.cpp
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\MyProjects\a7\a7.cpp(24) : error C2065: 'CRect' : 定義されていない識別子です。


115 名前:デフォルトの名無しさん :02/08/13 00:26
RECTじゃだめなの?

116 名前:デフォルトの名無しさん :02/08/13 00:31
atltypes.hです
MSDNに載ってるぞ

117 名前:デフォルトの名無しさん :02/08/13 01:16
なんでWin32APIスレで(゜Д゚)

118 名前:CRect :02/08/13 03:29
ですね。
それつかうんならSDKじゃないとやっと気付いた私。ごめ。

119 名前:デフォルトの名無しさん :02/08/13 09:10
ところで stdafx.h って何やってるファイルなの?
コンソールアプリ作る分には windows.h 読んどきゃ OK っぽいけど...

120 名前:デフォルトの名無しさん :02/08/13 09:27
MSDN読んだ?

121 名前:デフォルトの名無しさん :02/08/13 18:10
>>119
プリコンパイル済みヘッダファイル作成用だと思う

122 名前:デフォルトの名無しさん :02/08/14 11:49
親のウインドウの中にCreateWindowで、
リストとエディットを作ったんだけど、その二つは横に並べるのね。
そんでお互いに接してる部分だけサイズ変更ってどうやるんでしょう?
↑エクスプローラのフォルダ表示エリアとファイル表示エリアみたいな関係にしたいのです。
 フォルダ表示エリアの幅を広げると、ファイル表示エリアの幅が狭くなるって感じで。
CreateWindowのスタイルでWS_SIZEBOXとかやると、
4辺全部変えられるようになっちゃうし。
教えて下さいー。

123 名前:デフォルトの名無しさん :02/08/14 12:56
>>122
IEのフレームみたいなのか?
あれはMFCではできるけどAPIだと自力でどうにかしろだったと思うが。

124 名前:デフォルトの名無しさん :02/08/14 14:00
GetWindow(hWnd,GW_OWNER)で0を返すウィンドウのリスト(タスクマネージャのような。)
を作り、それぞれのウィンドウのサイズやZオーダーを変更したり最小化・最大化しようとして
それぞれのウィンドウへSendMessageしたのですが、最小化などはできるのですが
サイズ変更やZオーダーは変更できないウィンドウがあります。
具体的にはDelphi製のソフトが該当するようなのですが、
Zオーダーなどの変更方法としてこの方法は間違っているのでしょうか?
間違っているのならどのような方法をとればよいのでしょうか?

125 名前:デフォルトの名無しさん :02/08/14 14:02
Delphi製のソフトって、目に見えているウインドウが最上位のウインドウではなく、
その上にもう一つウインドウがある。


126 名前:デフォルトの名無しさん :02/08/14 14:02
Delphi製アプリは不可視のトップレベルウィンドウとそれに所有される
メインフォームという構造になってる
たぶんその関係では?

127 名前:126 :02/08/14 14:03
>>125
式はいつにしますか?

128 名前:124 :02/08/14 14:08
不可視ウィンドウから可視ウィンドウ(メインフォームウィンドウ?)を
取得するにはどうすればよいのでしょうか?


129 名前:デフォルトの名無しさん :02/08/14 14:11
>>127

130 名前:124 :02/08/14 14:15
内容がかぶったのでケコン→ケコン式はいつにしますかということだと・・・

不可視ウィンドウとはクラス名TApplicationというやつぽいですが
これ以外の同キャプションをメインフォームと判断するのは
ちょっと乱暴なやり方でしょうか・・

131 名前:デフォルトの名無しさん :02/08/14 14:42
別ユーザとして他のプロセスを起動したいんですが、LogonUser()でうまくいきません。

LogonUser( TEXT( "Administrator" ), TEXT( "." ), TEXT( "password" ),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken );

こんな感じなんですが、どうですか?

132 名前:デフォルトの名無しさん :02/08/14 15:10
>123
そうですねー。
IEのフレームみたいなやつ。
APIでは対応してないのですかー・・・
MFCってさっぱりわからんのであきらめますかな・・・
どーもでした。

133 名前:122 :02/08/14 15:12
上の132は122でした。
しつれーい。

134 名前:デフォルトの名無しさん :02/08/14 15:14
>>132
左右のウィンドウの間にフレーム用のウィンドウを作る。
そのウィンドウがドラッグされたら左右のウィンドウのサイズを調整。

135 名前:デフォルトの名無しさん :02/08/14 17:24
>>130
列挙して不可視ウィンドウがオーナーになってる奴を探す

136 名前:デフォルトの名無しさん :02/08/14 17:27
>>131
起動元のユーザーはTCB特権を持っていますか?

137 名前:デフォルトの名無しさん :02/08/14 18:04
>>136
TCB特権って何ですか?
調べてみたんですけど、それらしいものがでません。。。

138 名前:デフォルトの名無しさん :02/08/14 18:14
>>13
これじゃないの? 手元の MSDN Library だと LogonUser() API の解説に
書いてあったんだが。
> LogonUser 関数を呼び出すプロセスは、SE_TCB_NAME 特権を備えて
> いなければなりません。

ついでにサポート技術情報から。

> 注意: ユーザー マネージャ [原則] - [ユーザーの権利] で、高度なユーザー権利の
>     [オペレーティングシステムの一部として機能] をユーザーに許可することで
>     上記の権限をユーザーに持たせられます。

139 名前:デフォルトの名無しさん :02/08/14 18:41
ちなみにむやみに特権を付加するのはセキュリティの問題があるからな。
SE_TCB_NAMEを付加するくらいだったら最初からAdministrators
与えとけよというくらい危険

140 名前:138 :02/08/14 19:22
>>139
話が逸れるんだが、Win32 の特権について詳解している書籍とかって知ってる?
MSDN Library にはパラパラとは書いてあるんだが、全体像を把握しかねてて。

141 名前:デフォルトの名無しさん :02/08/14 22:06
DelphiのTApplicationウィンドウは可視という罠

142 名前:デフォルトの名無しさん :02/08/15 01:18
質問なのですが
Sleep関数の精度っていうのはどの程度なのでしょうか?
どうも1ミリ秒単位で正確ではないようなのですが。

やはり正確さを取るには
for(dwTime=timeGetTime()+10; timeGetTime()<dwTime; Sleep(0));
のようにするか、for文の中でQueryPerformanceCounterを回して
時間の差を判定するしかないのでしょうか。

でも、こうするとやたら重くなるのでできればSleepのような軽い関数が
あればいいなぁ・・・

143 名前:デフォルトの名無しさん :02/08/15 03:25
timeGetTime()だってSleep()と同じ精度だろ。

144 名前:ssssss :02/08/15 06:01
>>122
今回の場合に使えるかどうか分からないけど、
WM_NCHITTESTを処理すれば、
特定の辺だけサイズ変更できる(マウスでドラッグできる)
ってことができるんじゃないかと思います。


145 名前:デフォルトの名無しさん :02/08/15 09:49
>>142
 正確な時間を何の為に欲しいの? 
Win32アプリだと QueryPerformanceCounterを使っても スレッドが割り込まれると駄目だしさ

146 名前:YahooBB237224045.bbtec.net :02/08/15 10:17
100万回は既出だと思いますが,jpg画像 を表示
する段取を初心者用に
書いたアーティクルはないもんでしょうか.
「猫でもわかる」その他検索しましたが見つけられません.
スージプラグインとか必須ですか?

147 名前:142 :02/08/15 10:25
>>143
違います。
timeGetTime()は1ミリ秒ですが
Sleepは最低5ミリ秒くらいの精度になります。

>>145
ある一定の間隔でポートから出力したいんです。
±0.1ミリ秒程度の精度が欲しいのですが、やはり無理なのでしょうか。

148 名前:デフォルトの名無しさん :02/08/15 10:27
>>142
RDTSC

149 名前:デフォルトの名無しさん :02/08/15 10:27
>>146
http://www.google.co.jp/search?q=StretchDIBits+jpeg

>>147
 殆ど使われてない マザーのbeep機能を使ったらどう?

150 名前:JPEG特許問題 :02/08/15 13:05
>>146
前スレでOleLoadPicturePathを教えてもらいますた。
環境により使用関数は変わりそう。

151 名前:デフォルトの名無しさん :02/08/15 19:30
メモリを追加/解放したい時って VirtualProtect で
要求サイズを変更すればいいんでしょうか?
その場合元のメモリの内容は保障されてるのでしょうか?
よろしくお願いします。

152 名前:デフォルトの名無しさん :02/08/15 21:08
いっそのことDirectMusicのアレを使うとか。重いが。

153 名前::02/08/15 21:10


154 名前:デフォルトの名無しさん :02/08/15 21:23
>>146
JPEGは特許がやばいからやめとけ。

155 名前: :02/08/15 21:23
>>151
悪いことは言わないから、おとなしくmalloc/freeを使っとけ。

156 名前:DELL :02/08/15 21:38
図形を移動させる方法を教えてください。
VBの場合ならshape1.move x,y でできましたが、

APIはRectangle(hdc,x,y,x+10,y+10);
をどこのプロシージャで使えばいいか分かりません。

しかも上記のアルゴリズムでは移動するということではなく、
次々と新規に描かれていくように思えます。

だれか図形を移動させる方法教えてください。

157 名前:デフォルトの名無しさん :02/08/15 21:38
>>155
VirtualProtectってCなの?
C++ならnew/deleteだと思われ

158 名前:デフォルトの名無しさん :02/08/15 21:49
>>157
きみはこのスレで何を言ってるのかね

159 名前:デフォルトの名無しさん :02/08/15 22:04
SetWindowRgn() では WM_PAINT が発生しますか?
もしそうだと case WM_PAINT: でこれをつかったら
∞ループにはまりますよね.

160 名前:デフォルトの名無しさん :02/08/15 22:07
日本では拒絶されるらしいって書いてるけど
http://www.matsusaka-u.ac.jp/~okumura/compression/jpegpat.html

161 名前:151 :02/08/15 22:42
>>155
いぢわるしないで教えてください。
malloc/free に当たる処理を作りたいんです。

>>157
realloc に当たる処理が無いですけどね < new/free
普通は std::vector 使うから。


というか VirtualAlloc が成功しないです…。
何が悪いんだろう…
とりあえず某 VB のサイトにあった引数を参考にして試してるのですが…。
VirtualAlloc (NULL, 4096, MEM_COMMIT, PAGE_READWRITE | PAGE_NOCACHE );
環境は Windows2k です。
アドバイスお願いします。

162 名前:デフォルトの名無しさん :02/08/15 22:46
RegisterClassに渡すウィンドウクラスの名前は、全角文字でも問題ないですか?
もしかしたら、NT系/非NT系によりますか?

163 名前:デフォルトの名無しさん :02/08/15 22:50
> SetWindowRgn() では WM_PAINT が発生しますか?

最後のパラメータを false にすると発生しないと思う

> もしそうだと case WM_PAINT: でこれをつかったら

普通、そんなに頻繁にウィンドウリージョンを設定しないだろ

164 名前:デフォルトの名無しさん :02/08/15 22:58
>>162
普通そんなこと誰もしない=誰も知らないバグが残ってる可能性がある
やめとけ。

165 名前:デフォルトの名無しさん :02/08/15 23:00
>>161
ノーキャッシュをはずしたらどうよ?

166 名前:デフォルトの名無しさん :02/08/15 23:00
>>161
PAGE_NOCACHE
が怪しい。こんなものはまず使わん。

167 名前:166 :02/08/15 23:00
またケコーン…

168 名前:165 :02/08/15 23:02
>>167
たいせつにするよ。

169 名前:151 :02/08/15 23:10
>>165, >>166
ケコーンおめでとうございます。

ちょっと簡略化の為に嘘書いてました。
要求サイズをページサイズ分に切り上げる処理を書き間違ってて
中途半端なサイズを要求していた事が原因でした。

で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?

170 名前:コギャルとHな出会い :02/08/15 23:10
http://kado7.ug.to/net/


朝までから騒ぎ!!
   小中高生
 コギャル〜熟女まで
   メル友
  i/j/PC/対応

女性の子もたくさん来てね
  小中高生大歓迎です                 
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。

  激安携帯情報あります。

171 名前: :02/08/15 23:19
>>169
どうやっても無理。おとなしくmalloc/free使っとけって。

172 名前:デフォルトの名無しさん :02/08/15 23:20
>>169
自分ででっかいプールをつくったら?

173 名前:151 :02/08/15 23:26
>>171
やっぱり Heap系じゃないと増分は無理なんですか?
そういう書き方だと教えてくれてるのか煽りなのか区別がつかないもので…。

>>172
でっかいプールを作るのに VirtualAlloc を使いたいんですよねー

174 名前:デフォルトの名無しさん :02/08/15 23:26
前スレでマウスの変位が右から左にどんどん移動するような
グラフを書きたいといって、
右端で直線を引きながら
BitBlt(memdc, 0, 0, 520, 460, memdc, 1, 0, SRCCOPY);
(memdcは裏画面のデバイスコンテキスト)
というようにすれば右から左に流れるような直線が書けると
教えていただいたのですが、これだとやはり時間がかかってしまいます。
何か高速な画面の移動の方法は無いでしょうか。

175 名前:デフォルトの名無しさん :02/08/15 23:28
>>174
XOR

176 名前:デフォルトの名無しさん :02/08/15 23:36
>最後のパラメータを false にすると発生しないと思う

なるほろ.
しかしそれではせっかく設定したリージョンが..



177 名前:デフォルトの名無しさん :02/08/15 23:37
>>175
早レスありがとうございます。

XORっていうのは、
LineToを呼んで、背景色と色AのXORの色Bで直線を描画して、
今度は色Bの上から色Aで描画すれば背景色に戻る
っていうので合ってるでしょうか?

LineToを何度も呼ぶことになると思いますが、その方が高速なんでしょうか。

178 名前: :02/08/15 23:39
>>173
煽っているつもりは全くないのだが。
VirtualProtectはメモリの保護モードを変更するものなので、
サイズを変更することはできない(てか、ヘルプ読めよ)。

unixのbrkのような使い方をしたいのであれば、
あらかじめVirtualAllocで巨大な領域をreserveしておいて、
必要になった時点でcommitすることで、似たような動作にすることはできる。

179 名前:162 :02/08/15 23:46
>>164
そうですかぁ。(しょっく)

めんどくさいので、最初のウィンドウを作成するときに、そのウィンドウのタイトルで
ウィンドウクラスを登録しようかと思ったんですが。

180 名前: :02/08/15 23:52
>>164
単にクラスを識別するだけの役割しかないのに、
文字列の内容が関係すると思うか?

181 名前:デフォルトの名無しさん :02/08/16 00:10
>>173
増やすときに、VirtualAllocの lpAdressに、予約済み領域の直後のアドレスを
指定(ページ境界に注意)してやればいいのでは?

182 名前:デフォルトの名無しさん :02/08/16 00:14
>>162
試してみりゃ分かるやろ。

183 名前:デフォルトの名無しさん :02/08/16 00:34
>>138,>>139
ありがとうございます。とりあえずいけました。

184 名前:151 :02/08/16 00:47
>>178
> サイズを変更することはできない(てか、ヘルプ読めよ)。
「要求するメモリのサイズ」って書いてあった(VirtualAllocで指定したサイズでなければいけないとは書いてなかった)ので
変更は可なのかなー等と思ってしまいました。

> あらかじめVirtualAllocで巨大な領域をreserveしておいて、
> 必要になった時点でcommitすることで、似たような動作にすることはできる。
なるほろ!これは気がつきませんでした。
ありがとうございます。

>>173
ありがとうございます。その手もありますね。
しかしライブラリ等の弄れない部分がOSからメモリー割り当てしてると失敗してしまいますね…(当たり前ですけど)

ポインタ比較に意味無くなってもいいからヒープ毎に独立したアドレス空間欲しぃ…。

とりあえず >>178 さんのアドバイスを元に頑張ってみようと思います。
皆さんありがとうございました。


185 名前:デフォルトの名無しさん :02/08/16 02:04
>>174
ScrollWindowとかScrollDCとか

186 名前:DOSっていいな :02/08/16 02:18
DOSの時代にはEMMやバンク切り替えっていうのがありましたが、
これと同じようなことをWindowsからできないのでしょうか。

別プロセス空間に2Gバイト近くのメモリーをそれぞれ確保しており、合計で
6Gバイト以上のアドレスを確保しています。この別プロセスのメモリーを共
有メモリーでランダムアクセスしたいのですが、
1:OpenProcessからReadProcessMemory, WriteProcessMemoryでは一旦コピー
  してからのアクセスになるためランダムアクセスに向きません
2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
  トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
  きません。
別プロセスのメモリー空間のポインタを取得する(実アドレスに割り当てる)
APIってないでしょうか。

187 名前:デフォルトの名無しさん :02/08/16 02:20
>>186
6Gの仮想メモリで何がしたいねん?
結局は単一の物理メモリやん。

188 名前:デフォルトの名無しさん :02/08/16 02:36
> 合計で6Gバイト以上のアドレスを確保しています

win32でできたっけ?

189 名前: :02/08/16 02:51
>>186
VirtualAllocVlmとか。

190 名前:DOSっていいな :02/08/16 03:08
>>188
各プロセスはリニアに32ビット(4Gバイト)のアドレスしかアクセス
できませんが、(実際はOSの都合で2Gバイトしか確保できない)
別プロセスではそれぞれのセレクタが別の物理メモリー空間をアドレス
するようになります。
この辺はOSの仕事ですが、実際に確保できてしまいます。

>>186
たとえば、スキャナからの画像を9600BPIでA3全体を読み込むと
数Gバイトになります。もちろん今作っているのは、こんな馬鹿
みたいなこととは違いますが。。。



191 名前:デフォルトの名無しさん :02/08/16 03:12
>>190
OSのメモリ管理限界より、実メモリが増えてなきゃ、
そもそも意味がないだろ。

192 名前:DOSっていいな :02/08/16 03:46
>>191
確かに。
メモリーは誰かが金出して、10Gバイトくらい載るマザーボードと
メモリーを用意するだろう。

インテルCPUではFS,GSのセレクタレジスタが遊んでいるので、
それぞれ別空間をポイントできないかと考えたわけだ。
あるいは、OSからすれば、ページングで同じ物理メモリーを2つのプ
ロセスのリニアアドレスに割り当てればよいことで、簡単にバンク切り
替えができるのかと思って調べたが、見当たらなくてここで質問してい
ます。


193 名前:デフォルトの名無しさん :02/08/16 04:00
>>169
> で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
MSDN Library を読んだ上で言ってるのか?

VirtualProtect は割り当てられたページの属性 (read/write/execute) を設定
する API。CPU がサポートする仮想記憶システムで使うデータベース(ページ
テーブルやディレクトリテーブル)の属性部分だけ仮想化したもの、といや良い
のかな。

俺も試したことはないんだが >>189 が言ってるように VirtualAllocVlm 系の
API を使うか、ファイルマッピング (CreateFileMapping) とかでどうかねぇ。

>>191
IA-32 だと、仮想記憶アドレスの限界以上の実メモリを使える。36bit PSE あ
たりのキーワードで検索すると出てくると思うけど。

194 名前:DOSっていいな :02/08/16 04:05
ありがとうございます。
VirtualAllocVlmって、64ビットのアドレスが返るのですね。
Borland C++Builderを使っているのですが、どうやって使う
のでしょうか。


195 名前:デフォルトの名無しさん :02/08/16 04:17
>>194
google で検索したら、トップで出てきたぞ…。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm

196 名前:デフォルトの名無しさん :02/08/16 06:36
>>175
特許は最近話題になったものだけにあるわけではないぞ

197 名前:151 :02/08/16 06:59
>>193
私の質問はもう終わってるんだけどな…。
直後に似た API の質問だから混同してもしょうがないけど。

でもやっぱり後でもう一回来てよかった。
なんかその Vlm ってのも調べてみようっと。

あと、>>178 さんに教えてもらったやり方でバッチグーに実装できました。
マジでありがとうございました。

198 名前:151 :02/08/16 07:14
で、調べてたら…。

http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm

VirtualAllocVlm 関数は専用のリソースを割り当てるので、控えめに使ってください。
                                   ~~~~~~~~~~~~~~~~~~~~~~

↑ワロタ MS のドキュメントにしては珍しいあからさまに曖昧な表現。

199 名前:デフォルトの名無しさん :02/08/16 09:23
>>186
>2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
>  トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
>  きません。

うそー?MapViewOfFile でマップするファイル位置を指定出来ただろ?64ビットで

200 名前:デフォルトの名無しさん :02/08/16 10:16
複数のキーを同時に押しっぱなしにしていると
Windowsから警告音が来てしまうんですが、
これを止める方法はないでしょうか?

201 名前:デフォルトの名無しさん :02/08/16 12:56
>>199
MapViewOfFileEx() の方かね。

いずれにせよ返ってくるのは LPVOID だから「大量に取得したメモリー全部に
アクセスすることができない」と思うが、そこは手作業でファイルマッピングの
切り替えだろう。

(狭い仮想アドレスを使い回す以上、バンク切り替え相当の手間が掛かるのは、
仕方ないよな)

202 名前:デフォルトの名無しさん :02/08/16 13:42
AdministratorじゃないユーザからAdministratorでないといじれないレジストリのキーをいじるにはどうすればいいでしょうか?

203 名前:デフォルトの名無しさん :02/08/16 13:56
>>202
犯罪の匂いがする

204 名前:デフォルトの名無しさん :02/08/16 14:51
>>203
いえ、そういうのじゃないですよ。
レジストリの特定のキーを削除したいんです。
とりあえず今考えてるのはレジストリをいじるだけのプログラムを作ってお
いて、それを別ユーザとして起動すればいいかな〜って思ってるんですが、
もう少しスマートな方法がないかと思いまして。

205 名前:デフォルトの名無しさん :02/08/16 14:58
>>204
> レジストリの特定のキーを削除したいんです。
なぜ?

一般論として言えば、Administrator しか削除できないキーを一般ユーザが削除する
のは(仮にできたら)、致命的なトラブルになるぞ。本当に必要なら、そのユーザに
ローカルマシンの Administrator 権限を付与するのが正道と思われ。

206 名前:デフォルトの名無しさん :02/08/16 15:49
>>205
それでは、Administratorでない場合はどうでしょう?
他のアプリケーションの設定などを別ユーザからいじるということはできますか?

207 名前:デフォルトの名無しさん :02/08/16 15:54
>>206
必要ならAdministrator権限をもらえって事だよ
そんな簡単に権限無視が出来るんじゃなんのためのユーザー管理だよ

208 名前:デフォルトの名無しさん :02/08/16 16:00
ここですか、クラッキングツールを作ろうというスレは。

209 名前:デフォルトの名無しさん :02/08/16 16:33
いえ、Administratorを要求するエロゲプログラマがいるスレです。

210 名前:デフォルトの名無しさん :02/08/16 21:10
隠しAPIのNtQuerySystemInformationだけど、↓で安全に使えるのに気づいた。
ttp://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/Japan/s
upport/kb/articles/JP253/0/66.ASP

だから何だと言われても困る。

211 名前:デフォルトの名無しさん :02/08/17 15:50
微妙にスレ違いかもしれないですが。

Windows2000でファイルを選択してマウス右ボタンのプロパティから概要タブで
タイトルやコメントとかを設定できますけど、
あれってどこに記録されているのでしょう & 設定するAPIはあるのでしょうか。


212 名前:デフォルトの名無しさん :02/08/17 17:12
http://www.ipa.go.jp/security/awareness/vendor/programming/b08_03_main.html
の下の方にある、福次ストリームを利用しているはず。

213 名前:デフォルトの名無しさん :02/08/17 20:41
設定するAPIはOleなんとかかんとかというのがたぶんある気がする

214 名前:デフォルトの名無しさん :02/08/17 20:49
>>211
詳しく調べてないけどたぶんIPropertyStorageを使うんだと思う
http://msdn.microsoft.com/library/en-us/stg/stg/ipropertystorage_ntfs_file_system_implementation.asp

215 名前:デフォルトの名無しさん :02/08/18 03:50
動的にダイアログの中にダイアログ(コンテナ的な役割)を置きたいんですが、
ダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?

216 名前:211 :02/08/18 03:58
>>212-214
ありがとうございます、資料読んでみます。


217 名前:StretchDIBits :02/08/18 13:03
hBitmap = (HBITMAP)LoadImage(hInst, FileName,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hBitmap, sizeof(BITMAP), &bmp_info);
wx = bmp_info.bmWidth;
wy = bmp_info.bmHeight;
hdc_mem = CreateCompatibleDC(hdc);
SelectObject(hdc_mem, hBitmap);
StretchDIBits(hdc,0,0,wx, wy,
0,0,wx, wy,
pBits,&bmp_info,DIB_RGB_COLORS,SRCCOPY);

とした場合最終行のpBitsには"DIBのビットデータの先頭へのポインタ"
をいれるという説明なのですが,これはどうやって取得できますか?

218 名前:API学くん :02/08/18 13:03
質問です。
リッチエディットコントロールをSDKのC言語で組もうとしてる者です。
EDITSTREAM構造体のdwCookieとpfnCallbackメンバを設定して、
EM_STREAMINメッセージでストリームにデータを送ってリッチエディット
コントロールに表示させるらしいという事がわかりました。
しかし実際に表示させようとしても、やり方がわかりません。
具体的に言うとchar goku[30]="こんにちは"という、メモリ上のデータを
表示させようとするときdwCookieに何を指定するのか分かりません。
es.dwCookie = (DWORD)goku;のように指定しても駄目でした。
ファイルを読み込んでそれを表示する事は出来るのです。
dwCookieにCreateFileで作成したhFileを指定すれば、ファイルの内容が
リッチエディットコントロールに表示されました。
es.dwCookie = (DWORD)hFile;
という感じで大丈夫でした。
ネット上で調べたのですが情報がありません。
メモリ上のデータをリッチエディットコントロールに表示するにはどうすれば
いいか教えて下さい。

219 名前:デフォルトの名無しさん :02/08/18 13:36
>218
コピペじゃ駄目?
CHARRANGE cr;
cr.cpMin = cr.cpMax = -1;
SendMessage(hRich,EM_EXSETSEL,0,(LPARAM)&cr);
SendMessage(hRich,EM_REPLASESEL,0,(LPARAM)"こんにちわ");

SetWindowText(hRich,"こんにちわ");
でもいいかも。

参考→ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_130.htm

220 名前:デフォルトの名無しさん :02/08/18 13:48
>217

StretchDIBits() → StretchBlt() じゃないの?

221 名前:デフォルトの名無しさん :02/08/18 15:09
ダウンロードして見れるWin32APIリファレンスはありませんか?

222 名前:デフォルトの名無しさん :02/08/18 15:16
>>221
Platform SDK にドキュメントついてきたと思うが。英語だけど。

223 名前:API学くん :02/08/18 16:16
>>219
コピペという方法があったのですね。
リッチテキストを扱うからエディットストリームだという固定観念で調べてました。
普通のエディットコントロールも知らないで、いきなりリッチエディットを
作ろうとしたのが勘違いの元でした。
どうもありがとうございました。



224 名前:APIビギナー :02/08/18 16:43
program 中から現デスクトップ画面のスクリーンショットをBMP
に落とすにはどんな方法がありますか?



225 名前:デフォルトの名無しさん :02/08/18 17:12
GetDC(0)してお好きにどうぞ
2000/XPではCAPTUREBLTをお忘れなく

226 名前:デフォルトの名無しさん :02/08/18 18:16
>>221
MSDNに入れば、「Subscriber Downloads」でダウンロードできるよ(藁

227 名前:APIビギナー :02/08/18 19:35
>GetDC(0)してお好きにどうぞ
>2000/XPではCAPTUREBLTをお忘れなく

を,どうも.猫でもできる,を参考にしてやって見ます.

ところでウィン98だと選択の度にWM_PAINTで書きなおして表示されて
いた画像が,Xpだと全く更新されないままになるってのは
何が原因でしょうか.



228 名前:デフォルトの名無しさん :02/08/18 20:13
動的にダイアログの中にダイアログ(コンテナ的な役割)を置きたいんですが、
ダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?


229 名前:デフォルトの名無しさん :02/08/18 20:31
プロパティシートにするのが楽だとおもうのだが、、

230 名前: :02/08/18 23:22
VisualC++で保存したWin32APIを開いてビルトすると

"外部参照 1 が未解決です。"
みたいなメッセージがでてきてエラーになるんですが、
そのまま元に戻す方法だれか知りませんか?


231 名前:デフォルトの名無しさん :02/08/18 23:25
>>230
取りあえず他のスレにまで迷惑かけるなって。

232 名前:デフォルトの名無しさん :02/08/18 23:25
>>227
>>230
すまんが意味がまったくわからん。
もう少しわかりやすい日本語を話してくれ。

233 名前:デフォルトの名無しさん :02/08/18 23:27
>>232
OSボム
http://pc3.2ch.net/test/read.cgi/tech/1029678513/l50

ここのネタだよ。気にしなくていい。

234 名前:  :02/08/18 23:32
>232
日本語?
まぁお前ら天才だからこれくらいの日本語理解できるんとちゃうん?
お前は天才じゃなかったか。スマソ

>231->233
ここはWin32API質問箱だぞ?
スレに関係ない話題はやめろ荒らしめ

235 名前:デフォルトの名無しさん :02/08/18 23:33
>>234
DELLさん、逆ギレですか?

236 名前:DELL :02/08/18 23:36
>235
とにかく、230の質問が解ればそれでいいのだ。
隣でVisualC++開いている。
2chで問題が解決すれば得だろ?

237 名前:デフォルトの名無しさん :02/08/18 23:40
>>236
図星でした。

238 名前:デフォルトの名無しさん :02/08/18 23:41
>>236
お前さぁ、自分で考えて書いたんじゃなかったのか?なぜコンパイルできん?
また、

どこかで見つけたブラクラを書き込め!

系のこの板でもっとも頭の悪い部類に入るスレかよ・・・。

239 名前:DELL :02/08/18 23:45
>238
お前さぁとか偉そうなこといってねぇで、
そのまま実行できんかったらコードを
新規作成したファイルにコピーすればコンパイルできることに気づけよ。

まぁ確かに俺の書いたコードは下らないものかも知れないが、
別にここはプログラム技術板なんだからブラクラより
マシだと思うぞ。

240 名前:デフォルトの名無しさん :02/08/18 23:47
>>239
(劇藁嘲笑


241 名前:デフォルトの名無しさん :02/08/18 23:51
どうせ、なんかのlibをリンクし忘れてるんだろ。

242 名前:DELL :02/08/19 00:00
>241
なるほど参考になりました。

243 名前:デフォルトの名無しさん :02/08/19 00:40
で見当はずれだったら自分の伝達能力を棚に上げてまた暴れるんだろーなー

244 名前:DELL :02/08/19 01:05
>243
必死だな(藁

245 名前:デフォルトの名無しさん :02/08/19 02:03
>>242
うわああああ
dumpbinも知らん
mlも使えない
スーパーDQNだぁぁぁぁ

HNのとおりデリられるべき香具師だな

246 名前:デフォルトの名無しさん :02/08/19 16:15
GetDIBitsとSetDIBitsの第一引数で指定する
HDCについて教えてください。

hDC = GetDC( hWnd );
hDCMem = CreateCompatibleDC( hDC );
hBmp = CreateCompatibleBitmap( hDC, 64, 64 );
SelectObject( hDCMem, (HGDIOBJ)hBmp );

上のコードの後に、
GetDIBits( hDC, hBmp, … );
としても、
GetDIBits( hDCMem, hBmp, … );
としてもうまく動きます。これはどういうことなのでしょう?
HDCならなんでもいいのでしょうか?
(ちなみに、NULLだとうまく動きませんでした)

247 名前:デフォルトの名無しさん :02/08/19 16:24
>>246
どういうことも何も、
hDCMemはCreateCompatibleDCで作ったんだから、
hDCと互換性があるに決まってる。

試したことないけど、
やっぱ、プリンタのHDCとか使ったら駄目じゃない?

248 名前:246 :02/08/19 17:20
>>247
動作に互換性があるのはわかるのですが、
>SelectObject( hDCMem, (HGDIOBJ)hBmp );
としているわけですから、
GetDIBits( hDC, hBmp, … );
でうまくいくのが不思議に思いまして。

GetDIBItsやSetDIBitsの場合、デバイスコンテキストに
設定した値(SelectObjectで指定したオブジェクトなど)は
全く影響なしということでいいのでしょうか?

249 名前:247 :02/08/19 18:46
>>248
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_getdibits.asp
によると、
「hbmp パラメータが示すビットマップが
デバイスコンテキストで選択されている場合、
この関数を呼び出さないでください」とあるんだが。

疑問の解消にはならないかも知れないが、
そういうことはしてはいけないらしい(逃


250 名前:デフォルトの名無しさん :02/08/19 19:28
>>246さーん
CreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)



■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.