プロが教える店舗&オフィスのセキュリティ対策術

現在アクティブなウィンドウは
GetForegroundWindow()で取得できるんですが
その直前にアクティブだったウィンドウって
取得する方法はありますか?

A 回答 (4件)

あるエディットボックスにフォーカスをあてておいて後からプログラムを起動した場合にはそのエディットボックスがなんだったかを取得する方法は私には思いつきません。



私だったらお望みの動作を行うためには次のアプローチで行います。
1.その動作を行うプログラムはあらかじめ起動しておくことにする。
2.その動作を行う際にはホットキー(ATL, CTRL, SHIFTなどと通常のキーを組み合わせたあまり使われることのないキー)により行うことにする。

この条件で動作するプログラムは
1.グローバルフックをセットしてホットキーが押されたことを検知して
2.そのときにフォーカスのあたっているWindowのハンドルを取得する。
3.そのハンドルの指すWindowがエディットボックスだったら目的の動作を行う。

でいかがでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます。
まだその方法を試していないんですが、なかったらそうしようと思います。
実は、Docomoのi絵文字というツールがあるのですが、それはフォーカスが当たっていた任意のエディットボックスに(含IE)特定の絵文字のボタンを押すと、その文字コードを入れる、ていうものです。
それと同じように文字を入れられると思ったのですが、難しいようですね。。

お礼日時:2006/03/28 23:48

GetNextWindow()を使ってz軸(前後関係)でひとつ後ろのウインドウハンドルを取得できます。


----------------------------------------
hWnd=自分自身など現在アクティブなウインドウのハンドル

hWnd=GetNextWindow(hWnd,GW_HWNDNEXT);
----------------------------------------
このようにすればひとつ後ろのウインドウハンドルが取得できますが、多くの場合IMEがひとつ後ろになりますので思ったとおりの結果が得られない可能性があります。ウインドウハンドルを取得後、GetWindowText()でウインドウタイトルを取得し、IMEのようだったら再度GetNextWindow()を行う必要があります。
もしくはGetNextWindow()だけでは不十分なのかも知れません。


pease(char *str,HWND cWnd){
char buf[256];
int num=0;

do{
if(num++ > 200) break;
cWnd=GetNextWindow(cWnd,GW_HWNDNEXT);
GetWindowText(cWnd,buf,sizeof(buf));
}while(strstr(buf,"Internet Explorer")==NULL);
if(SetForegroundWindow(cWnd)==FALSE){
MessageBox(NULL,TEXT("errrr1"),TEXT("blog"),MB_OK);
}
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('V', 0, 0, 0);
keybd_event('V', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
    • good
    • 0
この回答へのお礼

上記の様にしたんですが、
200通り全て""になってしまいました。
どこが駄目なのかもわからずで、どうすればいいか…。

お礼日時:2006/03/28 23:10

あるエディットボックスにフォーカスがある状態でプログラムを起動してそのエディットボックスに文字列を入力したいが、プログラムを起動した時点でそのプログラムのWindowにフォーカスが移ってしまうのでその前にフォーカスのあったWindowを知りたい。



ということでしょうか?
    • good
    • 0
この回答へのお礼

言いたいことはそうです。
わかりやすくしてくれてありがとうございます。
|(_ _)|

お礼日時:2006/03/28 16:33

フックを利用してWM_ACTIVATEを監視して、アクティブWindowの履歴を記録すればできるような気がします。


が、なぜそのようなことがしたいのかわかればもっと適切な方法を示すことができるかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
何に使うかというと、現在フォーカスが当たっているエディットに文字列を入れたいからです。
そのために、ハンドルを取得して操作できるかなと考えました。
なにか詳細を教えてくれれば嬉しいです。

お礼日時:2006/03/23 13:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!