喫茶XRAYトップページ

[スレッド全体
]

[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