アプリ版:「スタンプのみでお礼する」機能のリリースについて

GetWindowLongで別のプログラムのウインドウハンドルを取得してウィンドウプロシージャのアドレスを調べようと思ったのですが取得できません。他のウィンドウのウィンドウプロシージャのアドレスは取得できないのでしょうか?

------------------------------------------
#include <stdio.h>
#include <string.h>
#include <windows.h>

struct cell{
HWND hWnd;
char WindowName[256];
};

BOOL CALLBACK EnumWndProc( HWND hWnd, LPARAM lParam )
{
char buff[256]="";
GetWindowText( hWnd,buff, sizeof(buff));//ウインドウの文字を取得して、
if(strcmp(buff,((cell*)lParam)->WindowName)==0){//名前が一致したら、
((cell*)lParam)->hWnd = hWnd;//ウィンドウハンドルを渡す
}
return true;
}

int main(int argc, char* argv[])
{
cell c;
c.hWnd =NULL;
strcpy(c.WindowName,"無題 - メモ帳");//検索するウィンドウの名前

EnumWindows( EnumWndProc, (LPARAM)&c);
LONG wndproc, exstyle;

if(c.hWnd != NULL){
//目的のウインドウハンドルが取得できました
wndproc = GetWindowLong(c.hWnd, GWL_WNDPROC); //メモ帳のウィンドウプロシージャが取得できない
exstyle = GetWindowLong(c.hWnd, GWL_EXSTYLE);
}
return 0;
}

A 回答 (1件)

できないと思います。


プロセス(プログラム)はそれぞれ独立したアドレス空間(仮想アドレスとか言うんだったと思います。)を持っていますので、別のプロセスのウィンドウプロシージャのアドレスを取得したとしても、そのアドレスは、そのプロセスでしか意味を持ちません。
ちなみに、プロセスごとに持っているアドレスは CPU によって実際の物理アドレスに変換されて処理されます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
同じプロセス空間にないとだめなんですね。
ありがとうございました。

お礼日時:2009/11/15 18:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!