やりたいことの基本は
keybd_event(VK_SNAPSHOT, 1, 0, 0);
Image1.Picture.Assign(ClipBoard);
Image1.Picture.Bitmap.SaveToFile(BmpFile);
これだけなのですが、
1.タスクマネージャーが起動しているかをチェックする
2.起動していれば、一定時間ごとにタスクマネージャーの画像を
keybd_event(VK_SNAPSHOT, 1, 0, 0);
を使ってクリップボードに読込む
3.クリップボードからImage1に表示する
4.Image1のビットマップデータファイルで出力する
これを実行するためのプログラムはどうすればよいのでしょうか?
現在:
ボタンを押すと、Myアプリがキャプチャーされます。
また、Visibile:=false を入れてみましたが、
前回のアクティブウィンドウと消えかけのMyアプリがキャプチャされます。
この部分をどうすればよいのか教えてください
EnumWindows
GetWindowText をおすすめます。
春子:「はい、スナック渚です、…あ、マサルさんか、朝早くからナンの用?」
勝爺:「マコトの姿が見えねえンだけど、そっちに行ってねぇか? ハルコ」
春子:「え? こっちには来てないよ、マコトがいないって何時からなの?」
勝爺:「今朝、起きて来ねぇンで、マコトの部屋に見に行ったらモヌケの殻だよ」
春子:「浜辺を散歩でもしてるンじゃないの?」
勝爺:「一応、浜辺も探したけど見つからねえンだ、それでハルコのとこに電話を…」
春子:「マコトが家出なんてするハズないよね?」
勝爺:「マコトはそんなコトしねえぞ、オレはガキの頃は何度も家出したけどな」
春子:「へぇ〜、悪ガキだったんだ、…で、昨日マコトは変なコト言ってなかった?」
勝爺:「そういやぁ、昨夜、"夏の始めに戻れないかなぁ"なんてコトを…」
春子:「えッ、まさか…もしかして"時の迷子"に…、分かった、アタシ探しにいく」
勝爺:「なんだ? 迷子? そんな歳じゃねぇだろ、マコトは」
春子:「マコトは夏の始めに戻ろうとして、時の空間で迷子になったのよ、きっと」
勝爺:「ナニ言ってンだ? ハルコ」
春子:「こんなコト起きるなんて…、もうこの日の記憶が消えてた…ヤバイな」
勝爺:「ヤバイ? ナニがだよ、ハルコ、ドコ探すンだよ」
春子:「どんどん記憶の時間が短くなってる…、これが最後のタイムトラベルかも」
勝爺:「言ってるコトが分かンねぇぞ、ハルコ」
春子:「心配しないで待ってて、ゼッタイ探し出してみせる、マコトを」
勝爺:「そうか、頼んだぞ、ハルコ、オレはもう一度浜辺を探す、じゃ電話切るから」
春子:「ヨシ…目標は今年の夏の始め、でも何月何日?…とにかくそのあたりに行ってみなきゃ」
procedure TForm1.Timer1Timer(Sender: TObject);
var
hw: HWND;
DC: HDC;
R: TRect;
begin
hw := FindWindow('#32770','Windows タスク マネージャ');
if hw = 0 then exit;
GetWindowRect(hw, R);
SetForegroundWindow(hw);
Application.ProcessMessages; Sleep(10);
//DC := GetDC(hw); // ウィンドウ内部だけの場合
DC := GetWindowDC(hw); // タイトルバーも含める場合
if DC <> 0 then begin
Bitblt(Image1.Canvas.Handle, 0, 0, R.Right-R.Left, R.Bottom-R.Top, DC, 0, 0, SRCCOPY);
Image1.Invalidate;
end;
ReleaseDC(Handle, hw);
end;
真琴:「ココは一体ドコなの? ぼやけてナニも見えない…怖いよ、体も浮いてる…ナンで?」
春子:「マコト〜! マコト〜!、居たら返事して、マコト〜〜!」
真琴:「あっ! ハルコさんの声が聞こえる、ハルコさ〜ん、ハルコさ〜〜ん!」
春子:「あ〜良かった、見つかって…、マコト、手をつなぐよ、離さないで」
真琴:「うん、…でも手をつないでもハルコさんの姿が見えない、ココはドコ?」
春子:「マコトは無茶したから"時の迷子"になったのよ、出口はあっち」
真琴:「出口? アタシにはナニも見えないよ、ハルコさん」
春子:「マコトが時の空間に入ったあの夜のマコトの部屋に戻るよ、いいね」
真琴:「だけどナンでこんなコトに…、アタシはベッドで夢をみてた気がするけど…」
春子:「その夢がマコトの場合のタイムトラベルの方法なの、皆、方法は違うのよ」
真琴:「そぅ、アタシ、夏の始めに戻りたいって思いながら眠っちゃって」
春子:「マコトはまだ若葉マークが付いてるンだから、気を付けなきゃダメじゃない」
真琴:「ハルコさん、冗談じゃなかったンだね、ハルコさんもアタシと同じ…」
春子:「でもネ、アタシは多分コレが最後の旅…、もう助けにも行けないから」
真琴:「えっ、なんで?」
春子:「タイムトラベル繰り返すと、その時の記憶が残る時間が短くなっていくのよ」
真琴:「そっか、だからアタシが二年前に戻る出来事も記憶になかったンだね」
春子:「そういうコト、そしてその能力はもう直ぐ消える…、ま、定年ってコトかな」
真琴:「タイムトラベラーの定年? そんなに早いの?」
春子:「さ、ここからマコトの部屋に戻って、翌朝に目覚めたら全部夢の中の出来事よ」
真琴:「あっ、アタシの部屋が見える」
春子:「そこを真っ直ぐ目指して、一人で」
真琴:「え? ハルコさんも一緒に戻るンじゃないの?」
春子:「アタシの出口は別よ、それに、戻る前にやりたいコトが一つ残ってるから」
真琴:「ハルコさん、アタシ変な夢をみたんだけど…」
春子:「変て、どんな?」
真琴:「アタシが迷子になってるのを、ハルコさんが探して助けてくれる夢」
春子:「え〜? もう迷子になるような歳じゃないし、確かに変な夢かな? それ」
真琴:「ナンでそんな夢をみたんだろぅ、フシギ」
春子:「記憶の片隅にあった子供の頃の出来事を夢でみるコトもあるけどね」
真琴:「あっそういえば、アタシ、小さい頃に迷子になった、…でも探して助けてくれたのはお母さん」
春子:「夢は体験と全部同じってワケじゃないヨ、登場人物が違うコトはヨクあるの」
真琴:「登場人物の間違い? …そうね、夢は理屈通りじゃないしネ」
春子:「間違いといえば、引数を間違えてたよ、マコトを探すのにアセってたから」
真琴:「え? ナンでハルコさんがアセるの? アタシの夢なのに」
春子:「あっ^^;; そんな細かいコトは気にしない、気にしない^^;;」
真琴:「そう? それでドコを間違えたの?」
春子:「この引数よ」
× ReleaseDC(Handle, hw);
○ ReleaseDC(hw, DC);
真琴:「そうだよね、コレ間違ってる」
春子:「なにしろ、表示してるのが"タスクマネージャ"だから、メモリ使用量が4バイトづつ増えるのが、バレバレ^^;」
真琴:「"上手の手から水"じゃなくて、"メモリが漏れる"ってワケ?」
春子:「"猿も筆の誤り"とも言うかな?」
真琴:「ハルコさん、それ"弘法も木から落ちる"の間違いじゃない?」
すみません。
あれから、いろいろとやってみました。
タスクマネージャがすでに起動している場合は問題ないのですが、
起動していない場合に以下のようにしてみました。
hw := FindWindow('#32770','Windows タスク マネージャ');
if hw = 0 then begin
WinExec('taskmgr', SW_SHOWNORMAL);
hw := FindWindow('#32770','Windows タスク マネージャ');
if hw = 0 then Exit
end;
タスクマネージャが起動されていなければ起動するようにしました。
ところが、2回目のFindWindow で hw が 0 になって
終了してしまいます。
どのように対処すればよいのでしょうか?
ども。
hw := FindWindow('#32770','Windows タスク マネージャ');
if hw = 0 then begin
WinExec('taskmgr', SW_SHOWNORMAL);
//↓↓
Application.ProcessMessages; Sleep(10);//<-これ入れてみたら?
//↑↑
hw := FindWindow('#32770','Windows タスク マネージャ');
if hw = 0 then Exit
end;
Application.ProcessMessages; Sleep(10);
を入れてみたらどうでしょうか?
外してたら、ごめんなさいです。
確実なのは、CreateProcess() で起動して、ウィンドウができるのを待つのですが、検索すると例がいっぱいあるのでは?
CreateProcess() でできそうです。
ありがとうございました。
ツイート | ![]() |