喫茶XRAYトップページ

[スレッド全体
]

[8305] Re3:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 11:40:14 TS
▼ Mr.XRAYさん
> 検出できないのではなく,実行ファイル名が検出できない? か.
そうです、ハンドルは取得できていますし、Delphiでも同様の数値が取得できます。
「虫の目」の画像を添付します。
「虫の目」を作られたカルト・ドランさんのホームページは
http://drang.s4.xrea.com/program/program.html
Delphiのソースコードも公開されてます。

[8306] Re4:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 12:50:34 TS
▼ Mr.XRAYさん
実行ファイル名が検出できないプログラムでもsetWindowPosが正常に動作
する物もあります。
どういう理由かたまたま操作したいプログラムの場合だけ動作しません。
今回の私の質問は一般的なものでは無いので検証が難しいですね。


[8307] Re5:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 13:44:32 Mr.XRAY
▼ TSさん

> 今回の私の質問は一般的なものでは無いので検証が難しいですね。

そうかも知れませんが.興味ありますね.
特に Window 8 に絡んでいるので余計に.
さて,う〜む.思いつくことは... ないですが...


[8308] Re5:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 13:51:11 TS
▼ Mr.XRAYさん
試してみたらSendMessageも効きません、要するに
hTargetWnd := FindWindow('Dedacciai EV2 Frame',nil);
上記で得たハルドルは無効であると言う事になります。
さて、どうしたら、有効なハルドルが取得できるのでしょうか。
最初に記載した様にWindowsXPでは何も問題はありませんでした。
Windows8上ではどう違うのでしょうか。ちなみに 64 ビット版です。

[8310] Re6:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 14:25:06 Mr.XRAY
▼ TSさん

> 最初に記載した様にWindowsXPでは何も問題はありませんでした。
> Windows8上ではどう違うのでしょうか。ちなみに 64 ビット版です。


ん!? ちょっと待ってください.
少しばかり見えてきたような...


[8311] Re7:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 14:27:40 Mr.XRAY
> ん!? ちょっと待ってください.
> 少しばかり見えてきたような...


いや,勘違いかも.
「デジカメde!!同時プリント」って,ググってみたんですが,
確か,Windows 8 でアップデートすれば動作するやつですよね.
これ自身は 32 ピットアプリでしたったけ?

# クソッ.何でだか,どうしてか知りたくなってきた...


[8312] Re8:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 14:51:43 TS
▼ Mr.XRAYさん
> 「デジカメde!!同時プリント」って,ググってみたんですが,
> 確か,Windows 8 でアップデートすれば動作するやつですよね.
> これ自身は 32 ピットアプリでしたったけ?

そうです、ソフトは現在は販売は終了しています。

今回やりたいことは、2つのプログラムを画面上整列させて
デジカメde!!からもう一つのプログラムにドラッグドロップで
データを渡すのですが、もう一つの方も言う事を聞いてくれません。

他の例示できる一般的なプログラムが分かれば良いですが。

[8313] Re9:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 16:43:55 Mr.XRAY
▼ TSさん,ちょっとお願いしてもよろしいでしょうか?

以下のプログラムで,その「デジカメde!!同時プリント」の情報が
どんな風に取得できるか知りたいのですが...

http://mrxray.on.coocan.jp/Delphi/zip/plWindowTreeTest.exe
(圧縮はしていません)

下図のようなプログラムです.
[Button1] をクリックすると,現在,デスクトップで表示されて
いるアプリをツリー表示します.


[8314] Re10:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 17:06:15 TS
▼ Mr.XRAYさん
済みません、再度試してみましたが、どこで間違えたのかDelphi7,Delphi2010では
setWindowPosは正常に動作しました。
動作しないのはDelphiXE5だけの様です。
32ビットアプリを64ビットと勘違いして、動作しているとか無いんでしょうか。

ウインドウリストの画面を添付します。


[8315] Re11:Windows8のWinapiの動作について返信 削除
2014/12/27 (土) 17:25:44 Mr.XRAY
▼ TSさん

> 動作しないのはDelphiXE5だけの様です。
> 32ビットアプリを64ビットと勘違いして、動作しているとか無いんでしょうか。


なるほど.ちょっと面白くなってきたような(失礼!!)
 
> ウインドウリストの画面を添付します。

お手数おかけしました.
Window 7 では,ウインドウのフレーム関係に変更があったので,
もしかしたら,クラス名の検出の際に何かあるののでは思ったのですが,
そうではないようですね.


[8317] Re12:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 10:41:57 TS
▼ Mr.XRAYさん
私は昔からブラウザはOperaを使っています。
現在のバージョンでは無く古いバージョンです
これでないとブックマークが使い難いです、現在のものは使う気がしません。
http://www.opera.com/download/guide/?ver=12.17

このOperaも下記コードでDelphiXE5では動作しませんでした。
Delphi2010では動作します。

procedure TForm1.Button1Click(Sender: TObject);
var hTargetWnd:HWND;
begin
  hTargetWnd := FindWindowW('OperaWindowClass',nil);
  if hTargetWnd <> 0 then
    begin
      setWindowPos(hTargetWnd, 0 ,0,0,500,800, 0);
      exit;
    end;
end;


[8319] Re13:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 11:06:24 Mr.XRAY
▼ TSさん

> 私は昔からブラウザはOperaを使っています。

Opera は以前,インストールしていました.
Mac では確か標準のブラウザだったような.
現在は,FireFox のアドオン等を使用しているので,そのままです.
Opera は,Mac で使われていることもあるかも知れませんが,
わりと HTML の仕様が忠実に反映されるようですね.

> このOperaも下記コードでDelphiXE5では動作しませんでした。
> Delphi2010では動作します。


いよいよ面白くなってきました.
機会を見つけて,というより,何かなかったかと,いろいろ思い出そうと
しているのですが...


[8320] Re14:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 12:29:31 Mr.XRAY
▼ TSさん

以下の図のようなテストプログラムを作成しましました.
これからテスト開始します.
で,ヘヘヘッ.ちょっと見えてきました.うん,もしかしたら...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Clear;
  Memo1.font.Name := 'MS ゴシック';
  Memo1.Font.Size := 10;
  Memo1.ScrollBars := ssVertical;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TheText : String;
  hTargetWnd : HWND;
  Flags : Cardinal;
begin
  TheText := Trim(Edit1.Text);
  hTargetWnd := FindWindowW(PChar(TheText), nil);
  if hTargetWnd <> 0 then
    begin
      Memo1.Lines.Add(TheText + '    ' + IntToStr(hTargetWnd));

      Flags := SWP_NOZORDER or SWP_SHOWWINDOW;
      SetWindowPos(hTargetWnd, 0, 0, 0, 500, 800, Flags);
    end;
end;



[8321] Re15:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 13:08:59 Mr.XRAY
ほば原因が分かりました.
前に書いた

>Window 7 では,ウインドウのフレーム関係に変更があったので,

これウソです.Windows Vista 以降です.
アプリの作成の仕様というか,構成の問題だと思うのですが,
詳しいことは分かりせん.
つまり,クラス名で検出したハンドルが,必ずしも,そのアプリの
メインウィンドとして,外部から操作可能なウィンドウハンドルではない.
ということが原因です.

では,どうすれば,対象のウィンドウのハンドルを取得できるか,
考えています.

# 以前,アプリの操作関係のサンプルを書いていた時に気付いたものです.
# サンプルプログラム集に,何か書いた記憶があるのですが,
# どこに書いてあるのかが思い出せません(苦笑)

# だから,過去ログを読めとか,ヘルプを読め,といっても大変なのですよ.
# 自分で書いた記事でさえ,こうなんですから.


[8322] Re16:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 13:14:59 Mr.XRAY
> つまり,クラス名で検出したハンドルが,必ずしも,そのアプリの
> メインウィンドとして,外部から操作可能なウィンドウハンドルではない.
> ということが原因です.


この確認は以下のようにしました.
前にテストしていただいた時に使用した,ウィンドウのツリー表示を使用します.
私の場合,FireFox を使用しています.
したがって,クラス名は,MozillaWindowClass です.
しかし,このクラス名を使用して,最初に検出したウィンドウハンドルでは,
FireFox の位置とサイズは変更できません.

ツリー構造の中の,同じ MozillaWindowClass とクラス名のウィンドウハンドルを
使用すると,位置とサイズが設定できます.

動作確認は Windows 7 U64(SP1) + Delphi XE(Up1) です.
では,なぜ Delphi 2010 では動作するのか?
は,これから考えます.(^^;


[8323] Re17:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 14:02:51 TS
▼ Mr.XRAYさん
ありがとうございます。手掛かりがあれば助かります。

> ツリー構造の中の,同じ MozillaWindowClass とクラス名のウィンドウハンドルを
> 使用すると,位置とサイズが設定できます.


ウィンドリストには1つしかFireFoxのツリー表示がありませんが、上記は
どの位置にあるのでしょうか。


[8324] Re18:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 15:36:31 Mr.XRAY
▼ TSさん

> ウィンドリストには1つしかFireFoxのツリー表示がありませんが、上記は
> どの位置にあるのでしょうか。


ワワワッ.ゴメンナサイ.
前に UP した EXE では検出できません.
修正したのを UP します.
ちょっと待ってください.
少し修正しないと,動作が不安定なもんですから.


[8325] Re19:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 17:25:02 TS
▼ Mr.XRAYさん
>しかし,このクラス名を使用して,最初に検出したウィンドウハンドルでは,
>FireFox の位置とサイズは変更できません.


>ツリー構造の中の,同じ MozillaWindowClass とクラス名のウィンドウハンドルを
>使用すると,位置とサイズが設定できます.>


上記の関連情報がインターネット上にないか色々探しましたが、まったく判りません。
完全にお手上げ状態です。

>ちょっと待ってください.
>少し修正しないと,動作が不安定なもんですから.


上手く行くのをお待ちしてます。

[8327] Re20:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 18:05:40 Mr.XRAY
▼ TSさん

スミマセン.ちょっくら用事ができ,
ちょっと出かけてきます.
戻ったら,どうせ休みですので.やりますんで.申し訳ないです.


[8328] Re21:Windows8のWinapiの動作について返信 削除
2014/12/28 (日) 18:22:01 TS
▼ Mr.XRAYさん
こちらこそ申し訳ないです。
いってらっしいませ。


[8331] Re22:Windows8のWinapiの動作について返信 削除
2014/12/29 (月) 17:02:53 Mr.XRAY
▼ TSさん

遅くなって申し訳ありません.
なんとか解決方法を,と思ったのですが,いまいち規則性が把握できません.

http://mrxray.on.coocan.jp/Delphi/Others/007.htm
↑ は,

サンプルプログラム集の
[03_システム関係ダイアログの場合]
http://mrxray.on.coocan.jp/Delphi/plSamples/645_WindowTree.htm#03

で,ウインドウのツリー構造を表示したものです.
今回は,FireFox のウインドウの位置とサイズの変更を試みました.
図では同じクラス名のウィンドウが 3 つありますが,
1 つ,2 つの時もあります.
FireFox で表示しているタブ数に関係しているわけですが,
おそらく,このようなことが関係しているのではないかと思っています.
(前に推測した内容と違っていますね.スミマセン)

ハズしているかも知れませんが.とりあえず報告まで.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82