掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShellExecute(Handle, 'OPEN', '・・・で起動したアプリを閉じるには (ID:32339)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
以前「Windows画像とFAXビューアーを使えませんか」で 質問させて頂いた新米です。 やっとFAXビューアーを使ったスライドショーのひな形を 「美味しい草なら 」さんのサンプルを元に、 元来同一フォルダ内の再生用を任意のフォルダのファイルを集めて ファイルをListboxに取得してスライドショーをするように作りました。 質問は (1)このアプリがFAXビューアーに隠れた状態で動くのが運命なので キーアクションを取得するのにいろいろやってタイマーを付けておけば キーアクションを取得してショーができましたが、 タイマーのアクションに頼るのでレスポンスが悪い。 何かいい方法はないでしょうか。 (2)ShellExecute(Handle, 'OPEN', 'Rundll32.exe',PChar(・・で起動したFAXビューアーを キーアクション(この例ではQ)で閉じることができないでしょうか。 参考サイトを見てやりましたが閉じてくれません。 以上2点ですっきりしません。よりよい方法をできましたらお願いします。 見苦しいコードですが最低動く要点を書いてみます。 var ListNo:integer; //画像ファイルパスをListboxに登録する procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Application.OnMessage := MsgHandler; //スライドショーのキーアクションキャッチ ListBox1.Sorted:=true; OpenDialog1.Options:=[ofAllowMultiSelect]; //複数のファイルを選択する if OpenDialog1.Execute then for i := 0 to OpenDialog1.Files.Count - 1 do Listbox1.Items.Add(OpenDialog1.Files[i]); ListNo:=0; end; //キーアクションを取得してファイルリストの次か前か終了かを渡す。 procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean); var KeyNo:integer; begin //次へZ if (GetAsyncKeyState(90) <> 0) then begin Sleep(250);SlideShowDisp(1);exit;end else //前へ A if (GetAsyncKeyState(65) <> 0) then begin Sleep(250);SlideShowDisp(2);exit;end else //Qは終了 if GetAsyncKeyState(81)<>0 then begin Sleep(250);SlideShowDisp(8);exit;end; end; //キーアクションの命令を受けて前後のファイルを取り出して表示する procedure TForm1.SlideShowDisp(const c:integer); var hd:HWND; Path:string; begin if ListBox1.Items.Count=0 then exit; case c of 1: begin ListNo:=ListNo+1;end; //------次へ Z 2: begin ListNo:=ListNo-1;end; //------前へ A 8: begin //-----終了 hd := FindWindow('Rundll32.exe',nil); SendMessage(hd, WM_CLOSE, 0, 0); //FAXビューワーが閉じてくれない exit; end; else exit; end; if ListNo<0 then ListNo:=0; if ListNo>ListBox1.Items.Count-1 then ListNo:=ListBox1.Items.Count-1; Path:= 'shimgvw.dll,ImageView_Fullscreen '+ListBox1.Items.Strings[ListNo]; ShellExecute(Handle, 'OPEN', 'Rundll32.exe',PChar(Path), nil, SW_SHOW); end; //なぜか後ろに隠れるとキーが効かないのでタイマーを付けてみた(スマートでない) procedure TForm1.Timer1Timer(Sender: TObject); begin {Nothing} end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.