mcrblog

vcpp-ml

1999年10月

31

[vcpp 00034145] IShellFolder::GetAttributesOfについて

This is a multi-part message in MIME format.

------=_NextPart_000_0011_01BF23DB.4590F100
Content-Type: text/plain;
 charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit

こんにちは、教えてほしいことがあります。

Windows95+Visual C++5.0の環境にてNameSpaceエクステンションを作成しています。

..XXXの拡張子のファイルをダブルクリックするとIPersistFolder,IShellFolder等を
実装したコンポーネントが作成されるようにしています。

コンポーネントが作成されたあと、Initializeが呼ばれ、そのあとGetAttibutesOfが
呼ばれています。

このときGetAttibutesOfは引数のcidlがゼロで且つapidlがNULLの状態で呼ばれてい
ます。

GetAttributesOfメソッドはそもそもapidlで指定されたアイテムの属性を返すべきも
のだとヘルプファイルに記載されていますが、シェルがなぜapidlをNULLにしてこの
メソッドを呼び出すのかよくわかりません。

このようなパラメータをセットした呼び出しは何か特別な意味があるのでしょうか?

コンポーネントはこのようなパラメータでの呼び出しに対し、どのような応答をすべ
きなのでしょうか?


素人の私にはよくわかりません。
ご存知のかたいらっしゃいましたらぜひ教えてください。








------=_NextPart_000_0011_01BF23DB.4590F100
Content-Type: text/html;
 charset="iso-2022-jp"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=3D"text/html; charset=3Diso-2022-jp" =
http-equiv=3DContent-Type>
<META content=3D"MSHTML 5.00.2014.210" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT =
size=3D2>=1B$B$3$s$K$A$O!"65$($F$[$7$$$3$H$,$"$j$^$9!#=1B(B</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>Windows95+Visual=20
C++5.0=1B$B$N4D6-$K$F=1B(BNameSpace=1B$B%(%/%9%F%s%7%g%s$r:n@.$7$F$$$^$9!=
#=1B(B</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT=20
size=3D2>.XXX=1B$B$N3HD%;R$N%U%!%$%k$r%@%V%k%/%j%C%/$9$k$H=1B(BIPersistFo=
lder,IShellFolder=1B$BEy$r<BAu$7$?%3%s%]!<%M%s%H$,:n@.$5$l$k$h$&$K$7$F$$$=
^$9!#=1B(B</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT=20
size=3D2>=1B$B%3%s%]!<%M%s%H$,:n@.$5$l$?$"$H!"=1B(BInitialize=1B$B$,8F$P$=
l!"$=3D$N$"$H=1B(BGetAttibutesOf=1B$B$,8F$P$l$F$$$^$9!#=1B(B</FONT></DIV>=

<DIV>&nbsp;</DIV>
<DIV><FONT=20
size=3D2>=1B$B$3$N$H$-=1B(BGetAttibutesOf=1B$B$O0z?t$N=1B(Bcidl=1B$B$,%<%=
m$G3n$D=1B(Bapidl=1B$B$,=1B(BNULL=1B$B$N>uBV$G8F$P$l$F$$$^$9!#=1B(B</FONT=
></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT=20
size=3D2>GetAttributesOf=1B$B%a%=3D%C%I$O$=3D$b$=3D$b=1B(Bapidl=1B$B$G;XD=
j$5$l$?%"%$%F%`$NB0@-$rJV$9$Y$-$b$N$@$H%X%k%W%U%!%$%k$K5-:\$5$l$F$$$^$9$,=
!"%7%'%k$,$J$<=1B(Bapidl=1B$B$r=1B(BNULL=1B$B$K$7$F$3$N%a%=3D%C%I$r8F$S=3D=
P$9$N$+$h$/$o$+$j$^$;$s!#=1B(B</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT =
size=3D2>=1B$B$3$N$h$&$J%Q%i%a!<%?$r%;%C%H$7$?8F$S=3DP$7$O2?$+FCJL$J0UL#$=
,$"$k$N$G$7$g$&$+!)=1B(B</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT =
size=3D2>=1B$B%3%s%]!<%M%s%H$O$3$N$h$&$J%Q%i%a!<%?$G$N8F$S=3DP$7$KBP$7!"$=
I$N$h$&$J1~Ez$r$9$Y$-$J$N$G$7$g$&$+!)=1B(B</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT =
size=3D2>=1B$BAG?M$N;d$K$O$h$/$o$+$j$^$;$s!#=1B(B</FONT></DIV>
<DIV><FONT =
size=3D2>=1B$B$4B8CN$N$+$?$$$i$C$7$c$$$^$7$?$i$<$R65$($F$/$@$5$$!#=1B(B</=
FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV></BODY></HTML>

------=_NextPart_000_0011_01BF23DB.4590F100--
31

[vcpp 00034144] RE: NT4.0のDOS窓でエスケープシーケンスを使う方法

>あと、エスケープシーケンスが使えない場合として、何か代替案
>がありますでしょうか?いまからエスケープシーケンスを使った
>NTコンソールプログラムを作ろうとしているのですけど、このまま
>代替案がなければ、Win98ONlyになりそうです。

HANDLE GetStdHandle(
  DWORD nStdHandle   // input, output, or error device
);
BOOL SetConsoleTextAttribute(
  HANDLE hConsoleOutput,  // handle to console screen buffer
  WORD wAttributes        // text and background colors
);

Windows NT: Requires version 3.1 or later.
Windows: Requires Windows 95 or later.
Header: Declared in wincon.h.
Import Library: Use kernel32.lib.

95&NTだと、この辺りですかねぇ・・・

---------------------------------
mailto:o...@syscreate.co.jp
株式会社システムクリエイト
小倉浩靖
31

[vcpp 00034143] Re: ATL上でのフォント使用方法2

伊藤@日本精密さん、ありがとうございます。

教えていただいたのはコントロールの生成後の動的な変更方法だと
思っていいのでしょうか?
デザインモード、動作モードともにOKなのでしょうか?

コンストラクタで以下のように

  CComPtr<IFontDisp> t_pFont;
  FONTDESC _fontdesc =
      { sizeof(FONTDESC),OLESTR("MS Pゴシック "),FONTSIZE(10),FW_BOLD,
        ANSI_CHARSET,FALSE,FALSE,FALSE };
  OleCreateFontIndirect(&_fontdesc,IID_IFontDisp,(void**)&t_pFont);
  put_Font(t_pFont);

やっているのですが
ダイアログエディタ等で作成直後にプロパティページを開くとフォントが反映されません。
一回でも変更すると次回からはちゃんと反映されます。
できれば指定したものを初期のフォントとして使いたいのですが...

それと、デザインモードでのテスト時にブレークポイント、トレース出力等
は可能なのでしょうか?

ご存知でしたら教えてください。
お願いします。

片山 浩
31

[vcpp 00034142] Re: 特権SE_TCB_NAMEの取得

三浦です。

[vcpp 00034139] 特権 SE_TCB_NAMEの取得 で
  k...@ab1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada) さんは、

 |SE_TCB_NAME 特権が得られれば、LogonUser() 関数辺が使えるので、
 |UNIX の su みたいなことができるんですが、、、
 |AdjustTokenPrivileges() しても、
 | 「オペレーティングシステムの一部として機能」
 |を持ってないと、SE_TCB_NAME は蹴られてしまいますし、、、
 |# http://www1.plala.or.jp/knambo/kb/nt/LogonUser.html#LOGONUSER
 |# では取得できるようなことを書いているんですが、、、

もう一度上記Web pageを読み直してみましょう。

特権を「持っている」ことと「有効になっている」こととは別です。
上記Web pageではSE_TCB_NAME特権をプログラム中から「有効」にしています
が、その前にこの特権を「持っている」必要があると書かれています。
この特権を「持っている」状態にするには

 |に、su もどきのサンプルソースがありますが、こいつはあらかじめ
 | 「オペレーティングシステムの一部として機能」
 |をユーザーマネージャで設定しないと駄目なようでした。

なわけです。
----
三浦 重喜 <s...@pp.iij4u.or.jp>
31

[vcpp 00034141] Re: NT4.0のDOS窓でエスケープシーケンスを使う方法

三浦です。

[vcpp 00034140] NT4.0のDOS窓でエスケープシーケンスを使う方法 で
  Tetsuya Nakashima <s...@ca2.so-net.ne.jp> さんは、

 |NT4.0上でエスケープシーケンスを使う前準備として、

NTでエスケープシーケンスが有効なのはMS-DOSで実行可能なプログラムだけで
す。Win32のプログラムはコンソールアプリケーションであろうとエスケープ
シーケンスは無効です(Windows 9xとは違う)。

 |あと、エスケープシーケンスが使えない場合として、何か代替案
 |がありますでしょうか?いまからエスケープシーケンスを使った
 |NTコンソールプログラムを作ろうとしているのですけど、このまま
 |代替案がなければ、Win98ONlyになりそうです。

コンソール系のWin32 APIを使うしかないでしょう。
----
三浦 重喜 <s...@pp.iij4u.or.jp>
記事検索
Amazon.co.jp
  • ライブドアブログ