*略*
hMutex := OpenMutex( MUTEX_ALL_ACCESS, True, MutexName );
ShowWindow(hMutex, SW_MAXIMIZE);
上記の様なプラグラムを組んだのですが最大化(SW_MAXIMIZE)してくれません
これはミューテックスの受け渡しが悪いのでしょうか。
ミューテックスのハンドルを渡して、どのウィンドウを最大化したいのでしょう?
りおりお様
まだミューテックスについて理解してないのでオバカな発言かもしれませんが、
hMutex := OpenMutex( MUTEX_ALL_ACCESS, True, MutexName );
↑でハンドルを取得します。
このハンドルを持つウィンドウを最大化なり最小化したいのですが…
いずれは指定したウィンドウを最大化なり最小化する事が理想です。
> このハンドルを持つウィンドウを最大化なり最小化したいのですが…
ミューテックスは特定のウィンドウとは無関係です
りおりお様
> ミューテックスは特定のウィンドウとは無関係です
そうなんですか!?
ShowWindow(○○, SW_MAXIMIZE);
↑の○○にはTHandle型を入力すると思っていたのですが…
もし↑のWindows APIで実際にウィンドウを閉じたい(最大化、最小化)
したい場合はどうすればいいのでしょうか。
そのTHandle型というのが、
hMutex := OpenMutex( MUTEX_ALL_ACCESS, True, MutexName );
↑でいうhMutexなのですが…(だと思っていたのですが)
例 hMutex : THandle;
最小化したいウィンドウのウィンドウハンドルを設定します。
「ハンドル」はOSが資源を識別するための番号です。ウィンドウハンドルのほか
にもブラシやペン、ビットマップ・・・などハンドルを持つオブジェクトはたくさ
んあります。
ウィンドウハンドルは VCL では TWinControl の Handle プロパティーに相当
しています。たとえば Form1 を最大化したいとき
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(self.Handle,SW_MAXIMIZE);
end;
とします。
> 最小化したいウィンドウのウィンドウハンドルを設定します。
GetForegroundWindow関数で取得できますよね?
ShowWindow(GetForegroundWindow, SW_MAXIMIZE);
↑の記述でも最大化してくれません。
何が悪いのでしょうか。
(オバカですいません…)
ココで解決できるかも。
http://www.wwlnk.com/boheme/
例えばこのようにやればメモ帳が最大化されます。
GetForegroundWindowでも可能かと思いますがソースが無いのでどこが間違ってるかは分かりませぬ
procedure TForm1.Button1Click(Sender: TObject);
var hWND:THandle;
begin
hWND:=FindWindow('Notepad',nil);
ShowWindow(hWND,SW_MAXIMIZE);
end;
ShowWindow(GetForegroundWindow, SW_MAXIMIZE);
をボタンクリック時にしますと、
ボタンを押したフォームが最前面になります。
タイマーとか使ってラグを出すか、二番目のフォームを探すかする必要があります。
現在製作中のプログラムの詳細を言いますと、
Form1(人のリスト)から人を選択しButton1を押す。
すると違うウィンドウでその個人情報(A)が表示される。
それで(A)を閉じないまま、また違う人を選択、表示すると(A)が消え(B)が表示されるという流れです。
(A)を消し(B)を表示するという点では巷でよく拝見される「2重起動禁止」とは違う所です。
という事で「DestroyWindow関数」を使おうと思ったのですが、
ハンドルがうまく渡ってないのか消えてくれませんし、最大化、最小化もしてくれません。
> もしかして様
確かにフォームが最大化しました
> スタテツ様
確かにメモ帳が最大化されました
ShowWindow関数の後ろの引数は一部作動しないのでしょうか
OSによるとは記載されてますが…
> 寒いですね様
ホントに寒いですね、雪降ってます
リンク先を覗いてみます
> すると違うウィンドウでその個人情報(A)が表示される。
どうもよく分からないのですが、「違うウィンドウ」とは
1)別なアプリのウィンドウ
2)同じアプリの違うフォーム
どちらでしょう? 1)ならなぜ 2)にしないのでしょう?
2)ならなんとでも出来ますけど。ウィンドウを表示するたびに別アプリを起動
するのはなんとも非効率です。
1)なら
https://www.petitmonte.com/bbs/answers?question_id=2314
と同じですか?
> jok様
リストのexe(仮:A.EXE)と詳細表示(仮:B.EXE)は別アプリという事ですよね?
一応、詳細表示のウィンドウはB.EXEで処理してますが…
違う返答だったらごめんなさいっ
ツイート | ![]() |