mcrblog

vcpp-ml

2003年05月

30

[vcpp 00060829] Re: SysListView32からのイメージリスト取得

神戸です
色々しらべて, CreateStreamOnHGlobal()にたどり着きましたが,
#なんでメール投稿してからupするまでにこんなに時間が掛かっているんだろ!!

DLL側がとりあえず動作してますが, (サイズは65535ときめウチしてます ^^; 汗)
APL側でCreateStreamOnHGlobal()した時に失敗してしまいます.
#とりあえず処理的には
#DLL->IMAGELIST->STERAM作成->STREAM書き出し 成功 (本当か疑問ですが)
#APL->STREAM作成でダメ->STREAM読み出し->IMAGELISTをHWNDにセット
#と後者で失敗してます.

また、ストリームを作成する際の確保サイズがわかりません.
指定必要なのか不要なのか?


----- Original Message -----
From: "Satoshi Nakamura" <w...@zak.att.ne.jp>
To: <v...@mserver.catnet.ne.jp>
Sent: Friday, May 30, 2003 3:20 PM
Subject: [vcpp 00060828] Re: SysListView32からのイメージリスト取得


> 中村です。
>
> At 30 May 2003 13:41:42 +0900 Yasuhiro.Kambe wrote:
> > そもそもストリームというものが分かっていません.
> > Image_Write()をする前にストリームを作成してそこにImageListを書き込む感じ
> > だと思うのですが。。
>
> おっしゃる通り、C++的に言えばIStreamを継承するクラスを作って定義メンバをオ
> ーバーライドすれば良いです。
>
> でも多分そこまでやらなくても、CreateStreamOnHGlobalを使うと簡単にメモリ上
> にデータを読み書きするIStreamが作れるので、まずはそちらを使ってみてはいか
> がでしょう。
>
>
> --
> Satoshi Nakamura <s...@zak.att.ne.jp>
>
30

[vcpp 00060830] Re: HTMLの記述でNetScape6からActiveXを呼ぶ方法。

  oki です。

>     NetScapeで動作させるために <embed></embed>タグを
>  使用するよう説明がありますが、具体的な書き方が解らないでいます。

 ActiveX では無いですが、アプレットの書き方で
<applet> タグは廃止されるため、それに準拠するためのHTML
ファイルコンバータが java で、HTMLConvertor とか言う名前で
SunMicrosystems さんから提供されていたと思うので、それを
参考にされては、どうでしょうか?

 これを使えば、<OBJECT> タグと<EMBED>タグ両方に
対応したページに変換できたと思います。

# ただ、NetScape で ActiveX が動くかどうかは、知りません。
30

[vcpp 00060828] Re: SysListView32からのイメージリスト取得

中村です。

At 30 May 2003 13:41:42 +0900 Yasuhiro.Kambe wrote:
> そもそもストリームというものが分かっていません.
> Image_Write()をする前にストリームを作成してそこにImageListを書き込む感じ
> だと思うのですが。。

おっしゃる通り、C++的に言えばIStreamを継承するクラスを作って定義メンバをオ
ーバーライドすれば良いです。

でも多分そこまでやらなくても、CreateStreamOnHGlobalを使うと簡単にメモリ上
にデータを読み書きするIStreamが作れるので、まずはそちらを使ってみてはいか
がでしょう。


-- 
Satoshi Nakamura <s...@zak.att.ne.jp>
30

[vcpp 00060827] Re: HTMLの記述でNetScape6からActiveXを呼ぶ方法。

Tietew です。

On Thu, 29 May 2003 18:33:43 +0900
In article <001701c325c5$67ad6df0$d...@bbbrain.jp>
[[vcpp 00060824] HTMLの記述でNetScape6からActiveXを呼ぶ方法。]
"hashi" <h...@bb-brain.co.jp> wrote:

>   ActiveX形式で「MyActivx.OCX」を自作したのですが、
>  NetScape6で動作させるためにはどのようなHTMLを

無理です。

>     NetScapeで動作させるために <embed></embed>タグを
>  使用するよう説明がありますが、具体的な書き方が解らないでいます。

Plugin を書きましょう。
http://wp.netscape.com/comprod/development_partners/plugin_api/
http://mozilla.org/projects/plugins/

(*1) NetScape じゃない

>  これら以外で「通常使うブラウザ」を取得する方法はあるのでしょうか?

レジストリ HKCR\http に,通常の関連付けと同じ方法で書いてありま
す。


―[ Tietew ]――――――――――――――――――――――――――――
Mail: t...@tietew.net / t...@raug.net
Web : http://www.tietew.net/     Tietew Windows Lab.
PGP fingerprint: 26CB 71BB B595 09C4 0153  81C4 773C 963A D51B 8CAA
30

[vcpp 00060826] Re: SysListView32からのイメージリスト取得

> そもそもストリームというものが分かっていません.
> Image_Write()をする前にストリームを作成してそこにImageListを書き込む
> 感じだと思うのですが。。

神戸です.
とりあえず現状HookDLLにてImageListをストリームに書き込む個所は
以下のとおり考えました

Q1.STREAMサイズはGetImageCount()などから算出すると思うのですが...
    (まったく違うかも ..)どのようにメモリサイズを算出すればよいのでしょうか


Q2.CreateStreamOnHGlobal()は作ったままで終了してよいのでしょうか?
     反する..Destroy.....()的な関数呼び出しは不要でしょうか?

他. 一旦Globalに取得して共用メモリに複写しているつもりですが
  これでよろしいでしょうか?(下記ソースはイメージ読み込みストリームへの書
き出しのみ)

 LPVOID pLocal=NULL ;
 LPVOID pSysShared;  // 他プロセスのビューの開始アドレス

 HANDLE hProcess;   // プロセスハンドル
 DWORD dwPID;    // Process ID
 DWORD dwNumberOfBytes; // 読み書きされたバイト数
 DWORD dwSize = sizeof(HDITEM) + sizeof(TCHAR) * MAX_PATH;    // 確保するサ
イズ
//***** Streamのサイズのはずだが...どうやってもとめるの

 HIMAGELIST hImageList = NULL;
 int nImage = 0;
 char buf[256];
 LPSTREAM pStm = NULL ;
 HGLOBAL  hGlobal = NULL ;
 LPVOID  pvData = NULL ;

 hImageList = ListView_GetImageList(hHookWnd,LVSIL_NORMAL);
 nImage = ImageList_GetImageCount(hImageList);
 sprintf(buf,"hImageList = %08x nImage = %d",hImageList,nImage);
 if(!c_msg)
 {
  c_msg = 1;
  ::MessageBox(NULL,"",buf,MB_OK);
 }

 // 共有メモリをオープン
 GetWindowThreadProcessId(hHookWnd, &dwPID);
 hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ |
PROCESS_VM_WRITE,
                                    FALSE, dwPID);
 pSysShared = (LPVOID)VirtualAllocEx(hProcess, NULL, dwSize,
                                    MEM_RESERVE | MEM_COMMIT,
PAGE_READWRITE);

 hGlobal = GlobalAlloc(GMEM_MOVEABLE,dwSize);
 pLocal  = GlobalLock(hGlobal);
 HRESULT hr = CreateStreamOnHGlobal( pLocal,FALSE,&pStm );
 if(hr)
 {
  //####作りっぱなし???
  ImageList_Write( hImageList,pStm );
 }
 WriteProcessMemory(hProcess, pSysShared, pLocal, dwSize, &dwNumberOfBytes);
 GlobalUnlock(hGlobal);
 GlobalFree(hGlobal);
 // 共有メモリをクローズ
 VirtualFreeEx(hProcess, pSysShared, 0, MEM_RELEASE);
 CloseHandle(hProcess);
記事検索
Amazon.co.jp
  • ライブドアブログ