ShowWindow


小雪  2005-01-12 22:20:51  No: 12656

*略*
hMutex := OpenMutex( MUTEX_ALL_ACCESS, True, MutexName );
ShowWindow(hMutex, SW_MAXIMIZE);

上記の様なプラグラムを組んだのですが最大化(SW_MAXIMIZE)してくれません
これはミューテックスの受け渡しが悪いのでしょうか。


りおりお  2005-01-12 23:49:50  No: 12657

ミューテックスのハンドルを渡して、どのウィンドウを最大化したいのでしょう?


小雪  2005-01-12 23:53:23  No: 12658

りおりお様

まだミューテックスについて理解してないのでオバカな発言かもしれませんが、

hMutex := OpenMutex( MUTEX_ALL_ACCESS, True, MutexName );

↑でハンドルを取得します。
このハンドルを持つウィンドウを最大化なり最小化したいのですが…

いずれは指定したウィンドウを最大化なり最小化する事が理想です。


りおりお  2005-01-13 00:11:17  No: 12659

> このハンドルを持つウィンドウを最大化なり最小化したいのですが…

ミューテックスは特定のウィンドウとは無関係です


小雪  2005-01-13 00:18:17  No: 12660

りおりお様

> ミューテックスは特定のウィンドウとは無関係です

そうなんですか!?

ShowWindow(○○, SW_MAXIMIZE);

↑の○○にはTHandle型を入力すると思っていたのですが…
もし↑のWindows APIで実際にウィンドウを閉じたい(最大化、最小化)
したい場合はどうすればいいのでしょうか。


小雪  2005-01-13 00:23:36  No: 12661

そのTHandle型というのが、

hMutex := OpenMutex( MUTEX_ALL_ACCESS, True, MutexName );

↑でいうhMutexなのですが…(だと思っていたのですが)

例  hMutex : THandle;


りおりお  2005-01-13 00:46:51  No: 12662

最小化したいウィンドウのウィンドウハンドルを設定します。

「ハンドル」はOSが資源を識別するための番号です。ウィンドウハンドルのほか
にもブラシやペン、ビットマップ・・・などハンドルを持つオブジェクトはたくさ
んあります。

ウィンドウハンドルは VCL では TWinControl の Handle プロパティーに相当
しています。たとえば Form1 を最大化したいとき

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowWindow(self.Handle,SW_MAXIMIZE);
end;

とします。


小雪  2005-01-13 00:54:16  No: 12663

> 最小化したいウィンドウのウィンドウハンドルを設定します。

GetForegroundWindow関数で取得できますよね?

ShowWindow(GetForegroundWindow, SW_MAXIMIZE);

↑の記述でも最大化してくれません。
何が悪いのでしょうか。
(オバカですいません…)


寒いですね。  2005-01-13 03:02:43  No: 12664

ココで解決できるかも。
http://www.wwlnk.com/boheme/


スタテツ  2005-01-13 03:26:48  No: 12665

例えばこのようにやればメモ帳が最大化されます。
GetForegroundWindowでも可能かと思いますがソースが無いのでどこが間違ってるかは分かりませぬ

procedure TForm1.Button1Click(Sender: TObject);
var hWND:THandle;
begin
hWND:=FindWindow('Notepad',nil);
ShowWindow(hWND,SW_MAXIMIZE);
end;


もしかして  2005-01-13 03:32:30  No: 12666

ShowWindow(GetForegroundWindow, SW_MAXIMIZE);
をボタンクリック時にしますと、
ボタンを押したフォームが最前面になります。
タイマーとか使ってラグを出すか、二番目のフォームを探すかする必要があります。


小雪  2005-01-13 04:06:26  No: 12667

現在製作中のプログラムの詳細を言いますと、
Form1(人のリスト)から人を選択しButton1を押す。
すると違うウィンドウでその個人情報(A)が表示される。
それで(A)を閉じないまま、また違う人を選択、表示すると(A)が消え(B)が表示されるという流れです。
(A)を消し(B)を表示するという点では巷でよく拝見される「2重起動禁止」とは違う所です。

という事で「DestroyWindow関数」を使おうと思ったのですが、
ハンドルがうまく渡ってないのか消えてくれませんし、最大化、最小化もしてくれません。

> もしかして様
確かにフォームが最大化しました

> スタテツ様
確かにメモ帳が最大化されました
ShowWindow関数の後ろの引数は一部作動しないのでしょうか
OSによるとは記載されてますが…

> 寒いですね様
ホントに寒いですね、雪降ってます
リンク先を覗いてみます


jok  2005-01-13 11:35:39  No: 12668

> すると違うウィンドウでその個人情報(A)が表示される。

どうもよく分からないのですが、「違うウィンドウ」とは

1)別なアプリのウィンドウ
2)同じアプリの違うフォーム

どちらでしょう? 1)ならなぜ 2)にしないのでしょう?
2)ならなんとでも出来ますけど。ウィンドウを表示するたびに別アプリを起動
するのはなんとも非効率です。

1)なら

https://www.petitmonte.com/bbs/answers?question_id=2314

と同じですか?


小雪  2005-01-13 18:32:28  No: 12669

> jok様

リストのexe(仮:A.EXE)と詳細表示(仮:B.EXE)は別アプリという事ですよね?
一応、詳細表示のウィンドウはB.EXEで処理してますが…
違う返答だったらごめんなさいっ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加