喫茶XRAYトップページ

[▲前のスレッド]

[8332] Delphi2010とDelphiXEとの違い返信 削除
2014/12/29 (月) 21:00:36 TS
内容は前回の続きです。題名は変えました。

Operaの場合タブを増やしてもDelphi2010では動作して、DelphiXE5では動作しません。
テストプログラムに表示されるハンドルの数値は同一となります。
Windows.pasとWinapi.windows.pasをみても特別な事はしてない様なのに不思議です。

[8333] Re:Delphi2010とDelphiXEとの違い返信 削除
2014/12/29 (月) 21:21:36 Mr.XRAY
▼ TSさん

> Operaの場合タブを増やしてもDelphi2010では動作して、DelphiXE5では動作しません。
> テストプログラムに表示されるハンドルの数値は同一となります。
> Windows.pasとWinapi.windows.pasをみても特別な事はしてない様なのに不思議です。


私もソースコードみました.
同じなんですよね.当たり前かもしれませんが.
もちろん,使用している DLL も同じです(そりゃそうですよね).
不思議です.何故なんでしょう.一体...


[8334] Re2:Delphi2010とDelphiXEとの違い返信 削除
2014/12/29 (月) 21:47:36 TS
▼ Mr.XRAYさん
> 不思議です.何故なんでしょう.一体...
もっと不思議なのはいままでXPのDelphi2010の環境だったので不自由がなかったの
ですが、この状態が本当に続いているのなら誰か文句をいっても良いぐらいですが。

疑問なのは私の環境だけで起こっている事なのでしょうか。


[8335] Re3:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 08:20:52 Mr.XRAY
▼ TSさん

> 疑問なのは私の環境だけで起こっている事なのでしょうか。

私は確認できる環境がないので...

# どんどん古いバージョンを削除中です.


[8336] Re4:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 10:19:18 TS
▼ Mr.XRAYさん

ファイラーの「As/R」も操作出来ませんでした。
http://www.all.undo.jp/asr/

> 私は確認できる環境がないので...
> # どんどん古いバージョンを削除中です.


知りたい動作確認の対象はDelphiXE5又はDelphiXE7です。
対象プログラムは今のところ上記の「As/R」「Opera 12.17」
「デジカメDe!!同時プリント9」です。



[8337] Re5:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 11:45:54 Mr.XRAY
> 知りたい動作確認の対象はDelphiXE5又はDelphiXE7です。
> 対象プログラムは今のところ上記の「As/R」「Opera 12.17」
> 「デジカメDe!!同時プリント9」です。


どれも持っていないなぁ,
Delphi XE5 Pro はもっています.
As/R を調べたら,間違いなくウィンドウハンドルの「検出が困難」な部類ですね.

http://www.forest.impress.co.jp/library/img/review/10986/html/asr.jpg.html

サンプルプログラム集に,関係あるサンプルを掲載している都合上,
調べないといけないのかなぁ...
どっかに書いた記憶が... ないか...


[8338] Re6:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 12:09:05 TS
▼ Mr.XRAYさん
> どれも持っていないなぁ,
ちなみに「As/R」はフリーソフトで以前の「まめFile」の時から
のお気に入りのファイラで使用させてもらっています。

> As/R を調べたら,間違いなくウィンドウハンドルの「検出が困難」な部類ですね.
今知りたいのは「検出の仕方」ではなく、
私以外の方も同様な症状になるかどうかが気になります。

なにか、個人的な用件で質問している様で申し訳ありません。


[8340] Re7:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 15:42:53 TS
▼ Mr.XRAYさん
お騒がせしました。
実行ファイルを管理者権限で実行すると上手く動作します。
Mr.XRAYさんの記事になにか関係のあるものを見た気がしますので、
探して見ます、とりあえず報告まで。


[8343] Re8:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 17:50:24 Mr.XRAY
▼ TSさん

> 実行ファイルを管理者権限で実行すると上手く動作します。

およっ!!
よかったです.
実は,Delphi 2009, 2010 を Windows 7 にインストールしてみました.
(こういうことを繰り返しているバカです.ハイ)
で,Opera をインストールして試してみました.

http://www.opera.com/ja

ウィンドウハンドルの取得は,FindWindwos ではなく EnumWindow で列挙し,
Visible で Parent のないウィンドウを検出してやってみました.
Delphi 2009, 2010, XE 共に,Opera の位置とサイズが変更できました.
ただし,IDE 環境からの実行です.つまり,管理者権限での実行です.

> Mr.XRAYさんの記事になにか関係のあるものを見た気がしますので、

「管理者権限」と,TS さんのこの文章で思いだしました.
後で,関係ある記事を修正やら変更しようと思います.
管理者権限で実行しないと,実行ファイル名が取得できない,という内容です.
プロセスのリスト等を取得するサンプルです.確か.

スレッドが長くなった場合,別スレッドにするのも意味がありますね.
後で調べやすいです.


[8347] Re9:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 19:08:44 TS
▼ Mr.XRAYさん
> よかったです.
お世話を掛けます、一応ほっとはしていますが。
原因は分かりましたが、対処方法がまだ分かりません。

実行ファイルを作って動作させると言う事は出来るのですが。

IDE 環境から管理者権限での実行は出来ていません。
プログラムのトレースが出来ません。どうした物でしょうか。


[8348] Re10:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 19:37:40 Mr.XRAY
▼ TSさん

> お世話を掛けます、一応ほっとはしていますが。
> 原因は分かりましたが、対処方法がまだ分かりません。


ちょっと考えてみます.
こういうのは,割と得意な方だったハズなのですが,最近ダメですね.


[8349] Re11:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 21:28:13 Mr.XRAY
> ちょっと考えてみます.

前に
>Visible で Parent のないウィンドウを検出してやってみました.

と書いたのですが,Parent ではなく Owner を持たないウィンドウを
検出していましたが,これはなくてもいいようです.
少なくても私の環境では.
テストしたコードと図です.
図の TMemo はテストでハンドル名等を表示するために使用したものです.
下のコードでは,そのコードは削除しています.

動作確認環境は Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.
Opera と FireFox で動作することを確認しています.
IDE 上でコンパイルして実行しても,作成した EXE を起動しても,
位置とサイズが変更できることを確認しています.


//-----------------------------------------------------------------------------
//  ウィンドウハンドルからウィンドウのクラス名を取得する関数
//-----------------------------------------------------------------------------
function GetWindowClassNameStr(hWindow: HWND): String;
var
  Buffer : array[0..MAX_PATH-1] of Char;
  Len    : Integer;
begin
  FillChar(Buffer, SizeOf(Buffer), #0);
  Len := GetClassName(hWindow, Buffer, Length(Buffer));
  if Len > 0 then Result := Buffer else Result := '';
end;

//-----------------------------------------------------------------------------
//  アプリのウィンドウハンドルを取得するためのEnumWindowsのコールバック関数
//  クラス名が目的の名前で,VisibleがTrueのウインドウのハンドルを求める
//-----------------------------------------------------------------------------
function EnumWindowsProc(hWindow: HWND; lp: LPARAM): BOOL; stdcall;
var
  ClassName : String;
begin
  Result := True;

  ClassName := GetWindowClassNameStr(hWindow);
  if UpperCase(ClassName) = UpperCase(Trim(Form1.Edit1.Text)) then begin
    if IsWindowVisible(hWindow) then begin
      LPDWORD(lp)^ := hWindow;
      Result := False;
    end;
  end;
end;

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
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
  hTargetWnd : HWND;
  Flags      : Cardinal;
begin
  hTargetWnd := 0;

  EnumWindows(@EnumWindowsProc, LPARAM(@hTargetWnd));
  if hTargetWnd <> 0 then begin
    Flags := SWP_NOZORDER or SWP_SHOWWINDOW;
    SetWindowPos(hTargetWnd, 0, 0, 0, 500, 800, Flags);
  end;
end;



[8350] Re12:Delphi2010とDelphiXEとの違い返信 削除
2014/12/30 (火) 21:42:48 Mr.XRAY
> IDE 上でコンパイルして実行しても,作成した EXE を起動しても,
> 位置とサイズが変更できることを確認しています.


Opera も FireFox も「管理者として実行」した場合は,
テストプログラムも「管理者として実行」が必要です.


[8355] Re13:Delphi2010とDelphiXEとの違い返信 削除
2014/12/31 (水) 09:30:01 TS
▼ Mr.XRAYさん

お世話になります。私のお間抜けな質問でまた1つ有用なコードが
使用させて貰えてうれしいです。

お間抜けな結論は私がDelphiを起動するのに「管理者として実行」して
いなかったからです。

「Delphi2010とDelphiXEとの違い」はなかったが結論です。

Mr.XRAYさんの
Windows Vista 以降の OS で Delphi
http://mrxray.on.coocan.jp/Delphi/Others/WindowsVista.htm

の記事で
procedure TForm1.FormShow(Sender: TObject);
begin
//IsUserAnAdminの使用には,usesにShlObjが必要
  if IsUserAnAdmin then begin
    showmessage('管理者権限で実行中');
  end else begin
    showmessage('管理者権限以外で実行中');
  end;
end;
でテストして初めて気づきました。

Delphiを起動するのに「管理者として実行」しなければ
作成中のプログラムも「管理者として実行」しないと言う事でした。

これに懲りられず、また来年もよろしくお願いします。


[8356] Re14:Delphi2010とDelphiXEとの違い返信 削除
2014/12/31 (水) 09:54:24 Mr.XRAY
▼ TSさん.どうもです.

> これに懲りられず、また来年もよろしくお願いします。

いやいや,ちょっと嬉しいです.

(1) 当サイトの記事が役にたったらしい
(2) TS さんレベルの方でも,Vista以降への移行で苦労することがある

なんと言っても「人の不幸は蜜の味」ですから.
ゴメンなさい (^^;
また来年もよろしくお願いします.


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