Windowsの[スタート]メニューを一時的に使用できなくすることって出来ますか?
[スタート]メニュー非表示設定にしても、使用することが出来るのでVBあたりで無効化したいのですが、方法がありましたら教えてください。
よろしくお願いします。
VBではなくVC++でやるべきです。確実なのはWM_USER+260のメッセージがタスクバーに届かないようにします。たとえば、
(フックのセット)
フックハンドル=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,NULL,GetWindowThreadProcessId(FindWindow("Shell_TrayWnd",""),NULL));
(フックプロシージャ)
LRESULT GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode>=0)
{
if (((MSG*)lParam)->message==WM_USER+260) (((MSG*)lParam)->message=0);
}
return CallNextHookEx(フックハンドル,nCode,wParam,lParam);
}
でもフックはだめですよねー?
>DotLさん書き込みありがとうございます。
C++はあまりバリバリでないので変な質問になってしまいますが
フックしたら起動中のアプリケーションすべてにもイベントが取得できなくなくなることですよね・・・?
極論、自分のアプリだけイベントが取得できればいいんですけど・・・
VBでは無理みたいですね・・・;失礼しました。
フックは簡単に言うと、本来のウィンドウのプロシージャにメッセージが行く前に、
独自処理を通すっていうだけです。
そこで次のフックプロシージャもしくはウィンドウプロシージャにメッセージをそのまま渡すこともできるし、
そこで消してしまう(次のプロシージャにはそのメッセージはなかったことにする)ことも、変更することもできます。
次のフックやウィンドウにはちゃんとメッセージは届きますし、イベントは届きますよ。
多分あなたのパソコンにもいくつものフックアプリケーションが入ってると思います、フリーソフトではAgainTyper、窓立て2、マウ筋、秀Capsなどが入ります。
簡単に言うと"〜Hook.dll"のような名前のあるDLLが、
その場にあるフリーソフトの多くは、フックを入れてるんでしょう。
それらが入っていても、他のソフトは普通に動作しますよね。
ただ確かに、VBでは不安定すぎるので、確実にC言語でやったほうがいいでしょう。
Delphiでも十分可能ですけど、VBではDLLが作れないし独自定義のウィンドウメッセージの取得もつらいし、やはりちょっと条件が悪すぎます^^;確かに、両方とも知恵で切り抜けている人もいますが…。
CもDelphiも、フックソフトを作るくらいの物を作れるだけのものなら、
お金をかけずに手に入ります。
(C言語はBCC、DelphiはDelphi6Personalが、ともにBorlandで登録してダウンロード可能)
>たかみちえ様 詳しい助言ありがとうございます!
今までもHookが必要な場面は遭遇したのでしたが、無視して逃げていました・・・皆様の助言を元に、これを機会に勉強しようと思います。
本当にありがとうございました!
ツイート | ![]() |