adobe readerで開いたウインドウの制御 – プログラミング – Home

adobe readerで開いたウイン...
 
通知
すべてクリア

[解決済] adobe readerで開いたウインドウの制御


nori
 nori
(@nori)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

こんにちは。

指定フォルダに追加された.pdfファイルをAdobe Readerで表示して、新しく表示された
pdfのウインドウを古いpdfのウインドウの下に表示させるプログラムを作っています。

1.CreateProcessにてAdobe Readerを起動させてウインドウを作る。
2.ProcessIdから作成されたpdfウインドウのハンドルを探す。
3.そのウインドウハンドルを使用してウインドウを操作する。

この流れでウインドウを操作しようと考えましたが、EnumWindowsで有効なウインドウの
ハンドルが帰ってきません。ここで詰まってしまっています。

1.表示した.pdfを前面に持ってきたり、サイズ、位置を変える方法 もしくは
2.表示された.pdfの有効なウインドウハンドルを取得する方法

についてご教示いただけないでしょうか?

BOOL CALLBACK EnumWindowProc(HWND hwnd,LPARAM lp)
{

DWORD processId = 0;
GetWindowThreadProcessId(hwnd,&processId);

if( gProcessId == processId){
gTargetHWND = hwnd;
return FALSE;
}

return TRUE;
}

//本体コード抜粋*************************************************************

if( false == CreateProcess(NULL,(LPTSTR)temp.c_str(), NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL, NULL, &startinfo,&processinfo) )return false;

gTargetHWND = 0;//EnumWindowsで最終的にここにウインドウハンドルが入ります。
gProcessId = processinfo.dwProcessId;
EnumWindows(EnumWindowProc,0);

....
SetForegroundWindow(gTargetHWND);


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

ご存じかもしれませんが、起動中のウインドウのウインドウクラス名称や、
プロセスIDを調べるには、コンパイラのSDKに付属しているツールである
「spy++」を使用します。

さて、自分のWindows 7で「Adobe Reader」を立ち上げてみたところ、
11.0.06が起動しました。
このバージョンのではフレームウインドウのウインドウクラス名称が、
AcrobatSDIWindowであるため、EnumWindowProc()内で、
GetClassName()を使ってクラス名称が上記であるか調べる方法もとれます。

この方法で、一致するウインドウを見つけ、この時、
プロセスIDが一致しない理由を探してみるのが良いかもしれません。

もちろん先のspy++で予めプロセスIDを知っておく方法も可能です。

仲澤@失業者/(自宅)・・・眠れんっ(しくしく)


返信引用
nori
 nori
(@nori)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

仲澤@失業者様、返信ありがとうございます。
spy++、今まで知りませんでした。教えていただきありがとうございます。

そのspy++でプロセスとウインドウを見てみましたが、プロセスから取得したハンドルは
AcrobatSDIWindowではなくて別のDDEMLEventというウインドウだったようです。

そこで、クラス名をAcrobatSDIWindowで列挙して、(複数起動時はウインドウ名で区別)
ハンドルを取得して操作してみましたが、だめでした。

スキャンのソフトのControlCenterにて窓口で受け取った処方箋をスキャン、調剤室の
パソコンに転送していましたが、新しく転送された.pdfがどうしても上になってしまい、
調剤しづらい、ということでどうにか古い.pdfを表のままにできないか?ということで
作成しておりました。

Adbeのウインドウの作り方が特殊なのかな?とおもい、Adobe以外の表示ソフト(とりあ
えずはMSPaint)でやってみようかな、と思っております。

ありがとうございました。
とりあえずまた自力でやってみて、詰まったらまた質問させていただくかもしれません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました