2016-10-26 38 views
0

私はプロセス名とそのウィンドウのハンドル(HWND)を持っています。
相対アイコン(利用可能な場合)を取得します。
MSDNで検索すると、特定のexe名からアイコンへのハンドルを取得するためにExtractIcon()が見つかりました。GetIconInfo()は、HICONのアイコンの「情報」を取得します。
これを行うのが正しい方法であるかどうか、およびアイコンへのハンドルなしでアイコンを(2番目の瞬間に)表示するための正しい情報を取得する方法はわかりません。
この情報をアイコンを表示する別のプロセス(ソケット経由)に送信する必要があります。

ICONINFO構造には、ビットマップを含むHBITMAPフィールドがあります(黒色&白および色付き)。それは役に立ちますか?HWND、プロセス名または他のプロセスIDからアイコンプロセスを取得

答えて

0

API GetClassLongを使用して、プログラムに関連付けられたアイコンを取得し、SendMessage APIを使用して、そのアイコンを変更するウィンドウのhwndを渡すことができます。

この例では、私のアプリケーションからアイコンを抽出し、それを電卓に設定しました。私の窓の計算機は、アイコンを送信する前に開いています:

case WM_LBUTTONDOWN: // just for explanation so left clicking in your client area and see the result 
{ 
    HICON icon = (HICON)GetClassLong(hWnd, GCL_HICON); 
    HWND hCons = FindWindow(NULL, "Calculator"); // I already opened windows calculator. you can use any other window but be sure to get its valid Handle 
    if(!hCons) 
     MessageBox(0, "\"Calculator\" windows is not found!", 0, MB_OK|MB_ICONHAND); 
    SendMessage(hCons, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)icon); // setting the icon 

} 
break; 
+0

ありがとう!アイコン変数をソケット経由で別のプログラム(別のコンピュータ上で実行される)に送ることができると思いますか?私はこのようにそれを送る必要があるからです。 –

+0

ソケットファイル転送を使用します。 – Raindrop7

+0

申し訳ありませんが、私はHICONでアイコンやアイコン自体のハンドルを持っているかどうかを知りたいのです。ポインタのようなハンドルがあれば、別のPCで別のオブジェクトを指すことができます。そうでなければ、私はオブジェクトを持っており、それは動作します。 –

関連する問題